Вытесняющие и не вытесняющие алгоритмы диспетчеризации

Слайд 2

Алгоритмы диспетчеризации Диспетчеризация без перераспределения процессорного времени, то есть не вытесняющая

Алгоритмы диспетчеризации

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

(non-preemptive multitasking) – это такой способ диспетчеризации процессов, при котором активный процесс выполняется до тех пор, пока он сам, что называется «по собственной инициативе», не отдаст управление диспетчеру задач для выбора из очереди другого, готового к выполнению процесса или треда.
Дисциплины обслуживания FCFS, SJN, SRT относятся к не вытесняющим.
Диспетчеризация с перераспределением процессорного времени между задачами, то есть вытесняющая многозадачность (preemptive multitasking) – это такой способ, при котором решение о переключении процессора с выполнения одного процесса на выполнение другого процесса принимается диспетчером задач, а не самой активной задачей.
При вытесняющей многозадачности механизм диспетчеризации задач целиком сосредоточен в операционной системе (от программиста, разрабатывающего приложения ничего не требуется, чтобы поддерживать многозадачность). При этом операционная система выполняет следующие функции:
– Определяет момент снятия с выполнения текущей задачи
– Сохраняет ее контекст в дескрипторе задачи
– Выбирает из очереди готовых задач следующую
– Запускает ее на выполнение, предварительно загрузив ее контекст
Дисциплина RR и многие другие, построенные на ее основе, относятся к вытесняющим.
Слайд 3

Особенности алгоритмов диспетчеризации При не вытесняющей многозадачности механизм распределения процессорного времени

Особенности алгоритмов диспетчеризации

При не вытесняющей многозадачности механизм распределения процессорного времени распределен

между системой и прикладными программами. Прикладная программа, получив управление от операционной системы, сама определяет момент завершения своей очередной итерации и передает управление супервизору ОС с помощью соответствующего системного вызова.
Для пользователей это означает, что управление системой может теряться на некоторый произвольный период времени, который определяется процессом выполнения приложения. Если приложение тратит слишком много времени на выполнение какой-либо работы (например, на форматирование диска), пользователь не может переключиться с этой задачи на другую задачу (например, на текстовый или графический редактор, в то время как форматирование продолжалось бы в фоновом режиме). Эта ситуация нежелательна, так как пользователи обычно не хотят долго ждать, когда машина завершит свою задачу.
Поэтому разработчикам ПО для ОС с не вытесняющей многозадачностью приходится возлагать функции диспетчера задач «на себя», т.е. программы должны выполнять свои задачи частями. Например программа форматирования будет передавать управление системе после форматирования одной дорожки диска и ждать, пока ее снова не поставят на выполнение.
Такой подход существенно затрудняет разработку программ и требует высокой квалификации программиста.