
- •Операційні системи Конспект лекцій
- •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
- •Література
3.6.4.3. Структури даних у пам'яті
Для забезпечення доступу до відкритих файлів MS-DOS використовує системні таблиці двох типів.
Таблиця SFT (System File Table) містить записи про всіх файлах, в даний момент відкритих програмами користувача і самої ОС. Ця таблиця зберігається в системній пам'яті, число записів у ній визначається параметром FILES у файлі конфігурації CONFIG.SYS, але не може перевищувати 255.
Якщо один і той же файл був відкритий кілька разів (неважливо, однієї і тієї ж програм ой чи різними програмами), то для нього буде кілька записів у SFT.
Кожен запис містить докладну інформацію про файл, достатню для виконання операцій з ним. Зокрема, в записі SFT містяться:
· Копія каталожної інформації про файл;
· Адресу каталожної записи (сектор та номер запису в секторі);
· Поточне положення вказівника читання / запису;
· Номер останнього записаного або прочитаного кластера файла;
· Адресу в пам'яті програми, що відкрила файл;
· Режим доступу, заданий при відкритті.
Крім того, в записі SFT міститься значення лічильника посилань на цю запис з усіх таблиць JFT, мова про які піде нижче. Коли цей лічильник стає рівним нулю, запис SFT стає вільною, оскільки файл закритий.
На відміну від єдиної SFT, таблиці JFT (Job File Table) створюються для кожної програми, що запускається, тому одночасно може існувати кілька таких таблиць. (А звідки в однозадачной MS-DOS можуть взятися одночасно кілька програм? Найпростіший відповідь: коли одна програма запускає іншу, то в пам'яті присутні обидві. Детальніше див п. 4.4.3.) Таблиця JFT має найпростішу структуру: вона складається з однобайтових записів , причому значення кожного запису являє собою індекс (номер запису) в таблиці SFT. Невживані записи містять значення FF16. Розмір таблиці за замовчуванням становить 20 записів (байт), але може бути збільшений до 255.
Тепер про хендл. Прикладна програма використовує хендл як деякі умовні номери відкритих файлів, конкретне значення хендл при цьому не грає ніякої ролі (за зрозумілих винятком стандартних хендл з 0 по 4). Насправді ж значення хендл являє собою не що інше, як індекс запису в таблиці JFT даної програми. Перший запис таблиці відповідає хендл 0.
На рис. 3-3 показано зв'язок між хендл, таблицями JFT, таблицею SFT і відкритими файлами / пристроями.
Рис. 1‑12
У прикладі, показаному на малюнку, стандартні хендл процесу A використовуються так, як це за замовчуванням робить MS-DOS: хендл 0, 1 і 2 вказують на запис SFT, відповідну консольному пристрою CON, хендл 3 - на запис про пристрій COM1, хендл 4 -на запис про принтер. У процесу B стандартний вивід перенаправлено на принтер, що відображено в значенні елемента 1 з JFT цього процесу. Хендл 3 і 4 для процесу B не показані, щоб не захаращувати малюнок. Решта показані на малюнку елементи JFT обох процесів вказують на записи SFT, що описують відкриті файли на дисках.
Зауважимо, що з файлом PICTURE.BMP пов'язані два записи в таблиці SFT. Це означає, що даний файл був відкритий в кожному процесі окремо (але, очевидно, з використанням одного з режимів поділу файлу).
Коли програма викликає якусь із системних функцій і передає їй значення хендл одного з відкритих файлів, то система знаходить адреса таблиці JFT викликала програми, читає зазначену хендл запис цієї таблиці, визначає відповідний індекс у таблиці SFT і отримує таким чином доступ до інформації, необхідної для виконання операції з файлом.
У чому сенс такої двоступеневої схеми? Чи не простіше було, щоб хендл вказував безпосередньо на запис SFT? Можна навести, принаймні, два очевидні аргументу на користь застосування JFT.
· Що відбувається з файлами при завершенні програми, яка їх відкрила? Правила хорошого програміста тону вимагають, щоб програма перед закінченням роботи зачинила за собою всі файли. Однак програміст може і не виконати цю вимогу, або програма може завершитися аварійно. У будь-якому випадку ОС повинна при завершенні програми закрити всі її файли. Як ОС дізнається, які файли слід закрити? Відповідь дуже проста: досить переглянути таблицю JFT завершує програму і знайти там всі записи, відмінні від FF16.
· Використання JFT дає можливість відокремити логічне поняття стандартного пристрою (зокрема, стандартний ввід - хендл 0 і стандартний вивід - хендл 1) від конкретних пристроїв. Перенаправлення стандартних пристроїв виконується шляхом зміни значень відповідних елементів JFT.