1) Самостоятельное переключение потока
2) Вытеснение потоков
3) Завершение кванта времени
4) Завершение потока
1) Самостоятельное переключение потока. Поток может самостоятельно освободить процессор, перейдя в состояние ожидания.
WaitForSingleObject(…)
WaitForMultipleObject(…)
Подключается любой поток очереди. После завершения ожидания происходит следующее.
а) если этот поток находится в динамическом диапазоне (от 0 до 15), то квант потока уменьшается на одну квантовую единицу, что эквивалентно 1/3 таймера.
б) если это не Windows 2000 и если это поток из диапазона RealTime (16 – 31), то потоку передаётся полный квант времени.
2) Вытеснение. Поток с более низким приоритетом вытесняется потоком с более высоким приоритетом. Такая ситуация возможна в двух случаях:
а) Завершилось ожидание потока с более высоким приоритетом, то есть произошло событие, которое он ждал.
б) Приоритет потока увеличился или уменьшился.
Потоки пользовательского режима могут вытеснять потоки ядра. Когда поток вытесняется, он помещается в начало очереди потока. Если это Windows 2000 и поток динамического диапазона, то ему будет представлен не полный квант, а остаток кванта.
3) Завершение кванта времени. Когда поток израсходует свой квант Windows снижает его динамический приоритет. Windows ставит его в конец очереди с соответствующим уровнем приоритета.
4) Завершение потока. При завершении потока ОС просматривает значение счётчика ссылок равеных 0. Регионы адресного пространства освобождаются.
TDB
ID Счётчик ссылок … Код завершения |