
- •Операційні системи Конспект лекцій
- •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.5. Управління процесами в Windows
На відміну від «полуторазадачной» MS-DOS, яка залишає прикладному програмісту всю роботу (і весь ризик) організації паралельного функціонування процесів, багатозадачні ОС надають програмісту більш-менш зручний і багатий набір системних функцій, що дозволяють запустити кілька паралельних процесів і організувати їх взаємодія ( синхронізацію процесів, обмін даними, взаємне виключення і т.п.). При цьому ОС зобов'язана гарантувати коректну і ефективну організацію перемикання процесів, поділу між ними процесорного часу, пам'яті та інших ресурсів.
Складність проблеми організації взаємодії паралельних процесів істотно різна для систем, що використовують Невитісняючаі витісняюча диспетчеризацію процесів. При витісняючої диспетчеризації процес може бути перерваний диспетчером практично в будь-який момент. Крім завдання збереження і подальшого відновлення контексту процесу (див. п. 4.2.5), яка повинна вирішуватися самою ОС, виникають ще й завдання забезпечення взаємного виключення при виконанні критичних секцій в багатозадачних додатках. Тільки розробник програми може вирішити, які частини тексту його програми є критичними секціями і повинні бути захищені семафорами.
В системі з невитесняющей диспетчеризацією програмісту досить перевірити, що критичні секції не містять викликів блокуючих і витісняють функцій. При цьому можна гарантувати, що в ході виконання критичної секції не відбудеться перемикання процесів.
Всі версії Windows від 1.0 до 3.11 представляли собою досить потужні багатозадачні системи з невитесняющей диспетчеризацією. Версії, починаючи з Windows NT і Windows 95, використовують витісняючу диспетчеризацію.
4.5.1. Поняття об'єкта у Windows
В ОС Windows широко використовується поняття системного об'єкта. По суті, будь-який об'єкт являє собою деяку структуру даних, розташовану у адресному просторі системи. Оскільки програми не можуть мати доступу до цієї пам'яті, то для роботи з об'єктом додаток повинен отримати хендл об'єкта - деяке умовне число, яке буде представляти даний об'єкт при зверненні до API-функцій. Процес отримує хендл, як правило, при виклику функції CreateXxx (тут Xxx - назва об'єкта), яка може або створити новий об'єкт, або відкрити існуючий об'єкт, створений іншим процесом. Функції виду OpenXxx дозволяють тільки відкрити існуючий об'єкт.
Об'єкти Windows діляться на об'єкти ядра (KERNEL), що дозволяють керувати процесами, об'єкти USER, що описують роботу з вікнами, і об'єкти GDI, що задають графічні ресурси Windows. В даному курсі розглядаються тільки об'єкти ядра. Процеси, нитки і відкриті файли є прикладами об'єктів ядра.
Однією з відмінних особливостей об'єктів ядра є атрибути захисту, які можна вказати при створенні об'єкта. Ці атрибути визначають права доступу до об'єкта для різних користувачів і груп. Крім того, при створенні об'єкта ядра можна задати його ім'я, яке використовується для того, щоб інші процеси могли відкрити той самий об'єкт, знаючи його ім'я.
Хендл об'єкта може бути використаний тільки тим процесом, який створив або відкрив цей об'єкт. Не можна просто переслати значення хендл іншому процесу, вона не діятиме в іншому контексті. Є, проте, функція DuplicateHandle, яка створює коректну копію хендл, вимагаючи вказати для цього, який процес створює копію, якого саме хендл і для якого процесу призначена копія.
Якщо хендл об'єкта більше не потрібен даному процесу, його слід закрити за допомогою функції CloseHandle, загальною для різних типів об'єктів.
Об'єкт існує до тих пір, поки не будуть закриті всі хендл, що вказують на нього.