Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
final versionCKC13.doc
Скачиваний:
26
Добавлен:
17.03.2016
Размер:
3.17 Mб
Скачать

Використання динамічних пріоритетів

При роботі у режимі реального часу, що виконують задачі контролю та управління, може виникнути така ситуація, коли одна або декілька задач не можуть бути виконані на протязі досить довгого проміжку часу. Втрати, пов’язані з невиконанням таких задач, можуть бути досить значними. При цьому доцільно тимчасово змінити пріоритети «аварійних» задач. Після їх виконання відповідні пріоритети можна поновити.

Тому, як правило, у ОС реального часу є засоби зміни пріоритету програм.

Одним із таких засобів є слідуючий:

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

Тобто процес має два атрибути пріоритету: поточний, за яким виконується планування, та заказний відносний пріоритет. Наприклад, більш високому значенню поточного пріоритету може відповідати більш низький фактичний пріоритет планувальника.

Розподіл між пріоритетами режиму ядра та задачі також залежить від версії ОС.

Пріоритети процесів, що виконуються у режимі задачі, мають менший пріоритет, ніж у режимі ядра. Наприклад пріоритети режиму задачі змінюються у діапазоні 0-65, для режиму ядра 66-95, а процеси, пріоритети яких лежать у діапазоні 96-127 – це процеси з фіксованим пріоритетом. Вони не змінюються ОС та визначені для підтримки реального часу. Як правило, процесу, що чекає недоступного у даний час ресурсу системи, визначає значення пріоритету сну, який вибирається ядром із діапазону системних пріоритетів, пов’язаних із цим випадком, що призвів до такого стану. Коли процес пробуджується, ядро встановлює значення поточного пріоритету, що дорівнює пріоритету сна. Оскільки пріоритет такого процесу знаходиться у системному діапазоні та вище ніж пріоритет задачі, відповідність наданим процесу обчислювальних ресурсів значно збільшується.

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

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

Наприклад, операційна система OS/2самостійно змінює пріоритет виконання програм незалежно від рівня, який був встановлений прикладною задачею. Цей механізм зветься механізмом підвищення пріоритету.

ОС змінює пріоритети задач у трьох випадках:

  • збільшується пріоритет активної задачі. Пріоритет автоматично збільшується, коли вона стає активною. Це понижує час реакції активного додатку на дії користувача у порівнянні із фоновими програмами.

  • збільшується пріоритет вводу-виводу. По завершенню операцій вводу-виводу процес отримує найбільший рівень пріоритету її класу. Таким чином забезпечується завершення усіх незакінчених операцій вводу-виводу.

  • збільшення пріоритету «забутих задач». Якщо задача (або процес) не отримує процесора досить давно (цей проміжок часу задається наприклад у OS/2 у файлі CONFIG.SYS), диспетчер задач OS/2 тимчасово присвоює їй рівень пріоритету, що не перевищує критичний. У результаті час переключення на таку «забуту» програму пришвидшується. Після використання одного кванту часу пріоритет знову зменшується до попереднього.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]