Волокна (fibers).

Введены в Windows 2000 для переноса существующих серверных приложений из UNIX.

Реализованы на уровне кода пользовательского режима. В потоке может быть одно или несколько волокон. Для ядра поток – все то, что можно вытеснить и что выполняет код. Единовременно поток будет выполнять код лишь одного волокна.

Процессорное время между волокнами распределяется по пользовательскому алгоритму.

 

Взаимосвязь между заданиями, процессами и потоками

 

14.3 Классы приоритетов.

Приоритетный режим обслуживания:

Разработчик ПО может использовать приоритеты от 1 до 31.

Нулевой приоритет зарезервирован для потока обнуления страниц.

Поток наследует приоритет процесса, породившего его.

ОС Windows NT 4.0 предоставляет 4 класса приоритетов: Realtime, High, Normal и Idle.

ОС Windows 2000: еще 2 дополнительных класса приоритетов – Below Normal и Above Normal.

Относительный приоритет потока: idle, lowest, below normal, normal (обычный), above normal, highest и time-critical.

 

Классы приоритета процессов:

 

Относительные приоритеты потоков:

 

Базовый и динамический приоритеты потока:

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

Использование динамических приоритетов, изменяющихся во времени, позволяет реализовать адаптивное планирование, при котором не дискриминируются интерактивные задачи, часто выполняющие операции ввода-вывода и недоиспользующие выделенные им кванты.

Система повышает приоритет только тех потоков, базовый уровень которых находится в пределах 1-15. Именно поэтому данный диапазон называется "областью динамического приоритета" (dynamic priority range). Система не допускает динамического повышения приоритета потока до уровней реального времени (более 15). Поскольку потоки с такими уровнями обслуживают системные функции, это ограничение не дает приложению нарушить работу ОС. И, кстати, система никогда не меняет приоритет потоков с уровнями реального времени (от 16 до 31).

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

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

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

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

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

 

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

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

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

 

Состояния потоков:

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

Поток простоя:

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

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

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

 

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

Схема состояний потоков в Windows Server 2003 показана на следующем слайде.

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

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