Нет, программа не получает полный контроль над процессором. Если это так, то есть другие вещи, которые перестали бы работать, такие как клавиатура, мышь, жесткие диски и т. Д ..
К ЦП подключены линии прерывания, которые сообщают ему, когда поступает информация с устройства. Например, нажатие клавиши вызывает сигнал прерывания, который останавливает текущее выполнение и запускает обработчик прерывания.
Существует также внутренний таймер, который подключен как устройство, поэтому операционная система может настроить таймер на выдачу сигналов прерывания с определенной скоростью. Таким образом, операционная система всегда может вернуть управление из запущенного процесса через определенные промежутки времени.
Обычный процесс при обработке прерывания заключается в том, что элемент управления возвращается в работающую программу после завершения обработчика прерывания, но планировщик процесса может сохранить состояние одного процесса, восстановить другой процесс и позволить обработчику прерываний вернуться к этому процессу.
Планировщик также имеет другие возможности для переключения между процессами. Например, когда программа выполняет системный вызов для выполнения дискового ввода-вывода, планировщик пропускает запрос ввода-вывода на аппаратное обеспечение и сохраняет процесс в состоянии ожидания. Когда диск готов вернуть данные, он отправляет прерывание, поэтому планировщик может переключиться обратно на процесс, который ожидает данные.
(Однажды я написал программу, которая фактически взяла на себя полный контроль над компьютером и отключила все прерывания. Мне пришлось написать свои собственные обработчики для ввода с клавиатуры и мыши, и дисковый ввод-вывод вообще не работает в этом состоянии.)