Граф состояний потоков в MS Windows 2000-2003. Поток простоя. Принципы адаптивного планирования.

16.1 Граф состояний потоков в MS Windows 2000.

Готовность. При поиске потока на выполнение диспетчер просматривает только потоки, находящиеся в состоянии готовности, у которых есть все для выполнения, но не хватает только процессора.

Первоочередная готовность (standby). Для каждого процессора системы выбирается один поток, который будет выполняться следующим. Когда условия позволяют, происходит переключение на контекст этого потока.

Выполнение. Как только происходит переключение контекстов, поток переходит в состояние выполнения и находится в нем до тех пор, пока не выполнится одно из условий освобождения процессора (см. далее).

Ожидание. Поток может входить в состояние ожидания несколькими способами: поток по своей инициативе ожидает некоторый объект для того, чтобы синхронизировать свое выполнение, например, ожидает завершение операции ввода-вывода.

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

Завершение. Когда выполнение потока закончилось, он входит в состояние завершения.

 

Условия освобождения потоком процессора:

- исчерпан квант;

- появляется более приоритетный готовый поток;

- поток сам добровольно переходит в очередь готовых (Sleep (0), SwitchToThread);

- поток добровольно блокируется, уходя в состояние ожидания (Sleep (n), WaitForSingleObject, синхронный ввод/вывод, …);

- поток снижает свой приоритет;

- поток добровольно исключает текущий процессор из маски совместимости (привязки) (для МПС);

- поток завершает свое выполнение.

Граф состояний потоков для Windows 2003:

 

Обратите внимание на новое состояние Deferred Ready (готов, отложен). Это состояние используется для потоков, выбранных для выполнения на конкретном процессоре, но пока не запланированных к выполнению.

Это новое состояние предназначено для того, чтобы ядро могло свести к минимуму срок применения общесистемной блокировки к базе данных планирования (scheduling database).

 

16.2 Поток простоя.

Если нет ни одного потока, готового к выполнению на процессоре. Windows подключает к данному процессору поток простоя.

Поток простоя не имеет приоритета, поскольку он выполняется лишь в отсутствие других потоков.

Для каждого процессора (в МПС) создается свой поток простоя.

 

Поток простоя выполняет следующие действия:

1. Включает и отключает прерывания (тем самым давая возможность доставить отложенные

прерывания).

2. Проверяет, нет ли у процессора незавершенных отложенных программных прерываний (DPC –

Deferred procedure call). Если таковые есть, сбрасывает отложенное программное прерывание и

доставляет эти DPC.

3. Проверяет, выбран ли какой-нибудь поток для выполнения на данном процессоре, и, если да,

организует его диспетчеризацию.

4. Вызывает из HAL процедуру обработки процессора в простое (если нужно выполнить какие-либо

функции управления электропитанием).

5. В Windows Server 2003 поток простоя также проверяет наличие потоков, ожидающих выполнения

на других процессорах, но об этом пойдет речь в разделе по планированию потоков в

многопроцессорных системах.

16.3 Принципы адаптивного планирования.

Если поток полностью исчерпал свой квант, то его приоритет понижается на некоторую величину.

Приоритет потоков, которые перешли в состояние ожидания, не использовав полностью выделенный им квант, повышается.

Приоритет не изменяется, если поток вытеснен более приоритетным потоком.

Повышение приоритета для “голодающих” потоков.

Пример “голодающего” потока:

Представьте, что поток с приоритетом 4 готов к выполнению, но не может получить доступ к процессору из-за того, что его постоянно занимают потоки с приоритетом 8.

Это типичный случай "голодания" потока с более низким приоритетом. Обнаружив такой поток, не выполняемый на протяжении уже трех или четырех секунд, система поднимает его приоритет до 15 и выделяет ему двойную порцию времени. По его истечении потоку немедленно возвращается его базовый приоритет.