Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zvitische.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
353 Кб
Скачать
☆

Динамічне підвищення пріоритету

Планувальник ухвалює рішення на основі поточного пріоритету потоку, який може бути вищим за базовий. Є кілька ситуацій, коли має сенс підвищити пріоритет потоку.

Наприклад, після завершення операції введення-виведення збільшують пріоритет потоку, щоб дати йому можливість швидше почати виконання і, можливо, знов ініціювати операцію введення-виведення. У такий спосіб система заохочує інтерактивні потоки і підтримує зайнятість пристроїв введення-виведення. Величина, на яку підвищується пріоритет, не документована і залежить від пристрою (рекомендовані значення для диска і CD – це 1, для мережі – 2, клавіатури і миші – 6 і звукової карти – 8). Надалі протягом кількох квантів часу пріоритет плавно знижується до базового.

Іншими прикладами подібних ситуацій можуть служити: „пробудження” потоку після стану очікування семафора або іншої події; отримання потоком доступу до віконного введення.

Динамічне підвищення пріоритету розв’язує також проблему „голодування” потоків, які довго не одержували доступу до процесора. Виявивши такі потоки, що простоюють протягом приблизно 4 с, система тимчасово підвищує їх пріоритет до 15 і дає їм два кванти часу. Побічним наслідком застосування цієї технології може бути розв’язання відомої проблеми інверсії пріоритетів. Ця проблема виникає, коли низькопріоритетний потік утримує ресурс, блокуючи високопріоритетні потоки, що претендують на цей ресурс. Рішення полягає в штучному підвищенні його пріоритету на деякий час.

4. Що таке реєнтерабельність програмного коду ядра операційної системи?

Реєнтерабельність коду ядра дозволяє ОС Windows підтримувати симетричні мультипроцесорні системи (процесори ідентичні). Необхідність завантаження декількох процесорів ускладнює завдання планування. Кількість процесорів система визначає при завантаженні, і ця інформація стає доступною додаткам через функцію GetSystemInfo. Кількість процесорів, використовуваних системою, може бути обмежена за допомогою параметра NumPcs із файла Boot.ini.

Ведення окремих черг готових до виконання потоків для кожного з процесорів може мати наслідком нерівномірне завантаження процесорів, тому використовується загальна черга потоків у стані готовності. Будь-який потік стає в чергу і планується на будь-який доступний процесор. Оскільки в системі немає головного процесора, кожен процесор займається самоплануванням і вибирає потік із черги готовності. Щоби гарантувати, що два процесори не виберуть один і той самий потік, для кожного процесора організується ексклюзивний доступ до даної черги за рахунок використання спін-блокування диспетчера ядра.

5. Які класи пріоритетів процесів та відносні пріоритети потоків ви знаєте?

Формування базового пріоритету потоку з класу пріоритету процесу та

відносного пріоритету потоку

Пріоритети потоків

Класи пріоритетів

процесів

Критичний за часом

Найбільш ви- сокий

Вище за

норму

Нормальний

Нижче від

норми

Найбільш низький

Не працюючий

Непрацюючий

15

6

5

4

3

2

1

Нижче від норми

15

8

7

6

5

4

1

Нормальний

15

10

9

8

7

6

1

Вище за норму

15

12

11

10

9

8

1

Високий

15

15

14

13

12

11

1

Реального часу

31

26

25

24

23

22

1


Це просто вищі пріоритети, які зарезервовані для системних потоків і тих потоків, яким такий пріоритет дає користувач з адміністративними правами. Проте наявність пріоритетів реального часу, а також можливість витіснення коду ядра, локалізація сторінок пам’яті і ряд додаткових можливостей – все це дозволяє виконувати в середовищі ОС Windows програми м’якого реального часу, наприклад мультимедійні. Системний потік із нульовим пріоритетом займається занулінням сторінок пам’яті.

Звичайні потоки користувача можуть мати пріоритети від 1 до 15.

6. У яких випадках виконується динамічне підвищення пріоритету та як його виключити?

Планувальник ухвалює рішення на основі поточного пріоритету потоку, який може бути вищим за базовий. Є кілька ситуацій, коли має сенс підвищити пріоритет потоку.

