Не могли бы вы помочь с реальными приложениями невытесняющего планирования, поскольку, похоже, не существует операционных систем, использующих это планирование, это только для теории или есть какие-либо работающие операционные системы, которые используют это планирование? Если какие типы задач предназначены для обработки этих операционных систем, есть ли какие-либо задачи, специфичные для конкретной задачи.
Существуют ли какие-либо операционные системы, использующие невытесняющее планирование? Если да, то какие задачи они выполняют?
Ответы (2)
Во-первых, важно понимать, что упреждение — это спектр. Вы можете себе представить, что на одном конце спектра находится какая-то форма хардкорного вытесняющего планирования, а на другом конце — какая-то форма хардкорного не вытесняющего планирования. Между этими двумя крайностями существует целый ряд вариантов, некоторые из которых существуют в виде исследовательских предложений, а другие пробились в операционные системы производственного уровня.
Упреждающее планирование позволяет системе работать с высокой надежностью при выполнении потенциально ненадежного кода или кода с ошибками, а также повышает общую скорость отклика системы. Вот почему все современные большие операционные системы в основном используют вытесняющее планирование (с множеством вариаций).
Однако для платформ с ограниченным объемом памяти и/или платформ реального времени проводилось и все еще продолжается значительное количество исследований преимуществ и недостатков вытесняющего планирования (PMT) и не вытесняющего планирования (также называемого совместное планирование или CMT). Упреждение обычно снижает предсказуемость времени выполнения задач. То есть время выполнения каждой задачи может либо ухудшиться, либо улучшиться. В основном это связано с двумя причинами. Во-первых, разные задачи могут работать с разными данными. Таким образом, когда задача будет запланирована для следующего запуска, данные, к которым она будет обращаться, вытеснят из кэша ЦП некоторые или все данные, используемые ранее запланированной задачей, запуск которой, возможно, все еще необходимо запланировать. Во-вторых, современные ЦП используют ряд методов динамического прогнозирования/упреждения (предсказание ветвления, предварительная выборка и т. д.). Поведение различных задач может снижать или повышать эффективность этих методов в зависимости от того, насколько похожи задачи, и вызывать снижение производительности при каждом переключении контекста.
Невытесняющее планирование может снизить потребление памяти. Если задача состоит из нескольких фаз, она может выделить память только для завершения одной фазы, а затем высвободить любую память, которая не понадобится на более поздних фазах, и передать контроль, чтобы разрешить выполнение других задач. Обычно это невозможно при упреждающем планировании.
Планирование без вытеснения естественно поддерживает взаимное исключение без каких-либо дополнительных сложностей или снижения производительности. Этого можно достичь, если задачи не будут выполняться, пока они выполняются во взаимоисключающем разделе кода. Механизмы блокировки необходимы для поддержки взаимного исключения с упреждающим планированием.
По этим причинам в системах с ограниченной памятью и/или в системах реального времени широко используются методы невыгодного планирования. В Википедии есть список операционных систем реального времени, многие из которых поддерживают не приоритетное планирование. .
Например, Windoze до NT.