
- •Операційні системи Конспект лекцій
- •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
- •Література
2.5. Способи організації введення / виводу
2.5.1. Введення / висновок з опитування і по перериваннях
Розглянемо більш докладно роботу програми, безпосередньо виконує введення або виведення даних на конкретний пристрій. (Насправді, цією роботою зазвичай займається драйвер пристрою, так що ми фактично розглядаємо логіку роботи драйвера.)
Для визначеності покладемо, що програма повинна видати N байт даних з масиву A на символьне пристрій X. Для операції введення можуть використовуватися ті ж підходи, які будуть розглянуті тут для операції виводу.
Нехай архітектура пристрою представлена регістром даних X.DATA і прапором готовності X.READY. Коли X.READY = TRUE, в регістр X.DATA можна видавати черговий байт даних. Запишемо на псевдокоді, близькою до мови Паскаль, варіанти організації відповідної програми.
а) Введення / висновок без перевірки готовності
i: = 1;
while i <= N do begin
X.DATA: = A [i];
i: = i + 1;
end;
Цей «нахабний» спосіб виведення цілком працездатний, якщо використовується «завжди готовий» пристрій (наприклад, монітор), тобто прапор X.READY завжди правдивий і тому взагалі не потрібен. При спробі використовувати той же підхід для виводу на принтер ми переконалися б, що надруковані будуть лише деякі символи, яким пощастило бути виданими в рідкісні моменти готовності принтера.
б) Введення / висновок з опитування готовності
while not X.READY do
;
Тут доданий цикл очікування, в якому не робиться нічого, крім постійної циклічної перевірки готовності пристрою. Передача даних відбувається тільки тоді, коли пристрій готовий. Оскільки після видачі одного байта пристрій цілком може знову перейти в стан неготовності, слід знову виконувати цикл очікування, поки виданий символ не буде оброблено пристроєм.
Така організація вводу / виводу дозволяє коректно працювати з будь-якими пристроями. Цей спосіб дійсно застосовується в деяких однозадачних системах. Недоліком даного способу є непродуктивна витрата часу на постійне «довбання» прапора готовності. При сучасному співвідношенні швидкостей роботи процесора і периферії, цикл очікування може повторюватися мільйони разів перед видачею кожного байта. Більш того, якщо з якихось причин пристрій взагалі не перейде в стан готовності, то робота всієї системи може бути паралізована нескінченним циклом очікування.
в) Введення / висновок по перериваннях
i: = 1;
while i <= N do begin
X_INT: if not X.READY
return;
X.DATA: = A [i];
i: = i + 1;
Тут зник цикл очікування, замість нього - одноразова перевірка готовності і оператор повернення, якщо не готове.
Куди, власне, відбувається повернення? Щоб це зрозуміти, треба згадати, що даний фрагмент - явно не єдина програма, що працює в даний момент на ЕОМ. Очевидно, операція виведення була розпочата операційною системою за запитом якоїсь програми. Даний фрагмент був викликаний як підпрограма ОС, і повернення означає передачу управління ОС. Як система розпорядиться отриманими часом? Це вже зовсім інше питання, не пов'язаний з введенням / висновком. Наприклад, ОС може переключитися на інший процес. Або, від нічого робити, запустити екранну заставку або програму самотестування.
Але як же бути з кинутої на півдорозі операцією виведення? Для її відновлення буде використано апаратне переривання, яке повинно видати пристрій X при переході в стан готовності. Системний обробник переривання повинен буде передати управління за адресою, позначеному міткою X_INT. Після незайвою додаткової перевірки готовності програма виведення передасть черговий байт на пристрій, потім знову перевірить готовність і, можливо, знову поверне управління системою. Таким чином, виконання введення / виводу розбивається на окремі інтервали роботи при готовності пристрою, що перемежовуються роботою системи, поки пристрій не готовий.
Для пристроїв, що використовують контролер ПДП, можливі варіанти організації роботи залишаються, по суті, тими ж, але тільки використовуються набагато більші операції: замість введення або виведення одного елемента даних виконується ввід / вивід цілого блоку даних, і тільки після цього контролер переходить в стан готовності та генерує переривання.