В контексте планирования процессов, вмешивается ли операционная система после окончания каждого временного среза/кванта? Например, если компьютер простаивал и поступило 4 задачи: t1, t2, t3 и t4, и они были запланированы с использованием метода «первым пришел — первым обслужен», мы обычно считаем, что t1, t2, t3, t4 находятся в ЦП, но разве это не упрощение? Потому что t1, ОС, t2, ОС, t3 ОС t4 — это то, что на самом деле произойдет? Если это правда, то ОС вмешивается после каждого временного среза (т. е. кванта), разве это не очень неэффективно?
решение1
Не обязательно. Обычно планировщик понижает динамический приоритет задачи после истечения ее кванта, но если она все еще является задачей с наивысшим приоритетом, то она получает другую. В общем, да, когда задача выполняется достаточно долго, ОС берет управление на себя и переключается на другую. Почему это должно быть неэффективным?
решение2
Я считаю, что в современных операционных системах временные интервалы имеют переменную длину. Планировщик вызывается после обслуживания каждого прерывания (клавиатура, мышь, сенсорный экран, сеть, завершение передачи диска, ...), а также прерываний таймера.
Грубо говоря, планировщик предназначен для оценки скользящего среднего времени между системными вызовами блокирования процесса. Перед тем как планировщик передаст управление процессу X, он устанавливает таймер, который будет прерывать процесс в момент времени, немного больший, чем скользящее среднее время процесса X. Если планировщик хорошо справляется с угадыванием времени до следующего системного вызова блокирования, то большая часть процессов фактически добровольно освободит ЦП, выполнив системный вызов блокирования.
Цель состоит в том, чтобы заставить интерактивные процессы выполнить немного вычислений, сделать блокирующий системный вызов для запроса некоторых данных с медленного устройства, а затем перепланироваться, как только данные будут возвращены. Если планировщик должен выбрать между планированием между двумя процессами, то при прочих равных условиях он отдаст предпочтение процессу, который чаще делает блокирующие системные вызовы. Это имеет тенденцию максимизировать количество одновременных блокирующих запросов ввода-вывода, что улучшает общую пропускную способность системы.