假定票证为A:75和B:25的过程有2个。现在,如果彩票结果票号= 66,则意味着我们运行A。 对于非抢占式内核,这是可以的,因为A会一直运行到A完成为止,然后才不参与抽签。 但是,如果内核抢占并且选择了A,那么我们就不需要减少A所拥有的票证。
答案 0 :(得分:1)
我不确定我是否理解您在问题中提出的关注,但是我会尽力解决您的问题。我假设系统具有1个核心,并且每个进程具有 1个线程。
非抢占式:如果选择了66
,则A将运行直到它自动产生给调度程序为止。一旦调度程序控制了它,它将随机选择另一个故障单并运行相关的进程。因此,A可以立即再次运行,或者B可以运行。
抢占式:如果选择了66
,则A将运行直到它自愿屈服于调度程序或被抢占(例如,通过计时器中断)并赋予调度程序控制权。就像在非抢占版本中一样,调度程序将随机选择另一张票证并运行相关的进程,因此在这种情况下,A的运行机会为75/100 = 75%,B的运行机会为25/100 = 25%运行。
我假设您要问的是您如何在A运行时撤消A的票证,以免另一个内核上的调度程序选择它同时运行(即,彩票调度在多核上如何工作)系统?)。当调度程序选择故障单时,它可以简单地将进程的其他故障单标记为无效,或以适当的方式操纵故障单数据结构,以使调度程序无法选择该进程。应该选择进程的票证,同时同时将其他票证标记为无效(即,两个操作应该看起来像一个原子操作),并且在调度程序之前执行上下文切换到该过程。在调度程序重新获得该过程的控制权之后,应立即 将票证再次标记为有效。
当进程可以具有多个线程时,想法仍然相同。只是取决于调度程序的实现,以确定如何在进程的线程之间分配票证,以及在选择其中一个线程时要取走哪些票证。