Граф состояний потоков в MS Windows 2000-2003. Особенности планирования в многопроцессорных системах.

17.2 Особенности планирования в многопроцессорных системах.

 

Управление потоками в МПС:

Операционные системы Windows 2000-2003 руководствуется следующими базовыми стратегиями для решения того, на каких процессорах какие потоки выполняются:

- выбор процессора для готового потока, при наличии простаивающих процессоров;

- выбор процессора для готового потока, при отсутствии простаивающих процессоров;

- выбор потока для конкретного процессора, который освободился.

Выбор процессора для потока при наличии простаивающих:

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

Если таких процессоров несколько, то выбор процессора производится в зависимости от версии операционной системы Windows (см. далее).

Как только процессор выбран, соответствующий поток переводится в состояние Standby.

При выполнении на этом процессоре поток простоя обнаруживает, что поток выбран и подключает его к процессору.

 

Выбор процессора для потока:

Выбор процессора для потока в Windows 2000:

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

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

 

Выбор процессора для потока в Windows XP и 2003:

Выделяются простаивающие процессоры из числа тех, на которых маска привязки разрешает выполнение данного потока. Если маска привязки разрешает выполнение потока на текущем процессоре, то поток планируется к выполнению именно на этом процессоре.

Если маска привязки не разрешает выполнение потока на текущем процессоре, то выполняется следующий алгоритм.

 

Алгоритм выбор процессора для потока в Windows XP и 2003:

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

Если в системе работают процессоры с технологией HT и имеется физический процессор, все логические процессоры которого свободны, список простаивающих процессоров уменьшается до этого набора. Если в результате такой операции в списке не останется простаивающих процессоров, список не сокращается.

Если текущий процессор относится к набору оставшихся простаивающих процессоров, поток планируется к выполнению именно на этом процессоре.

Если текущий процессор не входит в список оставшихся простаивающих процессоров, если это система с технологией HT и если есть простаивающий логический процессор на физическом, который содержит идеальный процессор для данного потока, то список простаивающих процессоров ограничивается этим набором. В ином идет поиск простаивающих логических процессоров на предыдущем физическом процессоре. Если такой набор не пуст, список простаивающих процессоров уменьшается до этого набора.

Из оставшегося набора простаивающих процессоров исключаются все процессоры, находящиеся в состоянии сна. (Эта операция не выполняется. если в ее результате такой список опустел бы.)

Поток подключается к процессору с наименьшим номером в оставшемся списке.

Выбор процессора для потока при отсутствии простаивающих:

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

1. Если этот процессор не входит в маску привязки потока, Windows выбирает для потока процессор с наибольшим номером (в Windows 2000 маска привязки может исключить идеальный процессор).

2. Если к идеальному процессору уже подключен какой-то поток, Windows сравнивает приоритеты текущего и нового потока. Если приоритет выполняемого потока меньше, чем нового, то текущий поток вытесняется в пользу нового.

3. Если для идеального процессора уже выбран поток, ожидающий в состоянии Standby выделения процессорного времени, и его приоритет ниже, чем потока, готовящегося к выполнению, последний вытесняет первый и становится следующим выполняемым на данном процессоре.

Выбор потока для конкретного процессора (Windows 2000 и XP):

В многопроцессорной системе Windows 2000 или Windows ХР из очереди готовых выбирается поток с наивысшим приоритетом, для которого выполняется одно из дополнительных условий:

- поток уже выполнялся в прошлый раз на данном процессоре;

- данный процессор должен быть идеальным для этого потока;

- поток провел в состоянии Ready более трех тактов системного таймера;

- поток имеет приоритет не менее 24.

Выбор потока для конкретного процессора (Windows 2003):

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

Если его очереди пусты, к процессору подключается поток простоя. Затем этот поток начинает сканировать очереди готовых потоков при других процессорах и ищет потоки, которые можно было бы выполнять на данном процессоре.

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