cpu的虚拟化(下)———— 调度

前言

前两篇介绍了进程与上下文,而这篇介绍的对象是调度器,因为我也不懂调度器的原因,所以,这篇笔记只谈调度器的工作过程,不涉及调度器的具体实现。笔记中若有错漏,望不吝指正。

调度器的一天

在一个清凉的午后,job饭馆(CPU)来了一群气势汹汹的饿汉(进程),店小二(调度器)立马为这些不速之客安排饭桌,可难为人的是这家店只有一张桌子,这下店小二不知如何是好了,店长这时出来给小二出了个主意,让这些饿汉按先来后到的顺序进餐(调度方式),这样以来每个人都可以吃到饭。小二觉得这是一个好主意,便胆战心惊去与他们商量,一聊后发现这些人虽然看起来凶凶的,但极好交流。一问后得知,原来他们只是被繁忙的工作折腾坏了身体,小二心想原来是同道啊! 随后小二便张罗了起来。

可是,渐渐的,小二发现了不对的地方,一个是有的客人吃饭极快(运行时间短的进程),而有的吃饭极慢(运行时间长的进程)。另一个是有的客人吃饭就吃饭,他竟然还用手机继续工作(等待外部资源),小二心中顿时便五味杂陈,何至于斯!心情平复之后,小二发现了一个问题,这些占用餐桌而去用手机的人不是在浪费资源吗?后面还有那么多的客人等着呢。这是聪明的店长再次现身了,他告诉小二,对于这些吃饭的时候工作的人,你就把他拎到一边,让后面的客人用餐。小二茅塞顿开,心想不愧能是做店长的人。在之后,对于那些在吃饭过程中做其他事的人,小二就把他们拎到一边,同时也把他们未吃完的菜保存好(保存上下文),等他们做完其他事之后,再让他们去排队。就这样,在job饭店中出现了两条队伍:一条是用餐的(就绪队列),另一条是中途做其他事的(阻塞队列)。

最后,我要说明的是在以上的例子中只是对调度器的工作过程做了一个简陋的类比,有许多复杂的部分被隐藏了。