Ath*_*dri 6 cpu operating-system process scheduler context-switch
如果有 10 个进程 P1,P2...P10,并由调度程序使用循环策略调度来访问 CPU。现在当进程P1正在使用CPU并且当前时间片已过期时,P1需要被抢占,P2需要被调度。但是既然P1正在使用CPU,那么谁抢占P1并调度P2呢?我们可能 Scheduler 会这样做,但是当 CPU 被 P1 占用时,调度程序如何运行呢?
这与 jcoder 所说的完全一样,但让我详细说明一下(并做出答案而不是评论)
基本上,当操作系统启动时,它会初始化一个中断向量,其中 CPU 在给定中断时调用适当的中断处理程序。
操作系统也会在启动时检查可用的硬件,并检测您的主板有 x 个计时器。
定时器只是使用给定时钟速度滴答的硬件电路,可以将它们设置为在给定时间后发送中断(每个定时器通常具有不同的精度,具体取决于其时钟速度和其他因素)
操作系统检测到定时器后,会设置其中一个定时器,例如每50ms发送一次中断;现在,每隔 50 毫秒,CPU 就会停止正在执行的任何操作,并调用中断处理程序(通常是调度程序代码),后者将检查当前正在运行的进程是什么,并根据调度策略决定是否保留它。
实际上,调度程序就像大多数操作系统一样,是一个被动的东西,仅在发生某些事件时才起作用。