
- •Операційні системи Конспект лекцій
- •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.9. Управління пам'яттю в unix
Дати загальну характеристику управління пам'яттю в UNIX скрутно, оскільки ця частина системи зазнала найбільших змін за довгий період існування UNIX, пройшовши шлях від управління динамічними розділами фізичної пам'яті до сучасної схеми заміщення сторінок по вимозі, подібної до тієї, яка використовується в Windows.
Кожен процес в UNIX має власне віртуальне адресний простір, розділяється на області програми, даних і стека. В залежності від архітектури пам'яті комп'ютера, область пам'яті UNIX може бути реалізована як один або кілька сегментів пам'яті, як набір віртуальних сторінок або просто як область у фізичній пам'яті. Адреси та розміри областей зберігаються як частина контексту процесу.
Область програми, як правило, доступна тільки для читання і має фіксований розмір. Область даних доступна для читання і запису, її розмір може змінюватися в ході роботи за допомогою системного виклику brk. Область стека автоматично збільшується системою в міру заповнення стека. При запуску декількох процесів, що виконують одну й ту ж програму, вони поділяють спільну область програми, але кожний з процесів отримує власні області даних і стека.
Коли процес виконує системний виклик exec (тобто починає виконувати іншу програму), всі його області пам'яті звільняються і потім виділяються заново.
Ядро системи має власні області пам'яті. При виконанні системних викликів ядро працює в контексті викликав процесу, тобто воно має доступ як до власної пам'яті, так і до областей пам'яті процесу.
Ефективне використання обмеженого обсягу фізичної пам'яті забезпечується роботою системних процесів-«демонів», керуючих переміщенням інформації між пам'яттю і файлом підкачки. У ранніх реалізаціях UNIX, що не використовували механізм віртуальних сторінок, була можлива тільки підкачка і витіснення цілих процесів. Демон підкачки (системний процес з ідентифікатором 0) періодично відстежував стан процесів і приймав рішення про витіснення окремих процесів на диск і підкачування в звільнилася пам'ять одного з раніше витіснених процесів. При цьому до уваги приймалася тривалість перебування процесу в пам'яті або на диску, поточний стан процесу (сплячі процеси - більш підходящі кандидати на витіснення, ніж готові) і його розмір (часто тягати туди-сюди великі процеси невигідно).
В сучасних реалізаціях, заснованих на сторінкової організації пам'яті, значну роль відіграє поняття списку вільних сторінок, які можуть бути негайно виділені, якщо який-небудь процес звернеться до віртуальної сторінці, відсутньої в пам'яті. У цей список заносяться сторінки, до яких довго не було звернення з боку процесів. Оскільки у відношенні сторінок пам'яті важко реалізувати алгоритм LRU, зазвичай використовується більш простий алгоритм «другого шансу» (його інша назва - «алгоритм годин»). Ідея полягає в наступному. Для кожної фізичної сторінки в таблиці сторінок зберігаються біт використання і біт модифікації. Ці біти встановлюються апаратно: біт використання - при кожному зверненні до сторінки, а біт модифікації - при запису на сторінку.
Системний процес, званий демоном заміщення сторінок, активізується періодично (по таймеру) і стежить, чи не занадто малий розмір списку вільних сторінок. Зазвичай поріг встановлюється рівним ¼ загального обсягу фізичної пам'яті. Якщо число вільних сторінок нижче цього порога, демон починає циклічно перевіряти всі фізичні сторінки. Якщо у сторінки встановлений біт використання, то цей біт скидається. Якщо ж біт вже був скинутий, то сторінка включається в список вільних. Таким чином, сторінка потрапляє в список вільних, якщо після останнього звернення до неї сторінковий демон встиг двічі її опитати. Якщо у сторінки встановлений біт модифікації (в іншій термінології, якщо сторінка «брудна»), то перед її зарахуванням в список вільних система зберігає дані в сторінковому файлі. Зарахування в список вільних сторінок не означає негайної втрати даних, і якщо процес встигне звернутися до сторінки до того, як вона буде віддана іншому процесу, ця сторінка буде виключена з числа вільних.
Демон підкачки процесів теж не дрімає. Якщо сторінковий демон надто часто виконує запис сторінок на диск, а число вільних сторінок тим не менше залишається низьким, то демон підкачки вибирає один з процесів і відправляє його цілком на диск, щоб зменшити конкуренцію за пам'ять.
Тут описано (дуже приблизно) лише один з варіантів управління пам'яттю, реалізованих в різних версіях UNIX і в Linux. Оскільки алгоритми управління фізичної пам'яттю є «внутрішньою справою» системи і не регламентуються ніякими стандартами, відповідні алгоритми, використовувані в різних версіях системи, можуть значно відрізнятися.