Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 操作系统如何抢占进程并重新获得控制?_Linux_Architecture_Linux Kernel_Operating System_Kernel - Fatal编程技术网

Linux 操作系统如何抢占进程并重新获得控制?

Linux 操作系统如何抢占进程并重新获得控制?,linux,architecture,linux-kernel,operating-system,kernel,Linux,Architecture,Linux Kernel,Operating System,Kernel,当进程在CPU上运行时,操作系统不会在后台运行,因为单核CPU一次只能执行一条指令。那么,操作系统是如何抢占进程的,它是由硬件完成的吗? 我在任何地方都找不到答案要理解操作系统如何重新控制进程,必须理解中断的概念。中断是发送到CPU的信号,表示当前进程必须停止(即中断),以便另一进程可以开始。在某种意义上,这是在硬件级别完成的,因为CPU中有专门的寄存器,中断位放在其中 当中断发生时,CPU寄存器的内容被存储,当前堆栈指针被保存,然后程序计数器被指向调度程序发出的下一条指令,该指令决定下一步开始

当进程在CPU上运行时,操作系统不会在后台运行,因为单核CPU一次只能执行一条指令。那么,操作系统是如何抢占进程的,它是由硬件完成的吗?
我在任何地方都找不到答案

要理解操作系统如何重新控制进程,必须理解中断的概念。中断是发送到CPU的信号,表示当前进程必须停止(即中断),以便另一进程可以开始。在某种意义上,这是在硬件级别完成的,因为CPU中有专门的寄存器,中断位放在其中


当中断发生时,CPU寄存器的内容被存储,当前堆栈指针被保存,然后程序计数器被指向调度程序发出的下一条指令,该指令决定下一步开始哪个进程——通常是中断进程。除非死锁,在死锁中,任何进程都无法取得进展-调度程序将返回到原始进程,并且该进程的执行上下文将重新加载到机器中(因为我们之前保存了它)。这种保存机器状态、执行新进程并返回原始进程的概念称为上下文切换。关于这一点的更多信息

谢谢,因此,如果我们运行类似循环调度的调度,将以固定的时间间隔(时间片)出现硬件中断?对硬件中断的这种解释是。。。。经济的。。中断将控制转移到处理程序。中断处理程序代码不必通过OS调度器退出。