- •Операційні системи Конспект лекцій
- •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
- •Література
4.2.2. Квазіпараллельний виконання процесів
З точки зору зовнішнього спостерігача, в хорошій багатозадачного ОС відбувається одночасна, паралельна робота декількох процесів. Однак зрозуміло, що ця одночасність удавана. Насправді, якщо в системі працює лише один процесор, то в кожен момент часу він виконує команди, що відносяться тільки до одного з наявних процесів. Ілюзія паралельності створюється за рахунок того, що процеси змінюють один одного через малі інтервали часу, які людина-спостерігач не в силах відстежити. Подібна організація роботи називається квазіпараллельний виконанням процесів.
Зрозуміло, якщо в системі є декілька процесорів, то може бути організовано справжнє паралельне виконання процесів, кількість яких не перевищує кількості процесорів. При більшому числі процесів може використовуватися змішана організація, що поєднує дійсну паралельність і квазіпараллельний.
Важливо відзначити, що для більшості завдань взаємодії процесів немає різниці, якого роду паралельність використовується в даній ОС. Взагалі, основні проблеми управління процесами можна розбити на два рівні:
· Проблеми коректної та ефективної реалізації паралельного (тобто зазвичай квазіпараллельний) виконання процесів - це проблеми нижнього рівня;
· Проблеми коректної взаємодії паралельних процесів - це проблеми верхнього рівня, при розгляді яких вважається, що низькорівневі проблеми реалізації процесів так чи інакше вирішені.
Таке розбиття полегшує проектування і налагодження систем, а також дозволяє краще зрозуміти істота розглянутих проблем.
4.2.3. Стану процесу
Будь-який процес у багатозадачного ОС багаторазово відчуває перехід з одного стану в інший.
Основних станів всього три.
· Робота (running) - в цьому стані знаходиться процес, програму якого в даний момент виконує процесор. Працюючий процес іноді зручно називати також поточним процесом.
· Готовність (ready) - стан, їх якого процес може бути переведений в стан роботи, як тільки це визнає потрібним зробити ОС.
· Блокування або, що те ж саме, сон (sleeping, waiting) - стан, в якому процес не може продовжувати виконання, поки не відбудеться деяке зовнішнє по відношенню до процесу подія.
Перші два стани часто об'єднують поняттям активного стану процесу.
Для станів готовності і сну спільне те, що процес не працює. У чому різниця між цими двома «способами не працювати»?
Готовий до виконання процес не виконується тільки тому, що є інші не менш готові процеси, на думку системи більш гідні займати зараз процесорний час. У кожен момент часу вибір одного з готових процесів на роль працюючого визначається логікою роботи ОС. Цей вибір повинен забезпечувати ефективну квазіпараллельний роботу готових процесів. Як вирішується це завдання - буде розглянуто нижче.
На відміну від цього, сплячий процес - це завжди процес, що очікує деякого конкретного події. Сплячий процес не зможе заробити, навіть якщо процесор раптом виявиться вільним. Такий процес, у відповідності зі своєю власною логікою, чекає чогось, що має статися.
Чого він може чекати? Ну, наприклад:
· Завершення розпочатої операції синхронного вводу / виводу (тобто, наприклад, процес чекає натискання клавіші Enter або закінчення запису на диск);
· Звільнення запитаного у системи ресурсу (наприклад, додаткової області пам'яті або відкритого файлу);
· Закінчення заданого інтервалу часу («посплю-но я хвилин десять!») Або досягнення заданого моменту часу («розбудіть мене рівно опівночі!») (В обох випадках процес чекає сигналу від запрограмованого таймера);
· Сигналу на продовження дій від іншого, взаємопов'язаного процесу;
· Повідомлення від системи про необхідність виконати певні дії (наприклад, перемалювати вміст вікна).
У будь-якому з названих (і багатьох неназваних) випадків має статися деяке подія, джерело якого лежить поза даного процесу.
Чисто умовно можна сказати, що якщо б в обчислювальну систему раптом було додано ще кілька процесорів, то «готові» процеси могли б відразу перейти в стан «робота», але «сплячі» продовжили б свій сон.
Зрозуміло, як ми бачили в п. 2.5, процес може виконувати очікування шляхом циклічної перевірки очікуваного умови. При цьому він формально залишатиметься активним, розтрачуючи дорогоцінний процесорний час на те, що в п. 2.5.2 було названо активним очікуванням. Однак таке рішення буде говорити лише про кричущу некваліфікованості програміста. Будь багатозадачна ОС надає в розпорядження прикладних програм набір функцій, що переводять викликав їх процес в стан сну, в якому процес не намагається використовувати процесорний час (іншими словами, стан сну є стан пасивного очікування). Такі системні функції називаються блокуючими. До їх числа відносяться функції синхронного вводу / виводу, запиту ресурсів, призупинення до заданого часу, отримання повідомлень і багато інших.
Оскільки ОС бере на себе блокування, «усипляння» процесу, вона повинна забезпечити і його розблокування, «пробудження». Щоб це стало можливим, система повинна для кожного сплячого
процесу пам'ятати, «чого він чекає», тобто пам'ятати умови пробудження процесу. Система відслідковує всі події, здатні розблокувати небудь процес (у багатьох випадках використовуючи для цього апаратні переривання) і, коли для одного або відразу декількох процесів настає очікувана подія, переводить ці події зі стану сну в стан готовності.
На рис. 4-1 показані основні стани процесу і переходи між ними. Цей малюнок кочує з книги в книгу, оскільки він дійсно наочно відображає саму суть роботи багатозадачних систем.
Рис. 1‑16
Розглянемо можливі переходи між станами процесу, показані на малюнку стрілками.
Перехід Робота à Сон являє собою блокування процесу, яка може відбутися при виклику блокуючої системної функції.
Перехід Сон à Готовність - це пробудження процесу, воно виконується системою при виникненні відповідної умови.
Перехід Робота à Готовність раніше не розглядалося. Він називається витісненням процесу і виконується системою, коли вона приймає рішення про зміну поточного процесу.
Для зворотного переходу Готовність à Робота немає загальноприйнятого терміну. Будемо називати його вибором процесу для виконання. Відзначимо, що цей перехід майже завжди пов'язаний або з блокуванням, або з витісненням колишнього поточного процесу.
Відповісти самі на питання: чому «майже завжди», а не «завжди»? Які ще можливі варіанти?
Двох стрілок немає на діаграмі. Прямий перехід від сну до роботи нелогічний, тому що він поєднував би два абсолютно різних дії.
Яких саме?
Перехід від готовності до сну неможливий в принципі.
До речі, чому?
Крім трьох основних станів, в різних ОС можуть використовуватися й інші стани.
Стан старту означає, що процес знаходиться на етапі створення і поки не готовий вступити в роботу.
Стан завершення (в UNIX воно майже офіційно називається «зомбі») означає, що процес завершив свою роботу, але поки присутній в системі у вигляді запису про результати і причини завершення.
Стан призупинення (suspended) означає, що виконання процесу тимчасово перервано оператором (або, може бути, іншим процесом) і пізніше має бути їм же відновлено.
У деяких системах (наприклад, в UNIX) основні стани роздроблені на ряд більш дрібних: робота в системному і в режимі користувача, готовність у пам'яті і готовність на диску і т.п. Необхідний набір станів визначається алгоритмами роботи конкретної ОС.
