Пріоритет процесу в linux - life-prog

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

Це обумовлено тим, що в ядрі Linux використовується два класи пріоритетів:
  1. Unreal-time priority.
  2. Real-time priority
Unreal-time priority діляться на два підкласу:
  1. Статичний пріоритет або nice-пріоритет, Значення nice-пріоритету може лежати в діапазоні від -20 до 19, за замовчуванням використовується значення 0. Значення -20 відповідає найбільш високому пріоритету. nice-пріоритет не змінюється планувальником, він успадковується від одного з батьків або його вказує користувач.
  2. Динамічний пріоритет, на підставі якого працює планувальник. Динамічний пріоритет обчислюється виходячи із значення параметра пicе для даного завдання шляхом обчислення надбавки або штрафу в діапазоні від -5 до 5, в залежності від інтерактивності завдання. Для визначення інтерактивності в ядрі Linux передбачений змінний показник того, як співвідноситься час, яке процес проводить в загальмованому стані, з часом, яке процес проводить в стані готовності до виконання.

Real-time priority лежать в діапазоні від 1 до (MAX_RT_PRIO-1), По замовчуванням діапазон значень пріоритетів реального часу становить від 1 до 99.

Для стратегії планування в режимі не реального часу (SCHED_OTHER) простір пріоритетів реального часу об'єднується з простором значень параметра nice, що відповідає діапазону пріоритетів від значення MAX_RT_PRIO до значення (MAX_RT_PRIO + 40). За замовчуванням це означає, що діапазон значень параметра nice від -20 до +19 взаємно однозначно відображається в діапазон значень пріоритетів від 100 до 139. І, таким чином, планування виконується за рівнями пріоритетів від 1 до 139.

Змінити пріоритет процесу в Linux можна за допомогою системного виклику nice. а пріоритет іншого процесу може бути змінений системним викликом setpriority .. Системний виклик getpriority дозволяє дізнатися пріоритет процесу.

Схожі статті