
- •Операційні системи Конспект лекцій
- •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.9.1.2. Доступ до пристроїв
У більшості випадків програми не працюють безпосередньо з пристроями. Замість цього для виконання необхідних операцій використовуються API-функції більш високого рівня, а звернення до пристроїв виконуються системою в міру потреби. Наприклад, файлові функції звертаються в кінцевому рахунку до дисковим пристроїв, а функції GDI працюють з монітором або з принтером, залежно від зазначеного контексту пристрою.
У ряді випадків програміст все ж може віддати перевагу безпосередню роботу з пристроєм. Щоб отримати доступ до пристрою, програма повинна відкрити цей пристрій викликом тій же API-функції CreateFile, яка використовується і для відкриття файлів. В даному випадку замість імені файлу слід вказати ім'я драйвера відкривається пристрої. Для дискових пристроїв можна замість імені драйвера вказати ім'я самого пристрою. Наприклад, ім'я «\ \. \ C:» означає логічний диск C, а ім'я «\ \. \ PHYSICALDRIVE0» - перший фізичний диск комп'ютера.
Відкривши пристрій, програма може або читати або записувати дані, використовуючи функції файлового введення / виводу, або видавати команди управління пристроєм за допомогою функції DeviceIoControl. За допомогою цих команд можна, наприклад, відформатувати диск і розбити його на розділи, завантажити або витягти CD-ROM диск, змінити деякі параметри роботи модему і т.п..
2.10. Управління пристроями в unix
2.10.1. Драйвери пристроїв в unix
Драйвери в ОС UNIX досить точно відповідають стандартній схемі драйвера, наведеною в п. 2.7. Тим не менше, зважаючи істотних відмінностей у роботі з символьними і з блоковими пристроями, в UNIX розрізняються два основних типи драйверів: символьні та блочні.
Для символьних пристроїв використовуються тільки символьні драйвери. Для кожного блокового пристрою зазвичай є два різних драйвера: блочний і символьний. Блоковий драйвер дозволяє виконувати операції тільки з цілим числом блоків, як і належить працювати з блоковими пристроями. Символьний драйвер блокового пристрою є більш високорівневої програмою, яка імітує виконання операцій читання і запису довільної кількості байт, насправді використовуючи звернення до блокового драйверу.
Крім драйверів реальних фізичних пристроїв, система може включати драйвери «псевдопристроїв». Прикладом може служити драйвер, що забезпечує обіг програм до вмісту системної пам'яті.
При завантаженні системи формуються дві таблиці, для символьних і для блочних драйверів. Рядки таблиці відповідають конкретним драйверам, а стовпці - функціям, які повинен уміти виконувати драйвер, так що в комірках таблиці містяться адреси, за якими викликаються функції драйвера. Набір функцій для символьних і для блочних драйверів злегка різниться, тому використовуються дві різних таблиці.
До найбільш важливих функцій драйвера ставляться наступні.
· Відкриття пристрою. Як мінімум, при цьому збільшується лічильник поточних звернень до пристрою, що дозволяє ставити звернення в чергу, якщо пристрій зайнятий. Деякі пристрої при відкритті можуть виконувати ще якісь початкові дії.
· Закриття пристрої - операція, протилежна відкриттю.
· Обробка переривання - виконує введення або виведення чергової порції даних, коли пристрій переходить в стан готовності.
· Опитування пристрої - ця функція виконується для тих пристроїв, які не генерують переривань, або якщо при розробці драйвера чому-вирішено не використовувати переривання від пристроїв. Опитування виконується не постійно, а з деякими періодом, по перериванню від таймера.
· Читання даних з пристрою.
· Запис даних на пристрій.
· Виклик стратегії. Це спосіб виконання операцій введення / виводу, характерний для блокових пристроїв. При цьому запит може бути поставлений в чергу. Запит в ряді випадків може бути задоволений шляхом звернення до дискового кешу (див.
п. 2.6.6), без виконання читання або запису на пристрій.
· Виконання спеціальних функцій. Набір цих функцій залежить від конкретного пристрою. Це може бути, наприклад, опитування або установка поточного режиму роботи пристрою, форматування доріжок диска, перемотування стрічки і т.п.