
- •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.6.7. Випереджаюче читання.
У тому випадку, якщо обробка даних ведеться послідовним чином (від початку файлу до кінця), кешування не дає значного ефекту. Після того, як оброблено дані з одного блоку, подальше перебування цього блоку в кеш-буфері марно. Значно більш корисною в цьому випадку може виявитися інша спеціальна форма буферизації, відома як випереджаюче читання. Вона полягає в тому, що при зверненні до деякого блоку диска система, виконавши читання необхідного блоку, зчитує потім ще кілька наступних за ним блоків. Якщо апаратура дозволяє виконувати операцію читання одночасно з обробкою раніше прочитаних даних, то велика ймовірність, що до моменту, коли наступний блок даних буде запитаний для обробки, цей блок вже виявиться прочитаним.
Як правило, системі невідомо, чи буде обробка файлу вестися в режимі послідовного або довільного доступу, тому часто використовується та чи інша комбінація кешування з випереджаючим читанням. У Windows програма, що відкриває файл, може вказати системі, для якого способу доступу бажано оптимізувати механізм буферизації.
Ідея випереджального читання отримала цікавий розвиток в Windows XP. У цій системі запроваджено механізм випереджаючої завантаження даних (prefetch), який заснований на автоматичному зборі та зберіганні статистики про те, які файли і каталоги використовуються в ході завантаження ОС і при запуску конкретних програм, а також які дані читаються з цих файлів в перші хвилини роботи . При наступних завантаженнях ОС і запусках додатків система виконує очікувані операції читання ще до того, як вони будуть в дійсності запитані завантажуваними компонентами ОС або додатком. При цьому система планує порядок операцій таким чином, щоб скоротити переміщення читаючих головок і тим самим прискорити завантаження даних.
2.7. Драйвери пристроїв
Драйвер пристрою - це системна програма, яка під управлінням ОС виконує всі операції з конкретним периферійним пристроєм. Драйвер є ніби посередником між ОС і пристроєм. Перед драйверами стоять дві однаково важливі, але важко сумісні завдання:
· Забезпечити можливість стандартного звернення до будь-якого пристрою, приховуючи від інших частин ОС специфічні особливості окремих пристроїв;
· Досягти максимально ефективного використання всіх функціональних можливостей і особливостей конкретних пристроїв.
Можливість стандартними засобами працювати з різними пристроями дуже бажана з точки зору архітектури ОС і зручності програмування. Було б вкрай огидно, якби при написанні прикладної програми потрібно було заздалегідь враховувати, яка модель принтера буде використовуватись для видачі результатів. Навпаки, в більшості випадків прикладний програміст навіть не повинен знати, чи буде це принтер або плоттер-Графобудівник, або ж результати будуть відображатися на екрані. Великі проблеми могли б виникнути і при заміні однієї моделі принтера, диска, монітора на іншу, якщо б така заміна зажадала переписувати заново всі програми, що працюють з цим пристроєм. Інша справа, якщо всі особливості пристрою враховуються в одному-єдиному місці, а саме - в драйвері цього пристрою.
Зрозуміло, повністю приховати всі відмінності між пристроями неможливо. Ніяким чином не можна прирівняти, скажімо, диск до клавіатури, і навіть різні типи дисків схожі, але не зовсім. Наприклад, для дискет можна виконати таку операцію, як перевірка зміни носія (фактично при цьому перевіряється, відкривався чи кишеню дисковода). Для жорстких дисків ця операція не має сенсу.
У більшості ОС розрізняються, як мінімум, два різних типи драйверів: для символьних і для блокових пристроїв.
Звертаючись до драйвера, ОС вказує функцію, яку потрібно виконати.
Список цих функцій загальний для драйверів різних пристроїв, при цьому кожен драйвер може реалізувати тільки ті функції, які мають сенс для цього пристрою. Найбільш загальними є функції читання даних, запису даних, ініціалізації пристрою (ця функція викликається системою один раз, відразу після завантаження), відкриття і закриття пристрої (використовуються, коли символьне пристрій відкривається як файл). Для блокових пристроїв мають сенс функції форматування, пошуку сектору. Для символьних пристроїв введення - функція «неруйнівного введення», тобто перевірки чергового символу без його вилучення із вхідного потоку.
Для того, щоб врахувати все розмаїття можливих операцій, в число функцій драйвера вводять таку, як «виконання спеціальних функцій», і тут вже для кожного пристрою визначений свій набір цих спеціальних функцій.
Типовий драйвер пристрою містить, як мінімум, три основні блоки:
· Заголовок драйвера;
· Блок стратегії;
· Блок переривань.
Заголовок містить різноманітну інформацію про даному драйвері і про керованому пристрої. Сюди може включатися ім'я пристрою, тип пристрою, число однотипних пристроїв, що обслуговуються одним драйвером, обсяг пам'яті на пристрої і т.п. Заголовок містить також адреси блоку стратегії і блоку переривань.
В обов'язок блоку стратегії входить прийом заявок на виконання операції, ведення черги заявок (в багатозадачних системах, а також при асинхронних операціях, виконання можуть чекати кілька заявок), а також запуск операції та її завершення.
Заявка на виконання операції являє собою стандартну запис, формовану системою перед зверненням до драйвера. Заявка містить код потрібної функції драйвера і відомості про адресу даних в пам'яті і на пристрої, про кількість переданих даних. Заявка також містить поле, в яке драйвер повинен буде записати код завершення операції (зазвичай 0 - нормально виконана операція, інші значення - коди помилок).
Блок переривань виконує приблизно той алгоритм, який в п. 2.5.1 називався введенням / висновком по перериваннях. Система викликає цей блок, коли отримує сигнал переривання від пристрою, що обслуговується драйвером. Закінчивши виконання заявки, блок переривань повертає керування блоку стратегії для завершення операції.
Крім трьох основних блоків, в різних ОС драйвери можуть містити, наприклад, блок ініціалізації (він використовується один раз при завантаженні ОС, а потім може бути вивантажений з пам'яті), блок зміни параметрів драйвера та ін
В останні роки зростаюче ускладнення периферійних пристроїв і самих ОС зробило популярною багаторівневу схему використання драйверів. За цією схемою, крім описаних вище низькорівневих драйверів апаратури, допускається ще створення високорівневих драйверів, що лежать між драйверами апаратури та іншою частиною ОС. Високорівнева драйвер не містить блоку переривань, він приймає заявки від системи, перетворює дані тим чи іншим чином, а потім викликає низькорівневий драйвер для роботи з пристроєм. Наприклад, високорівнева графічний драйвер може перетворювати команди малювання фігур, заливок, тексту в набір команд конкретної моделі принтера, а пов'язаний з ним драйвер паралельного порту відповідає за передачу цих команд принтеру. Для диска можна реалізувати у вигляді окремого драйвера алгоритм шифрування даних, які потім передаються звичайному драйверу диска.