在只有一个CPU和一个内核的系统中编写带while(1)循环的简单程序会发生什么?

时间:2017-04-14 21:18:01

标签: operating-system

系统只是冻结是没有意义的,但会发生什么?

3 个答案:

答案 0 :(得分:1)

操作系统系统调度CPU计时器。当定时器熄灭时,它会触发中断。这导致处理器进入内核模式并调用定时器中断处理程序。这是操作系统进行常规处理的地方。在处理中断时,当前进程被“中断”。无限循环不会阻止CPU的定时器中断。

在大多数操作系统上,进程都有一个时间片来执行。一旦时间片到期,操作系统就会安排一个新进程。处理调度发生在定时器中断处理程序中。

在某些操作系统上,如果可以运行高优先级进程,则进程可能会在其时间片到期之前中断。

无限循环只会浪费分配给该过程的时间。

答案 1 :(得分:0)

所有现代操作系统都是多线程的,操作系统将执行上下文切换,而其他操作系统(许多操作系统线程之一)将运行一段时间。然后它将上下文切换回while(1)一段时间,然后重复此操作直到你进入任务管理器并终止进程。

https://en.wikipedia.org/wiki/Context_switch

答案 2 :(得分:0)

while(1)循环不会阻止来自外围设备的硬件中断,包括磁盘,NIC,鼠标,KB,tmier等。

该程序的一个线程在while上循环,直到更高优先级的线程准备好并且它被抢占。

如何,为何以及何时发生这取决于操作系统设计。在硬件/驱动器信令(即,本质上是硬件中断)上准备就绪的高优先级线程将在其I / O变得可用时抢占循环线程。许多操作系统对这些信令准备就绪的线程应用临时优先级提升,因此等待网络数据的相同优先级的另一个线程将抢占“循环”。线程并在数据到达时立即运行。

由于休眠间隔到期或类似情况而变为就绪状态的其他相同线程通常会以定时器中断间隔分配给可用CPU。