【问题标题】:An infinite loop executing in a single processor system在单处理器系统中执行的无限循环
【发布时间】:2011-08-17 06:38:38
【问题描述】:

进程 P1 在只有一个 CPU 的系统中无限循环执行。还有其他进程,如 P2、P3 正在等待获得 CPU,但由于 P1 已经在执行,因此处于等待队列中。

程序是这样的:

int main( )
{
  while(1);
}

那么,最终的结果是什么?系统会崩溃吗?

可能的答案是,CPU 不会崩溃,其他进程可以在 CPU 中执行,因为每个进程都有特定的时间片,所以在 P1 的时间片到期后,其他等待的进程可以获得 CPU。

但同样,内核(O/S)将如何检查时间片是否已过期,因为只有一个 CPU 并且进程在无限循环中运行?因为如果必须进行检查,它需要 CPU 来执行,而 CPU 已经被无限循环执行的进程 P1 占用。

那么在这种情况下会发生什么?

【问题讨论】:

  • 中断。了解中断的工作原理。
  • @Gabe:要让中断工作,它需要一个计时器在单独的线程中运行,对吧?但是如果只有一个处理器,定时器线程和进程线程如何并行运行呢? – kingsmasher1 0 秒前
  • 不,定时器中断通常由不属于 CPU 的其他芯片产生。

标签: process infinite-loop processor


【解决方案1】:

这实际上取决于您使用的操作系统和硬件。中断可以将代码的执行转移到另一个位置(中断处理程序)。这些中断可以是软件(程序中的代码可以调用这些中断处理程序)或硬件(cpu 在其一个引脚上接收信号)。在主板上,您有一个称为可编程中断控制器 (PIC) 的东西,它可以产生稳定的中断流(定时器中断)。操作系统可以使用定时器中断处理程序来停止正在运行的进程并继续另一个进程。

同样,这实际上取决于操作系统、您正在使用的硬件......如果没有更多细节,这个问题太笼统了,无法给出明确的答案。

【讨论】:

  • 定时器中断不需要CPU?
  • 不,定时器中断在 cpu 上执行,但可以由 cpu 外部的东西触发。 Unix 并没有真正缩小范围。手表甚至可以运行 unix 版本。
【解决方案2】:

处理器有一个叫做interutps的东西。操作系统(如 Windows)告诉处理器: - 使用此过程 X 次,然后告诉我 所以处理器启动计时器并处理进程。当时间过去处理器发送中断并告诉操作系统时间过去了。操作系统现在将决定接下来将运行哪个进程。

希望这能回答你的问题。

【讨论】:

  • 但是如果只有一个处理器,定时器线程和进程线程如何并行运行呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
相关资源
最近更新 更多