Бесконечный цикл, выполняемый в однопроцессорной системе

Процесс P1 выполняется в бесконечном цикле в системе, имеющей только один ЦП. Существуют также другие процессы, такие как P2, P3, которые ожидают получения ЦП, но находятся в очереди ожидания, так как P1 уже выполняется.

Программа примерно такая:

int main( )
{
  while(1);
}

Итак, каков будет конечный результат? Система рухнет?

Вероятный ответ: ЦП не выйдет из строя, и другие процессы могут выполняться в ЦП, поскольку каждый процесс имеет определенный квант времени, поэтому после истечения кванта времени P1 другие ожидающие процессы могут получить ЦП.

Но опять же, как ядро ​​​​(O/S) проверит, что квант времени истек, поскольку есть только один ЦП и процесс выполняется в бесконечном цикле? Потому что, если проверка должна произойти, для этого нужен ЦП, а ЦП уже занят процессом P1, который выполняется в бесконечном цикле.

Так что же происходит в этом случае?


person RajSanpui    schedule 17.08.2011    source источник
comment
Прерывания. Узнайте, как работают прерывания.   -  person Gabe    schedule 17.08.2011
comment
@Gabe: Чтобы прерывание работало, ему нужен таймер для запуска в отдельном потоке, верно? Но если есть только один процессор, как поток таймера и поток процесса будут работать параллельно? – kingsmasher1 0 сек. назад   -  person RajSanpui    schedule 17.08.2011
comment
Нет, прерывание по таймеру обычно генерируется какой-то другой микросхемой, не являющейся частью ЦП.   -  person Gabe    schedule 17.08.2011


Ответы (2)


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

Опять же, это действительно зависит от ОС, оборудования, с которым вы работаете, ... и без дополнительных подробностей это слишком общий вопрос, чтобы дать определенный ответ.

person Community    schedule 17.08.2011
comment
Прерывание по таймеру не требует процессора? - person RajSanpui; 17.08.2011
comment
Нет, прерывание таймера выполняется на процессоре, но может быть вызвано чем-то внешним по отношению к процессору. Unix на самом деле не сужает его. Наручные часы могут работать даже на версии unix. - person ; 17.08.2011

Процессор имеет то, что называется interutps. ОС (например, Windows) говорит процессору: - Используйте этот процесс в течение X времени, а затем говорите мне. Таким образом, процессор запускает таймер и работает над процессом. Когда время истекло, процессор отправляет прерывание и сообщает ОС, что время истекло. Теперь ОС решит, какой процесс будет работать дальше.

Надеюсь, что это ответ на ваш вопрос.

person EOG    schedule 17.08.2011
comment
Но если есть только один процессор, как поток таймера и поток процесса будут работать параллельно? - person RajSanpui; 17.08.2011