
- •Самарская государственная академия путей сообщения
- •Организация вычислительных процессов в эвм и системах Арбитраж, планирование и диспетчеризация
- •Самара 2005
- •Рецензенты: к.Т.Н., доцент н.А. Локтев (нпц «Информационные и транспортные системы»);
- •1.Мультипроцессорный и мультипрограммный
- •3.Основы организации планирования
- •4.Планирование вычислительных процессов
- •6.Практические и лабораторные работы
- •1.Мультипроцессорный и мультипрограммный способы организации вычислительных процессов
- •1.1. Мультипроцессорные системы и арбитраж
- •1.2. Мультипрограммные системы
- •1.3. Гиперпотоковая организация вычислений
- •2.Процессы и потоки в вычислительных системах
- •2.1. Определение процессов, потоков и ресурсов вс
- •2.2. Состояния потоков
- •3. Основы организации планирования и диспетчеризации процессов и потоков
- •3.1. Принципы планирования процессов и потоков
- •3.2. Классификация алгоритмов планирования (вытесняющие и невытесняющие, бесприоритетные и приоритетные алгоритмы)
- •3.3. Линейные алгоритмы планирования
- •3.4.Алгоритмы планирования, основанные на квантовании
- •3.5.Алгоритмы планирования, основанные на приоритетах
- •3.6. Смешанные алгоритмы планирования
- •4. Планирование вычислительных процессов
- •4.1. Принципы планирования в системах реального времени
- •4.2.Планирование с предельными сроками
- •4.3.Частотно-монотонное планирование
- •5.Планирование в windows 2000
- •5.1. Уровни приоритетов потоков в Windows 2000
- •5.2. Особенности алгоритмов планирования в Windows 2000
- •5.3.Учет квантов и управление их величиной
- •5.4.Динамическое повышение приоритета
- •5.5.Планирование потоков в симметричных мультипроцессорных системах
- •6. Практические и лабораторные работы по планированию процессов и потоков
- •6.1. Изучение диспетчера задач и системного монитора
- •6.2. Мониторинг использования ресурсов вычислительной системы
- •Запустите системный монитор.
- •Добавьте на график различные счетчики объекта «Память» и понаблюдайте за их изменением в процессе работы вычислительной системы.
- •6.3. Учет квантов и управление их величиной
- •6.4. Изучение изменения состояния потоков при планировании
- •6.5. Изучение динамического изменения приоритета потока активного процесса
- •6.6.Изучение динамического повышения приоритета gui-потоков
- •6.7. Изучение динамического повышения приоритетов при нехватке процессорного времени
- •Библиографический список Основная литература
5.2. Особенности алгоритмов планирования в Windows 2000
ОС Windows 2000 (W2K) разработана таким образом, чтобы быть по возможности максимально чувствительной либо к запросам отдельного пользователя в интерактивной среде (Windows 2000 Professional), либо запросам группы пользователей сети при использовании ОС серверной версии (Windows 2000 или Server Advanced Server).
Следует заметить, что алгоритмы планирования Windows 2000 для одно- и многопроцессорных систем отличаются. Ниже будет рассмотрен алгоритм планирования для однопроцессорных ВС.
В Windows 2000 реализован вытесняющий планировщик, использующий как концепцию абсолютных приоритетов, так и концепцию квантования. На каждом из уровней класса приоритетов реального времени применяется циклическое (карусельное) RR планирование. В классе переменных приоритетов также используется карусельное планирование, дополненное возможностью динамического изменения приоритета на основе текущей активности потоков (рис.5.1) /11/.
Выбранный для выполнения поток работает в течение определенного кванта времени. После завершения кванта времени планировщик решает, какой другой ожидающий поток поставить на выполнение. Потокам выделяются разные кванты, их длительность, в частности, зависит от версии ОС - Windows 2000 Professional, или Windows 2000, или Server Advanced Server. Однако поток может не полностью использовать свой квант. Это происходит, если в очереди готовых к выполнению потоков появляется поток с более высоким приоритетом. Тогда текущий выполняемый поток вытесняется, даже если его квант еще не истек. Фактически поток может быть выбран следующим для выполнения и вытеснен, не успев воспользоваться своим квантом.
Код Windows 2000, отвечающий за планирование, реализован в ядре ОС. Совокупность процедур, выполняющих эти обязанности, называется диспетчером ядра (kernel`s dispatcher). Диспетчеризация потоков осуществляется при прерываниях уровня «DPC/dispatch» и инициируется событиями:
поток готов к выполнению (например создан или вышел из состояния ожидания);
поток выходит из состояния выполнения (например квант истек, поток завершается или переходит в состояние ожидания);
приоритет потока изменяется в результате вызова системного сервиса или самой Windows 2000;
изменяется привязка к процессорам выполняемого потока (в случае мультипроцессорных SMP-систем).
После выбора нового потока, Windows 2000 переключает контекст. Эта операция заключается в сохранении параметров состояния ВС, связанных с выполняемым потоком, и загрузке аналогичных параметров для другого потока, после чего начинается выполнение нового потока.
В типичном случае переключение контекста требует сохранения и восстановления следующих данных:
программного счетчика (program counter);
регистра состояния процессора;
содержимого остальных регистров процессора (РОН и других);
указателя на стек ядра и пользовательский стек;
указателя на адресное пространство, в котором выполняется поток (каталог таблиц страниц процесса).
Ядро сохраняет эту информацию, записывая ее текущий стек ядра, обновляя указатель стека и сохраняя его в блоке KTHREAD потока. Далее указатель стека ядра устанавливается на стек ядра нового потока и производится загрузка контекста нового потока.
Следует обратить внимание на то, что планирование в Windows 2000 осуществляется на уровне потоков, т.е. система не обращает внимание на то, какому процессу принадлежит тот или иной поток.
Рассмотрим на примерах отдельных сценариев планирования как практически работает приведенный выше алгоритм /11/.
1.Самостоятельное переключение. Поток может самостоятельно освободить процессор, перейдя в состояние ожидания на каком-либо объекте (например событии, мьютексе, семафоре, порте ввода-вывода, процессе, потоке и др.) путем вызова одной из функций ожидания Win32 API (например WaitForSingleObject или WaitForMultipleObject). Если поток переходит в состояние ожидания, не израсходовав выделенный ему квант времени полностью, то его квант не сбрасывается. В этом случае после успешного завершения ожидания квант потока уменьшается на одну квантовую единицу, что эквивалентно одной трети интервала таймера. Исключение составляют потоки, приоритет которых от 14 и выше, у которых после ожидания квант сбрасывается.
2. Вытеснение. Поток с более низким приоритетом вытесняется готовым к выполнению потоком с более высоким приоритетом. Такая ситуация может явиться следствием двух обстоятельств:
завершилось ожидание потока с более высоким приоритетом (т.е. произошло событие, которого он ждал);
приоритет потока увеличился или уменьшился.
Когда поток вытесняется, он помещается в начало очереди готовых потоков соответствующего уровня приоритета. При возобновлении потока с приоритетом из класса реального времени его квант сбрасывается до исходного значения. Потоки с приоритетом из класса переменных в той же ситуации используют оставшийся квант. После завершения вытеснившего потока вытесненный сможет отработать остаток своего кванта.
3.Завершение кванта. Когда поток полностью израсходует свой квант процессорного времени, Windows 2000 решает, следует ли понизить его приоритет и подключить к процессору другой поток. Снизив приоритет потока, Windows 2000 ищет более подходящий для выполнения поток, например любой готовый для выполнения поток с приоритетом выше нового приоритета текущего потока. Если приоритет не изменялся, и в очереди готовых потоков есть другие потоки с тем же приоритетом, ОС выбирает следующий поток с тем же приоритетом, а выполнявшийся до этого помещает в хвост очереди. Если ни один поток с тем же приоритетом не готов к выполнению, текущему потоку выделяется еще один квант процессорного времени.
4.Завершение потока. Завершаясь (например после вызова функции ExitThread или TerminateThread), поток переходит в состояние Terminated. Если в этот момент ни один описатель его объекта «поток» не открыт, он удаляется из списка потоков процесса, а соответствующие структуры данных освобождаются.
5.Поток простоя. Если нет ни одного потока, готового к выполнению на процессоре, Windows 2000 подключает к данному процессору поток простоя (процесса Idle). Для каждого процессора создается свой поток простоя, работающий вне приоритетов, так как он работает лишь в отсутствие других потоков. Этот поток выполняет следующие действия:
включает и выключает прерывания, давая возможность выполнить отложенные прерывания;
проверяет, есть ли у процессора отложенные программные прерывания DPC и организует их выполнение;
проверяет, выбран ли какой-нибудь поток для выполнения на данном процессоре, и если да, то организует его диспетчеризацию;
вызывает процедуру обработки процессора в простое (если нужно выполнить какие-либо функции управления электропитанием).
Для принятия решений при планировании потоков ядро поддерживает набор структур данных, в совокупности известных как база данных диспетчера ядра (dispatcher database). Эта база данных позволяет отслеживать потоки, ждущие выполнения, и принадлежность потоков процессам. Самой важной структурой в базе данных диспетчера ядра является очередь готовых потоков (ready queue), находящаяся в KiDispatcherReadyListHead – списке заголовков для 32 очередей готовых потоков (по одной для каждого приоритета).
Для ускорения выбора потока, подлежащего выполнению или вытеснению, Windows 2000 поддерживает 32-битовую маску, называемую сводкой готовности (ready summary) (KiReadySummary). Каждый установленный в ней бит указывает на присутствие одного или более потоков в очереди готовых потоков для данного уровня приоритета (бит 0 соответствует приоритету 0, бит 1 – приоритету 1 и т.д.). Кроме того, Windows 2000 поддерживает сводку простоя (idle summary) (KidleSummary), в которой каждый установленный бит представляет простаивающий процессор.