
- •Операційні системи Конспект лекцій
- •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.8.3. Управління символьними пристроями
Роботу MS-DOS з символьними пристроями цікавіше за все розглянути на прикладі клавіатури. Шлях, який проходять при цьому дані, що вводяться, схематично показаний на рис. 2-6.
Рис. 1‑6
Коли користувач натискає клавішу, клавіатура переходить в стан готовності і з цього приводу посилає сигнал апаратного переривання Int 09h. Одночасно в порт, до якого підключена клавіатура, надсилається скан-код натискання клавіші. Цей код являє собою однобайтове число, що означає порядковий номер натиснутої клавіші. Якщо клавіша довго утримується натиснутою, то через деякий час починається «автоповтор» - сигнал переривання і скан-код надсилаються багаторазово. Нарешті, коли клавіша відпускається, генерується ще одне переривання і надсилається скан-код відпускання клавіші, який відрізняється від коду натискання одиничним значенням старшого біта. Цим практично вичерпуються апаратні події, пов'язані з клавіатурою. Все інше робиться програмно.
Насправді, все відбувалося саме так зі старою, 83-клавішною клавіатурою комп'ютерів IBM PC XT. Сучасні клавіатури за одне натискання примудряються надіслати від 1 до 4 скан-кодів поспіль. Причини цього пояснювати довго і не дуже цікаво.
Підпрограма BIOS, обробна апаратне переривання від клавіатури, повинна, по-перше, запам'ятовувати поточний стан клавіатури: натиснуті чи ні «сдвіговиє» клавіші Shift, Ctrl, Alt, включені чи ні режими Caps Lock, Num Lock. По-друге, обробник повинен з урахуванням цього стану визначити, який символ хотів ввести користувач. Одна і та ж клавіша може, наприклад, означати лiтеру 'Z' прописну або рядкову, російську літеру 'Я' прописну або рядкову, а також бути частиною комбінацій Ctrl + Z, Alt + Z. Відповідний символ буде міститися в буфер клавіатури у вигляді двох байт: скан-код натиснутої клавіші і ASCII-код символу. Для деяких клавіш і комбінацій, яким не відповідає ніякої ASCII-код (наприклад, F1, Insert, Ctrl + Home, Alt + буква, à), фірма IBM розробила власний набір «розширених» кодів.
Буфер клавіатури може вмістити до 15 введених символів, а при переповненні починає огидно пищати.
Програмне переривання Int 16h також обробляється BIOS'ом. Його призначення - задовольняти запити програм, що звертаються до клавіатури. Найбільш часто використовуються наступні три функції цього переривання.
· Введення символу з очікуванням. Ця функція повертає значення кодів чергового символу з буфера клавіатури і видаляє цей символ з буфера. Якщо буфер був порожній, функція виконує активну очікування до тих пір, поки при обробці чергового натискання клавіші в буфері не з'явиться введений символ.
· Введення символу без очікування. Він відрізняється тим, що при порожньому буфері не відбувається очікування, а повертається відповідний ознака. Без цієї функції було б неможливо запрограмувати більшу частину ігор.
· Опитування стану клавіатури. Повертає інформацію про поточний стан «зсувних» клавіш.
Прикладні програми можуть викликати або переривання Int 16h, або одну з функцій DOS, призначених для введення символів з консолі. Слід підкреслити, що ці функції працюють не з клавіатурою, а з пристроєм CON (консоллю оператора), через драйвер цього пристрою. Звичайно, практично завжди пристрій CON - це і є клавіатура (плюс ще й екран монітора, який використовується при виведенні символів на консоль). Однак теоретично є можливість написати нестандартний драйвер пристрою CON, який буде брати запроваджувані символи, наприклад, з віддаленого терміналу, через модем. Або в якості консольного пристрою можна використовувати друкарську машинку, як це і робилося раніше, до широкого поширення моніторів.
Набір функцій DOS для введення з консолі досить різноманітний. Однак жодна з цих функцій не використовує особливостей клавіатури як пристрої. Зокрема, функції DOS не знають поняття «стан клавіатури». Зате набір функцій включає введення з «луна-відображенням» введеного символу на пристрої CON (тобто на екрані) або без відображення, з очікуванням або без очікування, введення одного символу або відразу рядки (завершується натисканням Enter), а також введення з попереднім очищенням буфера (щоб давно завалялися там символи не були випадково введені як відповідь на що задається програмою запитання).
Коротко розглянемо роботу з іншими символьними пристроями.
Монітор не посилає сигналів переривань і висновок на нього виконується не через порт, а шляхом запису даних в область відеопам'яті. Наявне програмне переривання BIOS практично використовується для перемикання відеорежиму (текстовий або графічний, число кольорів, кількість точок на екрані) і для зміни виду і положення курсору текстового режиму. Висновок символів через BIOS досить повільний і використовується в основному для невеликих текстових повідомлень. У графічних режимах BIOS працює неприйнятно повільно, бо він за кожний виклик переривання може вивести тільки одну точку. Серйозні програми працюють з відеопам'яттю безпосередньо. Функції DOS для виведення на консоль не мають навіть права використовувати таку специфіку монітора, як управління курсором і вибір кольору, адже вони працюють з пристроєм CON, яке може виявитися і друкарською машинкою.
Для принтера BIOS пропонує можливість перевірки стану пристрою (зокрема, чи знаходиться принтер в стані готовності) і виведення одного символу з опитуванням готовності. У той же час, DOS, крім убогій функції виведення одного символу з очікуванням на пристрій PRN, дозволяє використовувати системну програму PRINT, яка вміє виводити файли у фоновому режимі, не заважаючи одночасно виконувати інші програми. Ця програма працює з апаратними перериваннями в обхід BIOS.
Про роботу з послідовним портом можна сказати майже те ж саме, що про роботу з принтером. Відмінність в тому, що порт може працювати і на введення даних. Один з найвірніших способів «підвісити» систему навічно - запросити введення символу з COM-порту з очікуванням через BIOS або DOS, якщо на вхід порту не надходять ніякі дані. Практично завжди робота з COM-портом ведеться за допомогою нестандартних драйверів, що працюють по перериваннях.
Миша взагалі не є стандартним пристроєм для комп'ютерів - нащадків IBM PC. BIOS нічого не знає про існування мишей. Драйвери миші мало схожі на інші драйвери MS-DOS. Вони дозволяють опитувати поточне положення миші і стан кнопок, однак більш зручною для додатків є можливість задати за допомогою драйвера власну процедуру обробки переривань від миші. Ця процедура повинна визначати, в якому місці екрану був курсор при натисканні кнопки миші, який елемент управління (кнопка, пункт меню, смуга прокрутки і т.п.) знаходиться в цій точці, і тільки потім - яку дію слід зробити при клацанні миші на цьому елементі. Занадто багато чорнової роботи, яку більш сучасні ОС (наприклад, Windows) беруть на себе.