
- •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.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.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.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.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
- •Література
2.5.2. Активне і пасивне очікування
Поговоримо докладніше про один важливий розходженні між способами введення / виводу за опитуванням готовності і по перериваннях.
Основною особливістю введення / виводу за опитуванням готовності є цикл очікування. Якщо виконується введення або виведення на повільне пристрій (наприклад, матричний принтер), то цей скромно виглядає цикл буде займати, м'яко кажучи, 99% всього часу роботи процесора. Якщо відбувається очікування введення з клавіатури, то процесор взагалі не буде робити нічого корисного, поки користувач не спроможеться натиснути клавішу.
Таке абсурдне використання процесора може бути виправдане хіба що в тому випадку, якщо для нього немає ніякої більш корисної роботи. Це можливо у випадку однозадачной ОС, коли працююча прикладна програма не може просуватися далі, поки не завершена операція введення / виводу. У цьому випадку введення / висновок з опитування не позбавлений певних достоїнств: він не пов'язаний з обробкою переривань, яка вимагає деякого часу, а тому уповільнює реакцію на перехід пристрою в стан готовності.
Спосіб очікування програмою деякої події, заснований на постійній циклічної перевірці очікуваного умови, називається активним очікуванням (busy waiting). Це поняття застосовується не тільки по відношенню до вводу / виводу, але і в багатьох інших ситуаціях, що виникають при роботі системних і прикладних програм.
Якщо розглядається багатозадачна ОС, в якій може бути кілька активних завдань одночасно, то активне очікування стає абсолютно неприйнятним. У цьому випадку витрата процесорного часу на виконання циклічного опитування завдає прямої шкоди іншим програмам, які могли б використовувати цей час більш осмислено. Тому при розробці багатозадачних систем, як при вводі / виводі, так і в деяких інших ситуаціях, обов'язково реалізується пасивне очікування, тобто така реалізація очікування, при якій чекаюча програма не затрачає процесорного часу. Для реалізації пасивного очікування завжди в тій чи іншій формі використовуються апаратні переривання. Приватним прикладом пасивного очікування є розглянутий вище ввід / вивід по перериваннях.
2.5.3. Синхронний і асинхронний ввід / вивід
Програміст, який розробляє прикладні програми, не повинен думати про такі речі, як спосіб роботи системних програм з регістрами пристроїв. Система приховує від додатків деталі низькорівневої роботи з пристроями. Однак відмінність між організацією вводу / виводу за опитуванням і по перериваннях знаходить певне відображення і на рівні системних функцій, у вигляді функцій для синхронного та асинхронного введення / виводу.
Виконання функції синхронного вводу / виводу включає в себе запуск операції введення / виводу і очікування завершення цієї операції. Тільки після завершення введення / виводу функція повертає керування отримала програмі.
Синхронний введення / висновок - це найбільш звичний для програмістів спосіб роботи з пристроями. Стандартні процедури вводу / виводу мов програмування працюють саме таким способом.
Виклик функції асинхронного введення / виводу означає тільки запуск відповідної операції. Після цього функція відразу повертає управління отримала програмі, не чекаючи завершення операції.
Розглянемо, наприклад, асинхронний ввід даних. Зрозуміло, що програма не може звертатися до даних, поки немає впевненості, що їх введення завершений. Але цілком можливо, що програма може поки що зайнятися іншою роботою, а не простоювати в очікуванні.
Рано чи пізно програма таки повинна приступити до роботи з введеними даними, але попередньо переконатися, що асинхронна операція вже завершилася. Для цього різні ОС надають кошти, які можна розбити на три групи.
· Очікування завершення операції. Це як би «друга половина синхронної операції». Програма спочатку запустила операцію, потім виконала якісь сторонні дії, а тепер чекає закінчення операції, як при синхронному вводі / виводі.
· Перевірка завершення операції. При цьому програма не очікує, а тільки перевіряє стан асинхронної операції. Якщо ввід / вивід ще не завершений, то програма має можливість ще якийсь час погуляти.
· Призначення процедури завершення. У цьому випадку, запускаючи асинхронну операцію, програма користувача вказує системі адресу користувальницької процедури або функції, яка повинна бути викликана системою після завершення операції. Сама програма може більше не цікавитися ходом введення / виводу, система нагадає їй про це в потрібний момент, викликавши зазначену функцію. Цей спосіб найбільш гнучкий, оскільки в процедурі завершення користувач може передбачити будь-які дії.
У Windows прикладній програмі доступні всі три способи завершення асинхронних операцій. В UNIX асинхронних функцій введення / виводу немає, однак той же ефект асинхронності може бути досягнутий інакше, шляхом запуску додаткового процесу.
Асинхронне виконання введення / виводу дозволяє в деяких випадках підвищити продуктивність роботи і забезпечити додаткові функціональні можливості. Без такої найпростішої форми асинхронного введення, як «введення з клавіатури без очікування», були б неможливі численні комп'ютерні ігри та тренажери. У той же час логіка програми, що використовує асинхронні операції, складніше, ніж при синхронних операціях.
А в чому полягає згаданий вище зв'язок між синхронними / асинхронними операціями й способами організації введення / виводення, розглянутими у попередньому пункті? Відповісти самі на це питання.