Управление процессами. Переход процесса из состояния в состояние. Операции над процессами, страница 3

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

Совместная многозадачность требует от разработчиков приложений построения программ таким образом, чтобы они сами способствовали четкой работе системы. При таком подходе планировщик может переключать задания только после того, как текущий выполняющийся процесс сам освободит процессор. При этом, если текущий процесс вздумает заняться вычислением числа пи с точностью до пяти тысяч знаков после запятой, планировщик будет бессилен что-либо сделать. Хорошая практика программирования для систем совместной многозадачности состоит в том, что приложения должны регулярно возвращать процессор в распоряжение ОС – это называется уступка управления (yielding).

Осутствие вытеснения в Windows 3.x во многом облегчало жизнь разработчикам ОС и прикладным программистам. При разработке системы не было необходимости учитываь возможность вытеснения процесса в то время, как выполняется системный код. Представьте себе, что у вас работают два приложения, каждое из которых время от времени использует последовательный порт. Если бы одно из них было бы вытеснено в процессе открытия порта, то пришлось бы принимать защитные меры на тот случай, если второе приложение тоже захочет открыть порт.

Диспетчеры Windows

Внутри диспетчера Windows работают два диспетчера: основной (primary scheduler), который отвечает за вычисление приоритетов потоков и диспетчер квантования (timeslice scheduler), который занимается расчетами, необходимыми для выделения квантов времени. По сути дела, диспетчер квантования решает, какой процент доступного процессорного времени какому потоку выделить.

Диспетчеризация организована следующим образом:

1.  Основной диспетчер просматривает все потоки системы и расчитывает для каждого из них приоритет выполнения (execution priority), который представляет собой целое число от 0 до 31.

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

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

4. 

32 разрядное приложение

 
Потоки работают. По умолчанию, основной диспетчер заново расчитывает приоритеты каждые 20 (50) миллисекунд.

 


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

Операции над процессами.

Системы, управляющие процессами, должны иметь возможность выполнять определенные операции над процесами, в том числе:

n  создание (образование) поцесса; (create a process)

n  уничтожение процесса; (destroy a process)

n  изменение приоритета процесса;

n  блокирование процеса; (block process)

n  пробуждение (разблокирование) процесса;

n  запуск (выбор) процесса.

Создание процеса состоит из многих операций, включая:

n  присвоение имени этому процессу;