- •4.6.2. Програмний інтерфейс планування
- •4.1. Загальні принципи планування
- •4.1.1. Особливості виконання потоків
- •4.1.2. Механізми і політика планування
- •4.1.3. Застосовність принципів планування
- •4.2. Види планування
- •4.2.1. Довготермінове планування
- •4.3. Стратеги планування. Витісняльна і невитісняльна багатозадачність
- •4.2.2. Середньотермінове планування
- •4.2.3. Короткотермінове планування
- •4.4. Алгоритми планування
- •4.4.1. Планування за принципом fifo
- •4.4.2. Кругове планування
- •4.4.4. Планування на підставі характеристик подальшого виконання
- •4.4.5. Багаторівневі черги зі зворотним зв’язком
- •4.4.6. Лотерейне планування
- •4.5. Реалізація планування в Linux
- •4.5.1. Планування процесів реального часу в ядрі
- •4.5.2. Традиційний алгоритм планування
- •4.5.3. Сучасні підходи до реалізації планування
- •4.5.4. Програмний інтерфейс планування
- •4.6. Реалізація планування у Windows хр
- •4.6.1. Планування потоків у ядрі
- •4.6.2. Програмний інтерфейс планування
- •Висновки
- •5.1. Основні принципи взаємодії потоків
- •5.2. Основні проблеми взаємодії потоків
- •5.2.1. Проблема змагання
- •5.2.2. Критичні секції та блокування Поняття критичної секції
- •5.3. Базові механізми синхронізації потоків
- •5.3.1. Семафори
- •5.3.2. М’ютекси
- •5.3.3. Умовні змінні та концепція монітора
- •5.3.4. Блокування читання-записування
- •5.3.5. Синхронізація за принципом бар’єра
- •5.4. Взаємодія потоків у Linux
- •5.4.1. Механізми синхронізації ядра Linux
- •5.4.2. Синхронізація процесів користувача у Linux. Ф’ютекси
- •5.5. Взаємодія потоків у Windows хр
- •5.5.1. Механізми синхронізації потоків ос
- •5.5.2. Програмний інтерфейс взаємодії Win32 арі
- •Висновки
- •Контрольні запитання та завдання
4.6.2. Програмний інтерфейс планування
Розглянемо функції Win32 АРІ, за допомогою яких можна працювати із класами пріоритетів процесів і відносних пріоритетів потоків.
Для зміни класу пріоритету процесу використовують функцію SetPriority- Class(), для визначення поточного класу пріоритету — функцію GetPriorityClass( ):
BOOL SetPriorityClass(HANDLE ph. DWORD pclass);
DWORD GetPriorityClass(HANDLE ph);
Параметр ph визначає дескриптор процесу, для якого задають клас пріоритету, а параметр pclass — клас пріоритету. Можливі такі значення pclass:
♦ REALTIME_PRIORITY_CLASS (реального часу);
♦ HIGH_PRIORITY_CLASS (високий);
♦ N0RMAL_PRIORITY CLASS (нормальний);
♦ IDLE_PRIORITY_CLASS (невикористовуваний).
Розглянемо приклад використання цих функцій:
Щоб задати відносний пріоритет потоку, використовують функцію SetTnread- Priority( ), а щоб задати його значення — GetThreadPriorlty( ).
Параметр th є дескриптором потоку, параметр priority (і повернуте GetThread- Priority( )) може набувати одного з таких значень:
♦ THREAD_PRIORITY_TIME_CRIТICAL (критичний за часом);
♦ THREAD_PRIORITY HIGHEST (найвищий);
♦ THREAD_PRIORITY_ABOVE_NORMAL (вищий за нормальний);
♦ THREAD_PRIORITY_NORMAL (нормальний);
♦ THREAD__PRI0RITY_BE10W_N0RMAL (нижчий за нормальний);
♦ THREAD_PRIORITY_LOWEST (найнижчий);
♦ THREAD_PRIORITY_IDLE (невикористовуваний).
Розглянемо приклад використання цих функцій.
У даному прикладі ми створюємо потік у призупиненому стані, задаємо його пріоритет, а потім поновлюємо його виконання. Для цього використана функція ResumeThread( ), що параметром приймає дескриптор потоку.
Висновки
♦ Задача планування потоків зводиться до організації виконання кількох потоків на одному процесорі так, аби у користувачів виникало враження, що вони виконуються одночасно. Цілями планування є: мінімізація часу відгуку, максимізація пропускної здатності та справедливість. До основних стратегій планування належать витісняльна й невитісняльна багатозадачність. У сучасних ОС застосовують витісняльну багатозадачність, коли рішення про перемикання контексту потоку приймають у коді ядра системи, а не в коді потоку.
♦ Розрізняють довготермінове, середньотермінове й короткотермінове планування. Найважливіший тут короткотерміновий планувальник, котрий використовують для прийняття рішення про те, який потік запустити на виконання в певний момент. До основних алгоритмів короткотермінового планування належать планування кругове і з пріоритетами.
Контрольні запитання та завдання
1. Процес виконується в нескінченному циклі. За допомогою якого апаратного пристрою операційна система може перехопити керування в цього процесу? Опишіть особливості використання такого пристрою.
2. Наведіть приклади програм, під час виконання яких не буде жодних проблем в ОС із витісняльною багатозадачністю, але виникнуть блокування системи в ОС із невитісняльною багатозадачністю.
3. Задано послідовність потоків (табл. 4.1):
В комірках табл. 4.2 відобразіть, який із потоків буде займати процесор у фіксований момент часу в разі використання алгоритмів планування FIFO, RR (кругового), STCF, SRTCF і PS (з пріоритетами).
Пріоритет 4 є найвищим.
4. Для даних попередньої задачі обчисліть час відгуку і час до завершення кожного потоку в разі використання всіх алгоритмів планування. Обчисліть також середній час відгуку і поясніть одержані результати.
5. Як зміниться завантаження пристроїв введення-виведення із зменшенням довжини кванта у разі кругового планування? Чи збільшиться в цьому випадку час виконання окремих задач?
6. Порівняйте продуктивності алгоритмів багаторівневих черг зі зворотним зв’язком і SRTCF для потоків, обмежених введенням-виведенням.
7. Опишіть, яким чином багаторівневі черги зі зворотним зв’язком відокремлюють потоки, обмежені процесором, від потоків, обмежених введенням-виведенням.
8. Припустімо, що в системі з лотерейним плануванням кількість квитків, одержуваних потоком, прямо пропорційна частці процесорного часу, який повинен бути йому наданий:
а) запропонуйте критерій вибору наступного потоку для виконання, що базується на частці процесорного часу, використаній потоком, і кількості квитків, що у нього залишилися;
б) скільки квитків треба надати потоку при його створенні?
9. Деякі алгоритми планування при певних значеннях параметрів можуть емулювати один одного. Оцініть можливість прямої і зворотної емуляції таких пар алгоритмів:
а) STCF і планування з пріоритетами;
б) FIFO і планування з пріоритетами;
в) FIFO і багаторівневих черг зі зворотним зв’язком;
г) STCF і кругового планування.
10. Проаналізуйте, як будуть поводитися застосування, розроблені для розв’язання завдання 10 з лекції №4, якщо в їхньому коді змінювати пріоритети потоків T i t.
ЧАСТИНА 2
Взаємодія потоків
♦ Принципи та проблеми взаємодії потоків
♦ Задачі синхронізації
♦ Механізми синхронізації: семафори, м’ютекси та умовні змінні
♦ Взаємодія потоків у Linux
♦ Взаємодія потоків у Windows ХР
У цій частині розглянемо основні принципи взаємодії потоків одного процесу. Основну увагу буде зосереджено на синхронізації доступу до спільно використовуваних даних таких потоків.
