Иллюстрированный самоучитель по Pogramming Sistem Security


Базовый приоритет. Класс приоритета и относительный приоритет


Ядро NT предоставляет функции для назначения потоку любого из 31 уровня приоритетов (кроме зарезервированного нулевого уровня). Программно назначенное потоку значение приоритета называют базовым приоритетом.

Подсистема Win32 не позволяет непосредственно назначать потоку базовое значение приоритета. Вместо этого используется комбинация двух значений:

  • Класс приоритета процесса, назначаемый процессу при его создании (дальше мы будем ссылаться на этот термин как на класс приоритета).
  • Относительное значение приоритета потока внутри класса приоритета процесса (относительный приоритет).

На рис. 4 показаны группы взаимосвязанных приоритетов. Максимальный (31) и минимальный (1) из возможных приоритетов определяются в Win32 как THREAD_ PRIORITY_TIME_CRITICAL и THREAD_PRIORITY_IDLE соответственно.

В таблице 3 приведены все возможные классы приоритетов. По умолчанию, процесс имеет класс NORMAL_PRIORITY_CLASS, если при вызове функции CreateProcess() не было указано другого. Прикладная программа может получать/изменять класс приоритета процесса с помощью функций Win32-API GetPriotityClass() / SetPriorityClass() .

Таблица 3. Классы приоритетов

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

Базовый приоритет

Примечание

REALTIME PRIORITY CLASS

24

HIGH PRIORITY CLASS

13

ABOVE NORMAL PRIORITY CLASS

10

Только Win 2000

NORMAL PRIORITY CLASS

8

BELOW NORMAL PRIORITY CLASS

6

Только Win 2000

IDLE PRIORITY CLASS

4

Поток может иметь одно из 7 значений (см. таблицу 4): 5 значений, относительных внутри каждого класса приоритетов, и 2 значения, относительных внутри диапазонов динамического приоритета и приоритетов реального времени.

Таблица 4. Относительный приоритет

Относительный приоритет

THREAD PRIORITY TIME CRITICAL

15 (31)

THREAD PRIORITY HIGHEST

+2

THREAD PRIORITY ABOVE NORMAL

+1

THREAD PRIORITY NORMAL

+0

THREAD PRIORITY BELOW NORMAL

-1

THREAD PRIORITY LOWEST

-2

THREAD PRIORITY IDLE

1 (16)

Два значения, обозначающие минимальное и максимальное значение приоритета внутри диапазона динамических приоритетов и приоритетов реального времени - это THREAD_PRIORITY_IDLE и THREAD_PRIORITY_ TIME_CRITICAL. Для диапазона динамических приоритетов они обозначают базовые приоритеты 1 и 15, а для диапазона приоритетов реального времени - 16 и 31 соответственно.

Любой поток всегда создается с относительным приоритетом THREAD_ PRJORITY_NORMAL. Соответствующие значения базового приоритета в зависимости от класса приоритета указаны в таблице 3.

Относительный приоритет потока может быть получен/изменен с помощью WIN32-функций GetThreadPriority()/SetThreadPriority().

Необходимо отметить, что служебные потоки ОС, производящие операции с мышью и клавиатурой, а также некоторые файловые операции, работают с приоритетом реального времени. Поэтому использование пользовательскими потоками таких приоритетов может повлиять на корректность функционирования ОС.




- Начало -  - Назад -  - Вперед -