比例份额调度
比例份额调度
这种调度方式希望每一个工作都能获得一定比例的CPU时间。
基本概念
我们使用彩票数代表一个进程占有某个资源的份额。如果A进程占有70%的彩票数,B进程占有30%的彩票数,那么在抽奖的时候(决定执行哪个工作的时候),A进程获得运行的几率就越大。
由于抽奖的随机性,抽奖的次数越多,各工作的运行时间之比就越接近于彩票数之比。
彩票机制
彩票货币
彩票货币是彩票调度算法中引入的资源分配计量单位,类似于金融系统中的货币。不同场景可以使用不同的"货币"来分配CPU时间,并通过"汇率"进行价值转换。
-
多级资源控制:
- 系统级货币:控制全局资源分配
- 用户级货币:管理用户间的资源划分
- 应用级货币:调节应用内部的任务调度
-
灵活兑换机制:
- 1单位A货币 = X单位基础货币(通过汇率转换)
- 示例:生产环境1票=10系统票,测试环境1票=0.5系统票
-
动态调整能力:
- 可根据系统负载自动调整汇率
- 特权任务可通过"货币升值"获得更多资源
彩票转让
一个进程可以临时将自己的彩票交给另一个进程。
彩票通胀
利用通胀,一个进程可以临时提升或降低自己拥有的彩票数量。当然在竞争环境中,进程之间互相不信任,这种机制就没什么意义。一个贪婪的进程可能给自己非常多的彩票,从而接管机器。但是,通胀可以用于进程之间相互信任的环境。在这种情况下,如果一个进程知道它需要更多 CPU 时间,就可以增加自己的彩票,从而将自己的需求告知操作系统,这一切不需要与任何其他进程通信。
步长调度
在短时间的工作中,彩票调度可能会产生不正确的调度。于是便有了步长调度。
系统中的每一个工作都有自己的步长,这个值和彩票数成反比。我们利用一个大数除以彩票数得到步长。每次运行后,我们会让运行的工作在行程的基础上加上步长。
调度程序根据进程的步长以及行程值来确定调度哪个工作。优先选择目前拥有最小行程的进程。