Лекция: Динамическое повышение приоритета

 

Windows 2000 может динамически повышать значение текущего приоритета потока в одном из пяти случаев:

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

2.По окончании ожидания на каком-либо событии исполнительной системы или на семафоре приоритет потока, ожидавшего его, повышается на 1 уровень.

3.По окончании операции ожидания потоками активного процесса на объекте ядра функция ядра KiUnwaitThread динамически повышает его текущий приоритет. Это увеличивает отзывчивость интерактивного приложения по окончании ожидания. В результате повышаются шансы на немедленное возобновление его потока — особенно если в фоновом режиме выполняется несколько процессов с тем же базовым приоритетом.

4.При пробуждении GUI-потоков из-за операций с окнами их поток дополнительно повышается на 2 уровня, что также создает преимущества интерактивным приложениям.

5.Если поток, готовый к выполнению, задерживается из-за нехватки процессорного времени. Пусть, например, имеется поток с приоритетом 7, который постоянно вытесняет поток с приоритетом 4, не давая ему получить процессорное время; при этом поток с приоритетом 11 ожидает освобождения ресурса, занятого потоком с приоритетом 4. В этом случае поток с приоритетом 11 не может получить управление из-за того, что поток с приоритетом 4 не может освободить ресурс из-за нехватки процессорного времени, которое «съедает» поток с приоритетом 7. Для решения такого рода проблем диспетчер настройки баланса Windows 2000 раз в секунду сканирует очередь готовых к выполнению потоков и ищет потоки, которые находятся в состоянии Ready в течение более 300 тактов системного времени (примерно 3-4 секунды). Обнаружив такой поток, диспетчер настройки баланса повышает его приоритет до 15 и выделяет ему квант, вдвое больший обычного. По истечении этого двойного кванта приоритет потока немедленно снижается до исходного уровня. Если этот поток не успел закончить свою работу или другой поток с более высоким приоритетом готов к выполнению, то после снижения приоритета он возвращается в очередь готовых потоков. В итоге через 300 тактов системного таймера его приоритет может быть снова повышен. Для снижения потерь процессорного времени диспетчер настройки баланса сканирует не всю очередь готовых к выполнению потоков, а только первые 16 из них, при этом он запоминает, на каком потоке он остановился и в следующий раз начинает просмотр с него. Кроме того, он повышает приоритет не более чем у 10 потоков за один проход.

Динамическое повышение приоритета предназначено для оптимизации общей пропускной способности и отзывчивости системы, а также для устранения потенциально «нечестных» сценариев планирования. Однако от применения этого механизма выигрывают далеко не все приложения. Windows 2000 никогда не увеличивает приоритет потоков в диапазоне реального времени (16-31), поэтому планирование таких потоков по отношению к другим всегда предсказуемо.

 

Планирование потоков в симметричных

еще рефераты
Еще работы по информатике