
- •Операційні системи Конспект лекцій
- •1. Введення
- •1.1. Предмет і завдання курсу
- •1.2. Рекомендації по літературі
- •1.3. Короткий нарис історії ос
- •1.3.1. Передісторія ос
- •1.3.2. Пакетні ос
- •1.3.3. Ос з поділом часу
- •1.3.4. Однозадачні ос для пеом
- •1.3.5. Багатозадачні ос для пк з графічним інтерфейсом
- •1.4. Класифікація ос
- •1.5. Критерії оцінки ос
- •1.5.2. Ефективність
- •1.5.3. Зручність
- •1.5.4. Масштабованість
- •1.5.5. Здатність до розвитку
- •1.6. Основні функції і структура ос
- •1.7. Ос, що використовуються в подальшому викладі
- •1.7.2. Windows
- •1.7.3. Unix
- •2. Управління пристроями
- •2.1. Основні завдання управління пристроями
- •2.2. Класифікація периферійних пристроїв і їх архітектура
- •2.3. Переривання
- •2.4. Архітектура підсистеми вводу / виводу
- •2.5. Способи організації введення / виводу
- •2.5.1. Введення / висновок з опитування і по перериваннях
- •2.5.2. Активне і пасивне очікування
- •2.5.3. Синхронний і асинхронний ввід / вивід
- •2.6. Буферизація і кешування
- •2.6.1. Поняття буферизації
- •2.6.2. Згладжування нерівномірності швидкостей процесів
- •2.6.3. Розпаралелювання введення та обробки
- •2.6.4. Узгодження розмірів логічної та фізичної записи
- •2.6.5. Редагування при інтерактивному введенні
- •2.6.6. Кешування дисків
- •2.6.7. Випереджаюче читання.
- •2.7. Драйвери пристроїв
- •2.8. Управління пристроями в ms-dos
- •2.8.1. Рівні доступу до пристроїв
- •2.8.2. Драйвери пристроїв в ms-dos
- •2.8.3. Управління символьними пристроями
- •2.8.4. Управління блоковими пристроями
- •2.8.4.1. Структура диска
- •2.8.4.2. Розділи і логічні томи
- •2.8.4.3. Засоби доступу до дисків
- •2.9. Управління пристроями в Windows
- •2.9.1.1. Драйвери пристроїв в Windows
- •2.9.1.2. Доступ до пристроїв
- •2.10. Управління пристроями в unix
- •2.10.1. Драйвери пристроїв в unix
- •2.10.2. Пристрій як спеціальний файл
- •3. Управління даними
- •3.1. Основні завдання управління даними
- •3.2. Характеристики файлів та архітектура файлових систем
- •3.3. Розміщення файлів
- •3.4. Захист даних
- •3.5. Поділ файлів між процесами
- •3.6. Файлова система fat і управління даними в ms-dos
- •3.6.1. Загальна характеристика системи fat
- •3.6.2. Структури даних на диску
- •Структура записи каталога файловой системы fat
- •3.6.4. Робота з файлами в ms-dos
- •3.6.4.1. Системні функції
- •3.6.4.2. Доступ до даних
- •3.6.4.3. Структури даних у пам'яті
- •3.6.5. Нові версії системи fat
- •3.7. Файлові системи і управління даними в unix
- •3.7.1. Архітектура файлової системи unix
- •3.7.1.1. Жорсткі і символічні зв'язку
- •3.7.1.2. Монтовані томи
- •3.7.1.3. Типи і атрибути файлів
- •3.7.1.4. Управління доступом
- •3.7.2. Структури даних файлової системи unix
- •3.7.3. Доступ до даних в unix
- •3.7.4. Розвиток файлових систем unix
- •3.8. Файлова система ntfs і управління даними в Windows
- •3.8.1. Особливості файлової системи ntfs
- •3.8.2. Структури дискових даних
- •3.8.2.1. Головна таблиця файлів
- •3.8.2.2. Атрибути файлу
- •3.8.3. Доступ до даних
- •3.8.4. Захист даних
- •3.8.4.1. Аутентифікація користувача
- •3.8.4.2. Дескриптор захисту
- •4. Управління процесами
- •4.1. Основні завдання управління процесами
- •4.2. Реалізація багатозадачного режиму
- •4.2.1. Поняття процесу і ресурсу
- •4.2.2. Квазіпараллельний виконання процесів
- •4.2.3. Стану процесу
- •4.2.4. Невитісняючаі витісняюча багатозадачність
- •4.2.5. Дескриптор і контекст процесу
- •4.2.6. Реєнтерабельним системних функцій
- •4.2.7. Дисципліни диспетчеризації та пріоритети процесів
- •4.3. Проблеми взаємодії процесів
- •4.3.1. Ізоляція процесів та їх взаємодія
- •4.3.2. Проблема взаємного виключення процесів
- •4.3.3. Двійкові семафори Дейкстри
- •4.3.4. Засоби взаємодії процесів
- •4.3.4.1. Цілочисельні семафори
- •4.3.4.2. Семафори з множинним очікуванням
- •4.3.4.3. Сигнали
- •4.3.4.4. Повідомлення
- •4.3.4.5. Спільна пам'ять
- •4.3.4.6. Програмні канали
- •4.3.5. Проблема тупиків
- •4.4. Управління процесами в ms-dos
- •4.4.1. Процеси в ms-dos
- •4.4.2. Середа програми
- •4.4.3. Запуск програми
- •4.4.4. Завершення роботи програми
- •4.4.5. Перехоплення переривань і резидентні програми
- •4.5. Управління процесами в Windows
- •4.5.1. Поняття об'єкта у Windows
- •4.5.2. Процеси і нитки
- •4.5.3. Планувальник Windows
- •4.5.4. Процес і нитка як об'єкти
- •4.5.5. Синхронізація ниток
- •4.5.5.1. Способи синхронізації
- •4.5.5.2. Об'єкти синхронізації та функції очікування
- •4.5.5.3. Типи об'єктів синхронізації
- •4.5.5.4. Критичні секції
- •4.5.6. Повідомлення
- •4.6. Управління процесами в unix
- •4.6.1. Життєвий цикл процесу
- •4.6.2. Групи процесів
- •4.6.3. Програмні канали
- •4.6.4. Сигнали
- •4.6.5. Засоби взаємодії процесів в стандарті posix
- •4.6.6. Планування процесів
- •4.6.6.1. Стану процесів в unix
- •4.6.6.2. Пріоритети процесів
- •4.6.7. Інтерпретатор команд shell
- •5. Управління пам'яттю
- •5.1. Основні завдання управління пам'яттю
- •5.2. Віртуальні й фізичні адреси
- •5.3.1. Настроювання адрес
- •5.3.2. Розподіл з фіксованими розділами
- •5.3.3. Розподіл з динамічними розділами
- •5.4. Сегментна організація пам'яті
- •5.5. Сторінкова організація пам'яті
- •5.6. Порівняння сегментної і сторінкової організації
- •5.7. Управління пам'яттю в ms-dos
- •5.8. Управління пам'яттю в Windows
- •5.8.1. Структура адресного простору
- •5.8.3. Відображення виконуваних файлів
- •5.8.4. Файли, відображувані на пам'ять
- •5.8.5. Стеки і купи
- •5.9. Управління пам'яттю в unix
- •Література
5. Управління пам'яттю
5.1. Основні завдання управління пам'яттю
Основна пам'ять (вона ж ОЗУ) є найважливішим ресурсом, ефективне використання якого вирішальним чином впливає на загальну продуктивність системи.
Для однозадачних ОС управління пам'яттю не є серйозною проблемою, оскільки вся пам'ять, не зайнята системою під власні потреби, може бути віддана в розпорядження єдиного користувальницького процесу. Процедури управління пам'яттю вирішують наступні завдання:
· Виділення пам'яті для процесу користувача при його запуску та звільнення цієї пам'яті при завершенні процесу;
· Забезпечення настройки запускається програми на виділені адреси пам'яті;
· Управління виділеними областями пам'яті за запитами програми користувача (наприклад, звільнення частини пам'яті перед запуском породженого процесу).
Зовсім інакше йдуть справи в багатозадачних ОС. Сумарні вимоги до обсягу пам'яті всіх одночасно працюючих в системі програм, як правило, перевищують наявний обсяг основної пам'яті. У цих умовах ОС не має іншого виходу, окрім почергового витіснення процесів або їх частин на диск, щоб використовувати звільнилася пам'ять на потреби інших процесів. Невдала реалізація такого витиснення може майже повністю застопорити роботу ОС, яка більшу частину часу буде займатися записом і читанням з диска.
До основних завдань, які повинна вирішувати підсистема управління пам'яттю багатозадачного ОС, додаються наступні.
· Надання процесам можливостей отримання та звільнення додаткових областей пам'яті в ході роботи;
· Ефективне використання обмеженого обсягу основної пам'яті для задоволення потреб всіх працюючих процесів, у тому числі з використанням дисків як розширення пам'яті;
· Ізоляція пам'яті процесів, що виключає випадкове або навмисне несанкціоноване звернення одного процесу до областей пам'яті, займаним іншим процесом;
· Надання процесам можливості обміну даними через загальні області пам'яті.
5.2. Віртуальні й фізичні адреси
Поняття «адреса пам'яті» може розглядатися з двох точок зору. З одного боку, при написанні будь-якої програми її автор або явно вказує, по яких адресах повинні розміщуватися змінні і команди (так буває при програмуванні на мові асемблера), або привласнення конкретних адрес довіряється системі програмування. Ті адреси пам'яті, які записані в програмі, прийнято називати віртуальними адресами.
З іншого боку, кожній комірці пам'яті комп'ютера відповідає її адресу, який повинен поміщатися на шину адреси при кожному зверненні до осередку. Ці адреси називаються фізичними.
У ЕОМ першого покоління не робилося відмінності між віртуальними і фізичними адресами: в програмі потрібно вказувати фізичні адреси. Це означало, що така програма могла правильно працювати, тільки якщо сама програма і всі її дані при кожному запуску (і на будь-якому комп'ютері) повинні були розміщуватися по одним і тим же фізичним адресами. Такий підхід став вкрай незручним, як тільки було поставлено завдання передати розподіл пам'яті під управління ОС.
В даний час програмування в фізичні адреси може використовуватися лише в дуже спеціальних випадках. Як правило, ні програміст, що пише програму, ні компілятор, що транслює її в машинні коди, не повинні розраховувати на використання конкретних фізичних адрес.
Але тоді виникає питання, коли і яким чином повинен відбуватися перехід від віртуальних адрес до фізичних.
Є два принципово різних відповіді на це питання.
У системах, не розрахованих на використання спеціальних апаратних засобів перетворення адрес, заміна віртуальних адрес на фізичні може бути виконана тільки програмним шляхом. Це має бути зроблено до початку роботи програми, або на етапі компонування програми, або (у більш пізніх системах) при завантаженні програми з файлу в пам'ять.
У сучасних системах, призначених для роботи на процесорах з сегментною або сторінкової організацією пам'яті (див. про це нижче), програма навіть після завантаження в пам'ять містить віртуальні адреси. Перетворення у фізичні адреси виконується при вибірці кожної команди з пам'яті, при зверненні до осередків даних - тобто при кожному використанні адреси. Звичайно, це можливо тільки в тому випадку, якщо є спеціальна апаратура, яка дозволяє перетворювати адреси практично без втрати часу.
5.3. Розподіл пам'яті без використання віртуальних адрес