Бесконечный цикл, выполняющийся в однопроцессорной системе - PullRequest
1 голос
/ 17 августа 2011

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

Программа, что-то вроде:

int main( )
{
  while(1);
}

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

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

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

0 голосов
/ 17 августа 2011

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

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

...