Краткие теоретические сведения. Процессорное время выделяется потокам в соответствии с их уровнем приоритета

Процессорное время выделяется потокам в соответствии с их уровнем приоритета. Потоку с более низким приоритетом не выделяется время, если на него претендует поток с более высоким уровнем приоритета. Более того, процесс с более низким приоритетом прерывается до истечения кванта времени, если на процессор претендует более приоритетный поток.

Уровни приоритетов варьируются в диапазоне от 0 (низший) до 31 (высший).

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

Класс приоритета процесса и уровень приоритета потока внутри класса определяют базовый уровень приоритета потока. Привилегированными счита­ются приоритеты от 16 до 31, они резервируются за системными программами реального времени. Прикладная программа получить приоритет выше 15 не может.

Определены следующие классы приоритетов, которым соответствуют константы:

– Idle (простаивающий) — IDLE_PRIORITY_CLASS (4), процесс активи­зируется только при простое других процессов;

– Normal (нормальный) — NORMAL_PRIORITY_CLASS (7), большинство процессов в системе, в частности, все процессы пользователя; приоритет владеющего активным окном процесса повышается на 2 и составляет 9;

– High (высокий) – HIGH_PRIORITY_CLASS (13), системные процессы, реагиру­ющие на соответствующие события;

– Real time (реального времени) — REALTIME_PRIORITY_CLASS (24), некоторые системные процессы в "особых случаях".

Внутри классов приоритетов процессов определены уровни приоритетов потоков:

– низший (THREAD_PRIORITY_LOWEST) — ‑2 от уровня класса;

– пониженный (THREAD_PRIORITY_BELOW_NORMAL) — ‑1 от уровня класса;

– нормальный (THREAD_PRIORITY_NORMAL) – равен уровню класса;

– повышенный (THREAD_PRIORITY_ABOVE_NORMAL) — +1 от уровня класса;

– высший (THREAD_PRIORITY_HIGHEST) — +2 от уровня класса;

– простаивающий (THREAD_PRIORITY_IDLE) — равен 16 для REALTIME_­PRIORITY_­CLASS и 1 для остальных классов;

– «критический» (THREAD_PRIORITY_TIME_CRITICAL) – равен 31 для REALTIME_PRIORITY_CLASS и 15 для остальных классов.

Для класса REALTIME_PRIORITY_CLASS может использоваться также расширенный диапазон значений — от ‑7 до +6. Начиная с Windows 2003 добавлены еще два специальных значения приоритета — THREAD_MODE_BACKGROUND_BEGIN и THREAD_MODE_BACKGROUND_END, они связаны с дополнительными возможностями планировщика.

Динамический уровень приоритета образуется повышением базового уровня потока на 2 единицы при поступлении сообщений в его очередь; по истечении некоторого времени восстанавливается исходное значение. Временное повышение приоритета делается также и для долго не получавшего управление потока. Эти правила действует только для потоков с уровнем приоритета не выше 15.

Для управления приоритетами выполнения процессов и потоков служат следующие функции.

GetPriorityClass() – получение текущего класса приоритета для процесса;

SetPriorityClass() – установка класса приоритета для процесса;

GetThreadPriority() – получение текущего приоритета выполнения потока;

SetThreadPriority() – установка приоритета выполнения потока.

В сбалансированной системе высокоприоритетные потоки выполняют, как правило, короткие операции, связанные с реагированием на события. Кроме того, само событийное управление процессами предполагает частое переклюю­чение в состояние ожидания. Это дает шанс на исполнения потокам с низким уровнем приоритета.

Контрольные вопросы

1) Зачем нужны приоритеты. Понятия приоритета процесса и потока.

2) Классы приоритетов. Описание каждого из основных классов приоритетов.

3) Функция, позволяющая получить все выполняющиеся в данный момент процессы. Ее параметры и использование.

4) Функция, позволяющая получить все модули данного процесса. Ее параметры и использование.

5) Основные функции для управления приоритетами.

6) Создание всплывающих меню.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: