
- •2 Структура пз
- •3 Операційні системи
- •3.1 Загальні зведення
- •3.2 Основні складові функції сучасних ос
- •3.2.1 Системи планування
- •3.2.2 Синхронізація та обмін даними між процесами
- •3.2.3 Системи керування пам’яттю
- •3.2.4 Система керування файлами
- •3.2.5 Системи керування вводом-виводом
- •3.2.6 Переривання
- •3.3 Деякі сучасні ос
- •3.3.1 Ос сімейства dos
- •3.3.2 Ос сімейства os/2
- •3.3.3 Ос сімейства Windows
- •3.3.4 Ос сімейства Unix
- •3.3.5 Мережна ос реального часу qnx
- •4 Сервісні системи
- •4.1 Інтерфейсні системи
- •4.2 Оболонки ос
- •2.2.3 Утиліти
- •5 Інструментальні системи
- •5.1 Системи програмування
- •5.2 Системи управління базами даних
- •5.3 Інструментарій штучного інтелекту
- •5.4 Редактори
- •5.5 Інтегровані системи
- •5.6 Сучасні системи програмування
- •5.7 Прикладне по
- •6 Особливості проектування спо
- •6.1 Асемблери
- •6.1.1 Машинно-залежні характеристики асемблера
- •6.1.2 Машинно-незалежні характеристики асемблера
- •6.1.3 Варіанти побудови асемблерів
- •6.2 Завантажники й програми зв'язування
- •6.2.1 Машинно-залежні властивості завантажника
- •6.2.2 Машинно-незалежні властивості завантажників
- •6.2.3 Побудова завантажників.
- •6.3 Макропроцесори
- •6.3.1 Машинно-незалежні особливості.
- •6.3.2 Варіанти побудови макропроцесорів.
- •6.4 Компілятори
- •6.4.1 Граматика.
- •6.4.2 Лексичний аналіз.
- •6.4.3 Синтаксичний аналіз.
- •6.4.4 Генерація коду.
- •6.4.5 Машинно-залежні особливості компіляторів.
- •6.4.6 Машинно-незалежні особливості компіляторів.
- •6.4.7 Варіанти побудови компіляторів.
- •6.4.8 Інтерпретатори.
- •6.4.9 Компілятори на p-код.
- •6.4.10 Компілятори компіляторів.
- •6.5 Основи побудови операційних систем
- •6.5.1 Принципи побудови ос
- •6.5.2 Основні структурні рішення
- •6.5.3 Принципи побудови інтерфейсів ос
- •Література
3.2 Основні складові функції сучасних ос
3.2.1 Системи планування
Більшість сучасних ОС є бгатозадачними. У багатозадачних системах в оперативній пам’яті одночасно знаходяться декілька процесів. У роботі кожного процесу періоди використання процесора чергуються з очікуванням завершення виконання операцій уводу-виводу або деяких зовнішніх подій. При розподілі ресурсів ОС підтримує декілька черг, кожна з яких є списком процесів, очікуючих своєї черги на використання будь якого ресурсу. При цьому розрізняють довгострокове, середньострокове, короткострокове планування та планування вводу-виводу.
Довгострокове планування вирішує, які програми допускаються до виконання системою, після чого вони добавляються в чергу середньострокового та короткострокового планування. Планувальник вирішує, по-перше, чи зможе операційна система працювати з додатковими процесами, а, по-друге, які завдання необхідно добавити.
Середньострокове планування приймає рішення про завантаження процесів в оперативну пам’ять. Це рішення приймається у залежності від ступеня багатозадачності, присутністю віртуальної пам’яті, вимогами до пам’яті процесів.
Короткострокове планування визначає те, який процес буде виконуватися наступним. Короткостроковий планувальник, або диспетчер, працює при виникненні подій, які можуть призупиняти поточний процес, або давати можливість припинити виконання даного процесу на користь іншого.
3.2.2 Синхронізація та обмін даними між процесами
При використанні паралельно працюючих задач виникає проблема синхронізації їх виконання. Засобами синхронізації задач є критичні секції, семафори, монітори Хоара, поштові скриньки.
Фрагмент коду усередині задачі , що повинний виконуватися в монопольному режимі стосовно всіх інших задач, називається критичною секцією. Він обмежений зверху й знизу викликом відповідних функцій, що не мають параметрів. Критичні секції призначені для тимчасового скасування мультизадачності в рамках одного процесу. Вони використовуються для організації доступу до таких ресурсів, які можна використовувати тільки послідовно.
Семафори призначені для організації правильної послідовності виконання задач. Неконтрольований доступ паралельно працюючих задач до тих чи інших ресурсів може привести до аварійного завершення роботи програми, а те і до виходу з ладу всієї операційної системи. По запиті задачі операційна система може створити один чи кілька семафорів, придатних для синхронізації задач, що виконуються в рамках одного чи різних процесів. При створенні семафора йому привласнюється ідентифікатор, що використовується у всіх наступних операціях, виконуваних над семафором.
Семафор являє собою як об'єкт, здатний знаходитися у двох станах: встановленому і скинутому. За допомогою спеціальних функцій задача може переключати семафори з одного стану в інше, а також виконувати чекання моменту, коли семафор буде переключений іншою задачею.
За допомогою семафорів удається організувати синхронізацію декількох задач. Задача може створити семафори різних типів, за допомогою яких можна організувати чекання одного чи декількох подій, а також організувати послідовне використання ресурсів, до яких неможливий одночасний доступ із боку декількох задач.
Монітори це пасивні набори розподілених змінних та процедур доступу до них, якими процеси можуть користуватися в режимі розподілу, причому в кожний момент часу ними можуть користуватися тільки один процес. Використовування моніторів звільняє процеси від явного розподілу між ними інформації. Цю проблему вирішує монітор.
Для збереження надісланої інформації, яка ще не була отримана іншим процесом, використовується поштова скринька. Її використання дозволяє вести обмін інформацією між процесами, яки не можуть виконуватися одночасно.
При запуску програми операційна система створює новий процес, що має ізольований адресний простір. Ізоляція підвищує надійність системи, тому що ні в результаті помилки, ні навмисно одні процес не зможе адресувати пам'ять іншого процесу.
Однак цілком ізольовані процеси не зможуть обмінюватися даними через оперативну пам'ять, що дуже незручно. Звичайно, один процес може підготувати дані для іншого процесу у виді файлу на диску, але цей спосіб передачі даних хоча і працює, але занадто повільно.
Створення спільно використовуваних областей пам'яті можна використовувати для організації передачі даних між процесами. Область пам’яті, яка використовується для цього, зветься розподіленою пам’яттю. Такий спосіб вимагає використання засобів синхронізації задач і непридатний для передачі даних між процесами, запущеними на різних робочих станціях локальної мережі.
Спеціальним засобом передачі даних між різними процесами є канали. Канал - це спеціальна область пам'яті, створена операційною системою для передачі даних між процесами. Канал може мати ім'я, а може і не мати. Робота з каналом нагадує роботу зі стандартним потоком уводу-виводу в операційній системі DOS. Процес створює канал, викликаючи спеціально призначену для цього функцію, що повертає ідентифікатор каналу. Потім процес може передавати дані в чи канал приймати їх із каналу, викликаючи функції, що нагадують функції запису й читання для стандартних потоків уведення/висновку DOS. У процедурі передачі даних через канал повинні брати участь два процеси. Сучасні ОС дозволяють створити канали між процесами, запущеними на різних робочих станціях.
Крім каналів існує більш складний засіб передачі даних між процесами - черги. Черги дозволяють організувати передачу даних від декількох "передаючих" процесів до одного "приймаючого". Вони також часто використовуються для передачі даних між різними задачами усередині одного процесу. Формат елементів передачі визначається чи процесом задачею, що створили черга.
Схема роботи черги відрізняється від схеми роботи каналу.
Процес чи задача, що створили чергу, називаються серверним процесом для черги. Серверний процес є власником черги і може витягати чи читати (без витягу) із неї інформацію в будь-якому порядку. Канал же можна використовувати тільки для послідовної передачі даних.