В многозадачной операционной системе ОС не должна делать ничего настолько экстремального, как полная остановка процессора вообще или заполнение времени, которое этот процесс собирался использовать другими инструкциями. Это может сделать что-то бесконечно проще. Он может просто не планировать выполнение задачи вообще.
В этом весь смысл многозадачной операционной системы. Если все задачи должны запускаться одновременно, то ОС переключает одну из них на процессор, позволяет ей работать в течение некоторого времени, затем меняет следующую задачу и продолжает до тех пор, пока все задачи, которые должны быть выполнены, не выполнят свои задачи. ,
Когда задача сигнализирует о том, что она хочет поспать какое-то время или ждать нажатия клавиши, то, что она фактически говорит операционной системе, - don't bother swapping me onto the processor unless time X has passed
или если don't bother running me unless you have event X waiting for me to action it
.
По сути, в ОС имеется длинный список задач, которые необходимо выполнить, и для каждой из них будет дескриптор "ожидание события". Любые задачи, которые готовы к выполнению, можно запланировать, а любые задачи, которые не будут выполнены, просто пропустить, просто так.
Если нет буквально ни одной задачи на всех запускаемых на процессоре в определенном срезе времени , то операционная система планирует в « Idle » задачу , которая будет на самом деле H ЛТ ЦП и сказать , что это не исполнять инструкции , пока он не получает разбудил, как правило , каким-то прерыванием Использование этого метода планирования времени "не работает" хорошо согласуется с парадигмой многозадачной операционной системы.
Чтобы снова проснуться, процессор получает "тики" прерывания через RTC (часы реального времени) и дополнительно может настроить HPET (высокоточный таймер событий) для запуска прерывания через определенный интервал времени. Это позволяет ОС останавливать процессор на очень точные промежутки времени, а затем выводить процессор из спящего режима, чтобы снова начать обработку задач.