1

Скажем, у вас был приличный специализированный компьютер (работающий под управлением Windows) с двухъядерным процессором, но вы немного его подталкивали. Возможно ли, что Windows не обнаружит какой-либо ввод вообще за секунду или две.

Причина, по которой я спрашиваю, состоит в том, что я понимаю, что даже на компьютерах с более чем одним микропроцессором в процессоре операционная система все еще планирует процессы, чтобы каждый из них получал наносекунды вычислительной мощности. Разумеется, если процессор был достаточно занят, и вам не повезло, чтобы попытаться переместить мышь, когда процессор обрабатывал другой процесс, Windows не сможет обнаружить это?

Кроме того, с одноядерным процессором, если у операционной системы есть задача планирования процессов, как ЦПУ узнает, что вернул операционную систему назад, если один процесс был выполнен, если процесс не сообщает об этом?

1 ответ1

2

Обычно устройства ввода работают, когда они используются, генерируется прерывание (IRQ). (Единственными устройствами, не такими, как это, был бы старый игровой порт в стиле ПК, и я не уверен, как с этим справится операционная система.)

IRQ заставляют ядро ЦП немедленно перейти в другое место - обработчик IRQ должен затем сохранить состояние ЦП, обработать устройство (например, перехватить ввод и сообщить о нем через любой механизм ОС), а затем вернуться из прерывания.

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

Windows обрабатывает прерывания через нечто, называемое "отложенным вызовом процедуры" - она делает минимум, необходимый в этом "прерванном" состоянии, чтобы подтвердить запрос устройства, а затем передает оставшуюся обработку фактическому ответственному драйверу устройства, который принимает заботиться об этом, когда планировщик находит это удобным или необходимым.

Поэтому из-за этого Windows должна подтверждать каждый вызванный устройством IRQ, если он не застрял где-то в прерванном состоянии из-за неисправного драйвера, неисправного устройства или серьезного повреждения двоичных файлов операционной системы. DPC, которые фактически заставляют Windows делать что-то интересное с запросом устройства, могут быть задержаны.

Общий способ для операционной системы заставить процессор отказаться от процессора - это иметь аппаратный таймер, который, когда он заканчивается, вызывает IRQ. IRQ того же типа, что и описанный выше. IRQ всегда заставляют процессор переключаться в режим ядра. Таким образом, в этот момент ядро имеет контроль и может переключиться на другой процесс. Без этого механизма вы полностью зависите от процесса, который сообщит операционной системе, когда он будет выполнен, и это то, что называется "совместная многозадачность", а не "упреждающая многозадачность".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .