打破循环调度中的平局



我对循环CPU进程调度的一个基本概念感到困惑,即短期调度器将进程添加到就绪队列中。

如果系统中有3个进程P0、P1和P2,并且在5秒时P1发生上下文切换,同时P2到达(即在第5秒)。在这种情况下,哪个进程将首先插入就绪队列,P1还是P2?在这两种情况下,总体平均等待时间可能没有差异,但流程的个别等待时间会有所不同。

P1和P2不可能同时添加到就绪队列中。它们的添加必须有一定的顺序(P1在P2之前添加,或者P2在P1之前添加),因为当您想将进程添加到就绪队列时,必须同步对就绪队列的访问,以避免损坏队列。在单核心系统上,您可以通过在修改队列时禁用中断来实现这一点。在多核系统上,可以通过锁定和禁用中断的组合来实现这一点,具体取决于内核的实现。

作为一个单核的例子,假设一个定时器中断到达,导致您抢占P1。当收到定时器中断时,您可以禁用中断。当您将P1添加到队列中时,P2不可能变为可用,无论是由于P2的某些I/O完成,还是用户启动P2等原因。中断已被禁用,因此在将P1添加至队列并启用中断之前,内核不会受到任何与P2有关的事件的困扰。P2也是如此——如果您将P2添加到队列中,并且计时器中断到达,该中断将导致P1被抢占,则计时器中断将被忽略,直到P2被添加到队列。

P1将因其老化而获得执行的第一次机会。而P2将在最后一个执行的进程之前添加到队列的末尾。

这意味着P1将开始执行,P2将被添加到队列的末尾,就在最后执行的进程(即P0)之前。因此,您的就绪队列将类似于P1、P2、P0,其中P1当前正在执行。

最新更新