
- •Операційні системи Конспект лекцій
- •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
- •Література
4.2.5. Дескриптор і контекст процесу
З кожним процесом пов'язані описують його дані в основній пам'яті, необхідні ОС для підтримки виконання процесу. Всі ці дані можна розбити на дві великі структури: дескриптор процесу і контекст процесу.
Дескриптор процесу містить у собі всі ті дані про процес, які можуть знадобитися ОС при різних станах процесу. У число елементів дескриптора можуть входити, наприклад, ідентифікатор процесу (якесь умовне число, що позначає даний процес); поточний стан процесу; його пріоритет; власник процесу (тобто ідентифікатор користувача, що запустив процес); статистика витраченого процесом загального та процесорного часу; покажчик місця розташування контексту процесу та ін Дескриптори всіх процесів, що існують в системі, зібрані в таблицю процесів.
Контекст процесу містить дані, необхідні тільки для поточного процесу. Суду відносяться, перш за все, значення всіх регістрів процесора, включаючи покажчик поточної команди; таблиця файлів, відкритих процесом; покажчики на області пам'яті, які повинен займати процес при його виконанні; значення системних змінних, які використовуються процесом (наприклад, поточний диск і каталог, інформація про останню помилку при виконанні системних функцій); інші системні прапори і режими, які можуть мати різні значення для різних процесів.
Точний склад дескриптора і контексту сильно залежать від конкретної ОС.
При перемиканні поточного процесу система повинна кожен раз перемикати і поточний контекст, тобто зберігати в своїй пам'яті або на диску контекст попереднього виконуваних процесів і відновлювати раніше збережений контекст того процесу, який буде виконуватися.
4.2.6. Реєнтерабельним системних функцій
У багатозадачному системі не можна виключити можливість того, що перемикання процесів станеться під час виконання витісняється процесом небудь із системних функцій. При цьому виконання функції не буде завершено, воно буде перервано на середині. Передбачається, що виконання функції буде завершено пізніше, коли перерваний процес знову буде обраний на виконання.
Проблема полягає в тому, що новий поточний процес може викликати ту ж саму системну функцію. Виникає питання: чи можливо коректне виконання другого виклику функції, якщо до цього моменту не закінчено виконання першого виклику тієї ж функції?
Простий приклад подібної ситуації - запуск в ОС декількох програм, кожна з яких блокується на очікуванні клавіатурного введення, викликавши для цього одну і ту ж системну функцію вводу.
Функція або процедура, для якої можливе коректне виконання її повторного виклику до завершення першого виклику, називається реєнтерабельним або повторно-входимость.
Проблема реєнтерабельним функцій виникає в програмуванні та по абсолютно іншому приводу, не пов'язаному з реалізацією ОС. Мова йде про рекурсивних функціях, тобто функціях, які можуть прямо або побічно викликати самі себе. Давно відома і основна причина нереентерабельності функцій. Вона полягає у використанні одних і тих же елементів пам'яті для формальних параметрів і локальних змінних при різних викликах функції. Дійсно, якщо при першому виклику функції в осередок локальної змінної X буде занесено, наприклад, число 10, а при другому - число 20, то після відновлення виконання першого виклику значення X буде невірним.
Ліки від цієї форми нереентерабельності також давно відомо і вбудовано в усі поважають себе мови програмування, починаючи з C і Pascal. Воно полягає в тому, що пам'ять для формальних параметрів і локальних змінних повинна виділятися в стеку програми, при цьому кожен новий вкладений виклик отримує свій набір осередків для змінних.
Для випадку багатозадачної системи використання єдиного стека неприйнятно, оскільки виклики функцій не є вкладеними, тобто перший виклик може завершитися раніше, ніж другий, що призвело б до невірного використання стека. Кожен процес отримує свій власний стек, що є частиною контексту процесу.
Ще одна причина нереентерабельності стосується тих функцій введення / виводу, які запускають операцію і потім чекають її завершення. Повторне звернення до того ж пристрою до завершення
першого виклику може привести до помилки. У даному випадку система повинна відстежувати стан пристрою і блокувати другий виклик до звільнення пристрою.
Проблема реєнтерабельним системних функцій значно гостріше стоїть для ОС з витісняючої диспетчеризацією, оскільки перемикання процесу може трапитися при виконанні будь-якої функції. При невитесняющей диспетчеризації досить забезпечити реєнтерабельним реалізацію лише невеликого числа блокуючих функцій.
При переході від невитесняющей Windows 3.x до витісняючої Windows 95 одна із серйозних проблем полягала в збереженні коду великої кількості нереентерабельних системних функцій. Проблему «вирішили» шляхом введення семафора, блокуючого повторний виклик для великого числа функцій. Неприємним наслідком цього стало взаємне гальмівний вплив процесів. У Windows NT цієї проблеми немає, всі функції реалізовані реєнтерабельним.