цесс в среднем получает такую долю ресурса, какая доля билетов у него находится. Взаимодействующие процессы могут
обмениваться лотерейными билетами. Например, если клиент посылает запрос серверу и блокируется в ожидании, он может
предварительно передать все билеты серверу, чтобы ускорить получение ответа. Сервер, выполнив запрос, возвращает лоте-
рейные билеты.
Справедливое. Все предыдущие стратегии не учитывают, что многие процессы могут быть созданы одним и тем же пользо-
вателем. Т.о., если один пользователь создал несколько процессов для решения одной задачи, а другой –только один, то пер-
вый получит и большую часть процессорного времени, что не справедливо. Поэтому перед планированием можно обращать
внимание на хозяина процесса.
В системах реального времени время является самым важным критерием. Задача разделяется на несколько процессов, ка-
ждый из которых предсказуем, как правило это очень короткие процессы. При этом могут возникать внешние сигналы, как
периодические (с определенной частотой), так и непериодические. Может случиться так, что система не в состоянии обрабо-
тать все возникшие события за необходимое время. Если в систему поступает m периодических событий, событие i поступа-
ет с периодом Pi, и обрабатывается за Ci секунд, то все потоки могут быть обработаны только при следующем условии:
Системы, удовлетворяющие этому условию, называются планируемыми. В случае статических алгоритмов планирования
все решения планирования приняты заранее, до запуска системы. Во втором случае решения принима-
ются по мере функционирования системы. Статическое возможно только при наличии достоверной
информации о работе и временных ограничениях. Динамическое планирование не требует этого.
∑
=
≤
m
i
PiCi
1
1/
Основная проблема при диспетчеризации – это гарантия обслуживания, поскольку, например, при приоритетном планирова-
нии низкоприоритетные процессы могут бесконечно долго ожидать своей очереди. Более жестким требование является не
просто гарантия обслуживания, а обслуживание за указанный период времени или к указанному моменту.
Гарантировать обслуживание можно следующими способами:
- Выделять минимальную долю процессорного времени некоторому классу процессов, если по крайней мере один из них
готов к выполнению
- Выделять минимальную долю процессорного времени некоторому конкретному процессу, если он готов к выполнению
- Выделять столько процессорного времени готовому процессу, чтобы он мог завершить работу к указанному моменту вре-
мени
Производительность системы уменьшается в основном из-за затрат на переключение контекста и непродуманной системы
назначения квантов времени. Особенно велики затраты на переключение контекста в том случае, если прерывается процесс,
находящийся в КС, а другие при этом находятся в состоянии активного ожидания. Для повышения производительности при-
меняются следующие методы:
- совместное планирование, при котором все потоки одного приложения одновременно выбираются для выполнения про-
цессорами и одновременно снимаются с них:
- планирование. при котором находящиеся в КС процессы не прерываются, а активно ожидающие задачи не запускаются
пока КС не освободится
- планирование с учетом подсказок ОС, когда ОС сообщает пользователю о необходимости снятия или запуска какого-
либо процесса.
Рассмотрим потоки на уровне пользователя. Пусть есть 2 процесса, у каждого из них по три потока. Ядро не знает о сущест-
вовании потоков пользователя, выполняет обычное планирование, выбирает процесс и предоставляет ему время. Планиров-
щик потоков внутри процесса выбирает поток и запускает его. Если потоку требуется время, меньшее, чем выделенный
квант, он отработает и вернет управление планировщику потоков. Если нет – будет работать до конца выделенного кванта.
Т.о. в течение кванта времени могут быть запущены потоки по следующей схеме: А1, А2, А3, А1, А2, А3… В случае потоков
на уровне ядра, ядро выбирает не процесс, а поток, не беспокоясь о том, какому процессу этот поток принадлежит. В резуль-
тате цепочка запуска потоков может выглядеть так: А1, В1, А2, В2, А3, В3…, что невозможно на уровне пользователя. Од-
нако на уровне пользователя для переключения потоков требуется несколько машинных команд, тогда как для переключе-
ния потоков на уровне ядра требуется полное переключение контекста с заменой карты памяти и перегрузкой кэша. По-
скольку ядро знает, что при переключение от потока процесса А к потоку процесса В будет затрачено больше времени за
счет карты памяти и кэша, это может учитываться. Например, при наличии двух одинаково важных потоков, один из кото-
рых принадлежит текущему процессу, а другой – нет, логичнее запустить поток текущего процесса.
ОС UNIX. Ядро в традиционной системе UNIX является невытесняющим. Если процесс выполняется в режиме ядра, то он
не может быть прерван. Имеется два поля дескриптора процесса – p_nice и p_cpu. Первое назначается пользователем явно
или формируется системой программирования. Второе – это текущий приоритет, изменяемый диспетчером задач. Процес-
сам, выполняющимся в режиме задачи назначается приоритет ниже, чем для задач режима ядра. Например, для режима за-
дач диапазон приоритетов может быть 0-65, для режима ядра 66-95, а диапазон 96-127 используется для процессов с фикси-
рованным приоритетом для поддержки приложений реального времени. Процессу, ожидающему доступ к ресурсу, система
определяет приоритет сна, выбираемый ядром из диапазона системных приоритетов и связанный с событием вызвавшим
состояние ожидания. Поскольку этот приоритет из системного диапазона, то после активизации процесса вероятность запус-
ка его на выполнение высока. После отработки с таким приоритетом, восстанавливается сохраненный ранее приоритет зада-
чи, что снижает приоритет процесса. С каждым тиком таймера текущий приоритет активной задачи снижается на 1. Ежесе-
кундно ядро пересчитывает приоритет процессов режима задачи, готовых к запуску. Планировщик содержит несколько оче-
редей, каждая из которых соответствует 4 соседним приоритетам. Процесс с наивысшим приоритетом запускается всегда,
если только текущий процесс не выполняется в режиме ядра.