Перестановка пріоритетів

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Проблема[ред. | ред. код]

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

В деяких ситуаціях перестановка пріоритетів може і не викликати видимих проблем. Проте існує багато ситуацій коли перестановка пріоритетів може призвести до серйозних проблем. Якщо пріоритетне завдання залишиться знемагати без ресурсів, це може привести до несправностей або виклику коректуючих дій, таких як watch dog timer пильнуючий таймер перевантажить всю систему. Проблема що виникла у Mars lander "Mars Pathfinder" є класичним прикладом перестановки пріоритетів в системах реального часу.

Перестановка пріоритетів також може зменшити видиму продуктивність системи.

Рішення[ред. | ред. код]

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

Відключення всіх переривань для захисту критичних секцій[ред. | ред. код]

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

Максимізація приоритетів. (A priority ceiling)[ред. | ред. код]

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

Успадкування пріоритетів[ред. | ред. код]

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

Посилання[ред. | ред. код]