
- •Операційні системи Конспект лекцій
- •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.6.2. Групи процесів
При вході користувача в систему для нього створюється процес-оболонка, що є предком всіх інших процесів цього користувача. Цей процес стає лідером групи породжених їм процесів. В якості ідентифікатора групи приймається ідентифікатор (pid) її лідера. Той термінал, з якого користувач увійшов в систему, стає керуючим терміналом групи. Це може бути як локальний термінал комп'ютера, на якому працює система, так і віддалений термінал, з якого був виконаний вхід в систему по мережі.
Будь-який процес може покинути свою групу і оголосити себе лідером нової групи, до якої будуть відноситися його нащадки. Одна з груп є поточною (foreground), інші групи - фоновими (background). Процеси поточної групи можуть отримувати введення з керуючого терміналу.
Поняття групи процесів відіграє важливу роль в ряді ситуацій при роботі системи. Наприклад, якщо користувач натискає Ctrl + C, то всім процесам поточної групи посилається сигнал про необхідність завершення. При розриві з'єднання з терміналом подібний сигнал посилається всім процесам, для яких цей термінал був керуючим.
Процес може, створивши власну групу, потім «відкріпити» від керуючого терміналу. Такий процес, званий в UNIX «демоном», втрачає можливість вести діалог з користувачем, але зате він не буде завершуватися, коли користувач закінчить сеанс роботи з системою. Демони в UNIX виконують звичайно загальносистемні завдання, такі, як управління печаткою, отримання та відправка пошти, автоматичний запуск процесів в наперед задані моменти часу і т.п.
4.6.3. Програмні канали
Одним з «фірмових» винаходів UNIX, згодом запозичених іншими ОС, є поняття програмного каналу або «трубопроводу» (pipe), що дозволяє виконувати обмін даними між процесами за допомогою тих же системних викликів, які використовуються для читання / запису даних при роботі з файлами і з периферійними пристроями.
Програмні канали можуть бути безіменними або іменованими. Для створення безіменного каналу процес повинен використовувати системний виклик pipe, яка повертає масив з двох елементів, що
містять хендл для читання з каналу і хендл для запису в канал. Після цього для роботи з каналом можна використовувати звичайні функції читання з файлу і запису у файл, вказуючи відповідні хендл каналу. Як правило, процес, який створив канал, потім породжує двох нащадків, з яких один буде виконувати запис в канал, а інший - читання (нагадаємо, що при створенні процесу він отримує копії всіх хендл, відкритих батьком). Не виключена також можливість використання каналу декількома процесами, кожен з яких може, в принципі, як записувати, так і читати дані.
Дані, записувані в канал, буферизуются системою в пам'яті і потім можуть бути прочитані функціями читання з каналу. Якщо в каналі немає даних, то функція читання блокує викликав її процес, поки інший процес не запише дані в канал.
Якщо всі процеси закрили хендл записи в канал (тобто, немає шансів, що в канал будуть поміщені ще які-небудь дані), то процес-читач, вибравши всі дані, які ще залишалися в каналі, прочитає потім ознака кінця файлу.
Гірше, якщо закриті всі хендл читання, а який-небудь процес намагається виконати запис даних, які нікому буде прочитати. У цьому випадку система посилає процесу сигнал про помилку роботи з каналом.
Використання безіменних каналів має одне обмеження: всі процеси, що працюють з каналом, повинні бути нащадками процесу, який створив канал. Для передачі даних між неспорідненими процесами можна використовувати іменовані канали, звані також каналами FIFO. Такий канал створюється системним викликом mknod, при цьому вказується шлях і ім'я каналу, як при створенні файлу. Імена каналів зберігаються в каталогах файлової системи UNIX нарівні з іменами звичайних і спеціальних файлів. Щоб відкрити канал для читання або для запису, використовується звичайний системний виклик open із зазначенням необхідного режиму доступу, як при відкритті файлу.