Иллюстрированный самоучитель по 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().

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




    Содержание  Назад  Вперед