Наприклад, після завершення операції введення-виведення збільшують пріоритет потоку, щоб дати йому можливість швидше почати виконання і, можливо, знов ініціювати операцію введення-виведення. У такий спосіб система заохочує інтерактивні потоки і підтримує зайнятість пристроїв введення-виведення. Величина, на яку підвищується пріоритет, не документована і залежить від пристрою (рекомендовані значення для диска і CD – це 1, для мережі – 2, клавіатури і миші – 6 і звукової карти – 8). Надалі протягом кількох квантів часу пріоритет плавно знижується до базового.

Іншими прикладами подібних ситуацій можуть служити: „пробудження” потоку після стану очікування семафора або іншої події; отримання потоком доступу до віконного введення.

Динамічне підвищення пріоритету розв’язує також проблему „голодування” потоків, які довго не одержували доступу до процесора. Виявивши такі потоки, що простоюють протягом приблизно 4 с, система тимчасово підвищує їх пріоритет до 15 і дає їм два кванти часу. Побічним наслідком застосування цієї технології може бути розв’язання відомої проблеми інверсії пріоритетів. Ця проблема виникає, коли низькопріоритетний потік утримує ресурс, блокуючи високопріоритетні потоки, що претендують на цей ресурс. Рішення полягає в штучному підвищенні його пріоритету на деякий час.

Динамічне підвищення пріоритетів покликане оптимізувати загальну пропускну спроможність системи, проте від нього виграють далеко не всі додатки. Виключення динамічного підвищення пріоритету можна здійснити за допомогою функцій SetProcessPriorityBoost і SetThreadPriorityBoost.

7. Які критерії вибору величини кванта часу?

Round Robin стратегія застосовується в системах розподілу часу. Визначається невеликий відрізок часу, який названий квантом часу. Черга готових процесів розглядається як кільце (рис. 8). Процеси циклічно переміщаються по черзі, одержуючи CPU на час, який дорівнює одному кванту. Новий процес додається в хвіст черги. Якщо процес не завершився в межах виділеного йому кванта часу, його робота примусово переривається, і він переміщається в хвіст черги

Рис. 4. Стратегія планування процесів Round Robin

Властивості Round Robin стратегії залежать від величини часового кванта q. Чим більше часовий квант, тим ближче Round Robin стратегія наближається до FCFS стратегії. При дуже малих значеннях часового кванта Round Robin стратегія називають розподілом процесора — processor sharing. Теоретично це означає, що кожний з N процесів працює зі своїм власним процесором, продуктивність процесора дорівнює 1/N від продуктивності фізичного процесора.

8. Опишіть особливості планування в умовах багатопроцесорності.

Реєнтерабельність коду ядра дозволяє ОС Windows підтримувати симетричні мультипроцесорні системи (процесори ідентичні). Необхідність завантаження декількох процесорів ускладнює завдання планування. Кількість процесорів система визначає при завантаженні, і ця інформація стає доступною додаткам через функцію GetSystemInfo. Кількість процесорів, використовуваних системою, може бути обмежена за допомогою параметра NumPcs із файла Boot.ini.

Ведення окремих черг готових до виконання потоків для кожного з процесорів може мати наслідком нерівномірне завантаження процесорів, тому використовується загальна черга потоків у стані готовності. Будь-який потік стає в чергу і планується на будь-який доступний процесор. Оскільки в системі немає головного процесора, кожен процесор займається самоплануванням і вибирає потік із черги готовності. Щоби гарантувати, що два процесори не виберуть один і той самий потік, для кожного процесора організується ексклюзивний доступ до даної черги за рахунок використання спін-блокування диспетчера ядра.

9. Що таке маска прив’язаності до процесорів?

У кожного потоку є маска прив’язки до процесорів (affinity mask), яка вказує, на яких процесорах можна виконувати даний потік. За замовчуванням Windows використовує нежорстку прив’язку (soft affmity) потоків до процесорів. Це означає, що деяку перевагу має останній процесор, на якому виконувався потік, щоб повторно використовувати дані з кеша цього процесора (споріднене планування). Потоки успадковують маску прив’язки процесу. Зміна прив’язки процесу і потоку може бути здійснена за допомогою Win32-функцій SetProcessAffinityMask і SetThreadAfftnityMask або за допомогою інструментальних засобів Windows (наприклад, це може зробити диспетчер завдань). Є також можливість сформувати апріорну маску прив’язки у файлі образі процесу, що запускається.