
- •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.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.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.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.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.3. Планувальник Windows
Завданням планувальника є вибір чергової нитки для виконання. Планувальник викликається в трьох випадках:
· Якщо закінчується квант часу, виділений поточної нитки;
· Якщо поточна нитка викликала блокуючу функцію (наприклад, WaitForMultipleObjects або ReadFile) і перейшла в стан очікування;
· Якщо нитка з більш високим пріоритетом прокинулася від очікування або була тільки що запущена.
Для вибору нитки використовується алгоритм пріоритетною черзі. Для кожного рівня пріоритету система веде чергу активних ниток (тобто ниток, що знаходяться в стані готовності). Для виконання вибирається чергова нитка з непорожній черзі з найвищим пріоритетом.
Черги активних ниток поповнюються за рахунок ниток, проснувшихся після стану очікування і ниток, витіснених планувальником. Як правило, нитка поміщається в кінець черги. Виняток робиться для нитки, витісненої до закінчення її кванта часу більш пріоритетною ниткою. Така «скривджена» нитка ставиться в голову черги.
Значення кванта часу для серверних установок Windows одно зазвичай 120 мс, для робочих станцій - 20 мс.
Як ви думаєте, чому для серверів квант часу більше?
Тепер докладніше про пріоритети. Хоча загальна схема їх призначення однакова для всіх версій Windows, деталі можуть різнитися. Подальший виклад орієнтований на Windows NT 4.0.
Всі рівні пріоритету ниток пронумеровані від 0 (найнижчий пріоритет) до 31 (найвищий). Рівні від 16 до 31 називаються пріоритетами реального часу, вони призначені для виконання критичних за часом системних операцій. Тільки сама система або користувач з правами адміністратора можуть використовувати пріоритети з цієї групи. Рівні від 0 до 15 називаються динамічними пріоритетами.
У Windows використовується двоступенева схема призначення пріоритетів. При створенні процесу йому призначається (а згодом може бути змінений самою програмою або користувачем) один з чотирьох класів пріоритету, з кожним з яких пов'язано базове значення пріоритету:
· Realtime (базовий пріоритет 24) - вищий клас пріоритету, допустимий тільки для системних процесів, що займають процесор на дуже короткий час;
· High (базовий пріоритет 13) - клас високопріоритетних процесів;
· Normal (базовий пріоритет 8) - звичайний клас пріоритету, до якого відноситься велика частина запускаються прикладних процесів;
· Idle (базовий пріоритет 4) - нижчий (буквально - «холостий» або «простоює») клас пріоритету, характерний для екранних заставок, моніторів продуктивності та інших програм, які не повинні заважати жити більш важливим програмам.
Власне пріоритет пов'язується не з процесом, а з кожною його ниткою. Пріоритет нитки визначається базовим пріоритетом процесу, до якого додається відносний пріоритет нитки - величина від -2 до +2. Відносний пріоритет призначається нитки при її створенні і може при необхідності змінюватися. Є також можливість призначити нитки критичний пріоритет (31 для процесів реального часу, 15 для інших) або холостий пріоритет (16 для процесів реального часу, 0 для решти).
Для ниток процесів реального часу пріоритети є статичними в тому сенсі, що система не намагається їх змінювати на свій розсуд. Передбачається, що для цієї групи процесів співвідношення пріоритетів має бути саме таким, як задумав програміст.
Для процесів трьох нижчих класів їх пріоритети не випадково називаються динамічними. Планувальник може змінювати пріоритети, а заодно і кванти часу для ниток в ході їх виконання, щоб досягти більш справедливого розподілу процесорного часу. Правила зміни динамічних пріоритетів наступні.
· Коли заблокована нитка дочекалася потрібного їй події, до пріоритету нитки додається величина, що залежить від причини очікування. Ця надбавка може досягати 6 одиниць (але пріоритет не повинен перевищити 15), якщо нитка розблокована внаслідок натискання клавіші або кнопки миші. Таким способом система прагне зменшити час реакції на дії користувача. Всякий раз, коли нитка повністю використовує свій квант часу, надбавка зменшується на 1, поки пріоритет нитки не повернеться до свого заданому значенню.
· Якщо нитка володіє вікном переднього плану (тобто тим, з яким працює користувач), то заради зменшення часу реакції планувальник може збільшити квант часу для цієї нитки з 20 мс до 40 або 60 мс, в залежності від налаштувань системи.
· Якщо планувальник виявляє, що деяка нитка перебуває в черзі більше 3 с, то він підвищує її пріоритет аж до 15 і подвоює її квант. Але ця благодійність разова: коли Попелюшка-нить витратить збільшений квант або заблокується, її пріоритет і квант повертаються до колишніх значень. Сенс акції зрозумілий: система намагається забезпечити хоч якесь просування навіть для низькопріоритетних ниток.