OS学习(六)——进程调度(彩票机制)

调度:比例份额

        调度程序的最终目标,是确保每个工作获得一定比例的 CPU 时间,而不是优化周转时间和响应时间。 

彩票数代表份额:

彩票数(ticket)代表了进程(或用户或其他)占有某个资源的份额。

很好理解:举个栗子

eg.A有75张彩票,B有25张彩票,理想情况下我们希望A占用CPU75%的时间,B则是25%。

不定时(例如一个时间片)地抽取一个随机数(从0~99选取)决定运行A或B。

实际结果却不一定是A75%,B25%,这相当于概率和频率的区别。

随机性相对于传统方法的优势:

(1)可避免奇怪的边角情况

(2)很轻量,几乎不需要记录任何状态

(3)快

彩票机制

(1)彩票货币(ticket currency)

简单说来,先由用户按喜好分配,分配完后系统再根据比例分配,举个栗子就明白了。

eg.

A和B各有100张彩票,A有两个工作,B只有一个工作。A分配给两个工作各500张彩票(A开心就好),B给他的一个工作10个彩票。

系统分配时,根据A:B=1:1来进行分配,给A的两个工作各全局货币50张,B100张。

(2)彩票转让(ticket transfer)

进程临时将自己的彩票转让给另一个进程,多见于客户端和服务端。

当客户端想要加速服务端处理自己的请求,它可以将自己彩票转让给服务端,执行结束后服务端再还给客户端。

(3)彩票通胀(ticket inflation)

进程临时提升或降低自己的彩票数量,而不需要与其他任何进程通信(注:只有在进程间相互信任的情况下才有用)。

若不信任,一个贪婪进程可以给自己很多彩票从而接管CPU。

不公平指标U(unfairness metric)

两个工作完成时刻相除得到 U。

我们的目标是: 完美的公平调度程序可以做到 U=1。

当工作执行时间很短时,平均不公平度非常糟糕。

上图为两个工作运行时间从1~1000时U的变化。

步长调度

一个确定性的公平调度算法。

每个工作都有自己的步长,与票数成反比,计算方式为一个大数除以票数。每个进程都有计数器(行程值)记录总步长。

当需要进行调度时,选择目前拥有最小行程值的进程,并且在运行之后将该进程的行程值增加一个步长。举个栗子。

eg.A,B,C的票数分别为100,50,250。用10000除以它们得到步长100,200,40。

初始行程值ABC均为0,假设选择A首先运行,行程值(A)=0+100=100。之后在BC(它们行程值最小)选择,假设选择了B,行程值(B)=0+200=200。然后选C,行程值(C)=0+40=40。因为C仍是最小的,接着选C……此过程会无限运行下去。

上图可知,A运行2次,B运行1次,C运行5次,正好是票数的比例。

彩票调度相对于步长调度的优势

不需要全局状态。

若新进程在步长调度中途加入,该如何设置其行程值?设置为0的话就会独占CPU。而彩票调度就没有这样的烦恼,只需要再新加入后更新全局总票数就行了。

缺陷

两种方式都不能很好地适合 I/O,最难的票数分配问题并没有确定的解决方式。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值