seegongsik
操作系统

CPU 调度 怎么工作

座位只有一个,等着的事却有好几件。先叫谁,决定了大家要等多久。

01

先叫谁

窗口只有一个,等着的人却有好几个。一次只能叫一个人,所以得决定先叫谁。是先来的人,是事情很快就办完的人,还是着急的人?
像这样决定叫号的顺序,就叫调度。CPU 前面也排着一队活儿,得有人决定先处理哪一个。
这和急诊室、银行窗口总在琢磨先叫谁,是同一个问题。

窗口等着正被叫

座位一个,等着的事好几件。决定叫的顺序。

调度,就是决定在等着的活儿里先处理哪一个。

02

顺序一变,等待也变

有三位一样的顾客:一位的事情长,两位的事情短。
上面一行按来的顺序叫。长的排在最前面,后面两个短的就得一直等到它办完。下面一行先叫短的。两个短的很快办完,只剩那个长的。
顾客和事情都一样,只是换了顺序,大家等待时间的平均值就变了。
把长的放在前面,后面每个人都得把那段长时间整个等完,所以平均值一下子就涨了。

来的顺序411平均等待 3.0短活儿先114平均等待 1.0

同样三个人,叫的顺序不同,平均等待就不同。

活儿的量一样,换了顺序,平均等待时间也会变。

03

亲手定一下顺序

有四位顾客在等,每人的事情长短不同。
换一换叫的顺序,下面马上显示大家等待时间的平均值。短的放前面,平均就降;长的放前面,平均就升。
来回换着试试,找出让平均值最低的顺序。
其实,每次都从剩下的里面先叫最短的那个,就是让平均等待最低的办法。

客人 1
4
客人 2
1
客人 3
3
客人 4
2
平均等待4.25
把短活儿越往前挪,平均就越低。自己挪一挪,找出最低的值。

每换一次顺序,就能看到平均等待怎么变。

把短的放前面,平均等待会降,但这并不总是正确答案。

04

快并不总是好

一直先叫短的,平均值会降。可是事情很长的那位顾客,轮次一再被往后推,可能要无休止地等下去。
所以还有别的办法:不把机会都给一个人,而是让大家一点一点轮着来,谁也不会被无限往后推。
不过轮得越勤,换位置的代价就越多。选快还是选公平,都没有免费的选择。
就像要立刻反应的视频通话和晚一点也无妨的大文件下载会被区别对待一样,不同情况下的权衡也不一样。

全给一个快,但有人一直等快公平轮着来公平,但有换的开销

短的优先很快,可长的可能一直被往后推。

降低平均值的快,和谁都不被往后推的公平,必须互相权衡。

05

用一张纸总结

只要记住三点。
第一,调度就是决定叫的顺序,因为座位只有一个,等着的事有好几件。
第二,换了顺序,平均等待就会变;把短的放前面,平均就降。第三,可正确答案不止一个:快和公平要互相权衡,轮得勤还要付出换位置的代价。
顺序定得再好,也不会凭空多出时间来。只是在决定把这些等待分给谁、分多少罢了。

一
调度就是定叫号的顺序。位子一个,等的活儿好几个。
二
换顺序就换了平均等待。短活儿放前面,平均就降。
三
没有唯一的最优解。快和公平要互相换,换得勤还有换的开销。

顺序改变平均值,快和公平要互相权衡。

一句话总结调度就是定好顺序来调节等待,需要选择适合情况的做法。
← 操作系统
如果有帮助,请支持我们