彩票调度 - 抢先 - 如何在选择流程后操纵彩票?

Lottery Scheduling - preemptive - How to manipulate the tickets after a process is choosen?

假设有 2 个进程的工单 A:75 和 B:25。现在如果抽签结果是彩票号码 = 66,那意味着我们 运行 A. 这对于非抢占式内核是可以的,因为 A 会 运行 直到 A 完成,然后才不会参与抽签。 但是如果Kernel是抢占式的,A被选中了,那我们是不是就不需要减少A的票数了。

我不确定我是否理解您在问题中提出的担忧,但我会尽力解决您的问题。我假设系统有 1 个核心并且每个进程有 1 个线程.

非抢占:如果选择了66,那么A将运行直到它自愿屈服于调度器。一旦调度程序获得控制权,它将随机选择另一张票和 运行 关联的进程。因此,A 可以立即再次 运行 或者 B 可以 运行.

Preemptive: 如果选择了 66,那么 A 将 运行 直到它自愿屈服于调度程序或被抢占(例如被定时器中断)和调度器被赋予控制权。就像在非抢占式版本中一样,调度程序将随机选择另一张票和 运行 关联的进程,因此在这种情况下,A 有 75/100 = 75% 的机会 运行ning 而 B 有25/100 = 25% 的几率 运行ning.

我假设您要问的是如何在 运行ning 时撤销 A 的票,这样它就不会被另一个核心上的调度程序同时选择到 运行时间(即彩票调度如何在多核系统上工作?)。当调度程序选择一个票时,它可以简单地将进程的其他票标记为无效或以适当的方式操作票数据结构,以便进程不能被调度程序选择。应该选择进程的票,其他票应该被标记为无效同时(即这两个操作应该看起来像一个原子操作)和之前 调度程序对进程执行上下文切换。在 调度程序从该进程重新获得控制权后,票据应立即再次标记为有效

当进程可以有超过 1 个线程时,这个想法保持不变。它只是归结为调度程序实现来确定如何在进程的线程之间分配票证以及在选择其中一个线程时要拿走哪些票证。