Понятно, что могут существовать различные алгоритмы планирования. И хотелось бы, чтобы они были универсальны, но реально этого не происходит. Чаще всего тот или иной алгоритм подходит к определенному классу задач (с одной стороны), а с другой зависит от поставленных целей при планировании.
К числу таких целей можно отнести следующие:
¾ справедливость (не должно быть ситуации, когда один процесс постоянно занимает процессор)
¾ эффективность (идеально процессор должен быть занят на 100%, реально – 40-90%)
¾ сокращение полного времени выполнения
¾ сокращение времени ожидания в состоянии готовность
¾ сокращение времени отклика (в интерактивных системах)
Независимо от поставленных целей планирования желательно также, чтобы алгоритмы обладали следующими свойствами:
· были предсказуемыми (одно и то же задание должно выполняться приблизительно за одно и то же время)
· были связаны с минимальными накладными расходами (например, при переключении контекста)
· равномерно загружали ресурсы в ВС (предпочтение тем процессам, которые буду занимать малоиспользуемые ресурсы)
· обладали масштабируемостью (при увеличении «нагрузки» не должны резко терять работоспособность)
Многие из приведенных выше целей и свойств алгоритмов являются противоречивыми. Улучшая работу алгоритма с точки зрения одного критерия, мы его ухудшаем с точки зрения другого. Приспосабливая алгоритм под один класс задач, мы тем самым дискриминируем задачи другого класса.