И еще для класса Normal приведены по два приоритета, снабженные буквами В (Background) и F (Foreground). Объяснение этому дается ниже.
Таблица29.1. Классыпроцессовиприоритетыихпотоков
(для Windows2000иХР)
I IDLE_ |
BELOW 1 NORMAL i |
ABOVE |
HIGH_ 1 |
REALTIME_ |
||
I PRIORITY |
1NORMAL_ ! |
PRIORITY |
1 NORMAL 1 PRIORITY |
1 PRIORITY |
||
CLASS |
1 PRIORITY CLASS |
i CLASS ! |
PRIORITY CLASS |
i CLASS i ! |
CLASS |
|
THREAD_ |
||||||
PRIORITY^ |
||||||
IDLE |
||||||
THREAD PRIORITY LOWEST |
5(B) 7(F) |
|||||
THREAD_ |
||||||
PRIORITY^
|
6(B) 8(F) |
|||||
NORMAL |
||||||
THREAD_ PRIORITY_ |
7(B) 9(F) |
|||||
NORMAL ~ |
||||||
THREAD^ |
||||||
PRIORITY_ ABOVE_ ~ |
8(B) 10(F) |
|||||
NORMAL |
||||||
THREAD_ PRIORITY HIGHEST |
9(B) 1KF) |
|||||
THREAD_ |
||||||
PRIORITY TIME_ |
||||||
CRITICAL |
Помимо базового приоритета, описываемого в этой таблице, планировщик заданий (scheduler) может назначать так называемые динамические приоритеты. Для процессов класса normal_priority_class при переключении из фонового режима в режим переднего плана и в ряде других случаев приоритет потока, с которым создано окно переднего плана, повышается. Так работают все клиентские операционные системы от Microsoft. Серверные операционные системы оптимизированы для выполнения фоновых приложений. Впрочем, Windows NT и более поздние ОС на этом ядре позволяют переключать режим оптимизации, используя переключатель Application response апплета System панели управления Windows (рис. 29.1).
К тому же Windows 2000 Professional и Windows 2000 Server имеют разные алгоритмы выделения квантов времени. Первая - клиентская - операционная система выделяет время короткими квантами переменной длины для ускорения реакции на приложения переднего плана (foreground). Для сервера же более важна стабильная работа системных служб, поэтому во второй ОС система распределяет длинные кванты постоянной длины.
Рис. 29.1. С помощью диалога Performance Options можно управлять алгоритмом назначения приоритетов
Теперь, разобравшись в приоритетах потоков, нужно обязательно сказать о том, как же их использует планировщик заданий для распределения процессорного времени.
Операционная система имеет различные очереди готовых к выполнению потоков - для каждого уровня приоритета свой. В момент распределения нового кванта времени она просматривает очереди - от высшего приоритета к низшему. Готовый к выполнению поток, стоящий первым в очереди, получает этот квант и перемещается в хвост очереди. Поток будет исполняться всю продолжительность кванта, если не произойдет одно из двух событий: