我们在操作系统中常常会碰到CPU和输入输出等设备调度的题目,需要画出甘特图才能比较直观地看出每个进程不同进程之间的时序关系。这里分享一下甘特图的作图技巧,这种题目分两种,分别是可抢占优先权调度和不可抢占优先权调度。
可抢占优先权调度
这种情况非常简单,我们只需要从优先级最高的进程开始画,然后画优先级次高的进程……直到画完所有进程。
原因:由于可抢占,优先级高的进程需要某个设备的时候,必定是先分配给它的,优先级最高的应用可以无视其他进程,当做只有整个系统只有它一个进程。优先级次高的进程在优先级最高进程的基础上再分配给他设备,之后按照优先级从高到低画完所有进程。
例题(来自王道考研2020操作系统单科书)
先画优先级最高的P1进程
再画P2进程
最后画P3进程
不可抢占优先权调度
不可抢占可能对于操作系统实现上比较简单,但是对于画甘特图来说,其实并不简单。原因是我们无法像可抢占优先权调度那样逐一画出每个进程的甘特图,优先级高的进程由于无法抢占低优先级进程正在使用的设备必须等待,多个等待进程有需要选择优先级最高的,这样对于手画甘特图就带来了很大的复杂性。下面我介绍的方法其实就是模拟计算机调度的过程,只不过把这个过程总结出来,通过练习熟练掌握。主要分两步:调度和切换
1、设备
记录当前某个设备是空闲还是被某个进程占用,该进程需要有三个属性:进程名称,开始时间,运行时长
2、等待队列
记录当前某个设备的等待队列中的进程,队列中元素包含三个属性:进程名称,入队时间,运行时长
3、当前时刻(now)
第一步
若某一个设备在当前时刻(now)空闲,则从他的等待队列中选择入队时间小于now且优先级最高的进程选择调度,将该设备分配给它,它的开始时间为now
第二步
在设备中,选择正在工作的设备里,开始时间加上运行时长的和最小的值更新当前时刻。
第三步
将设备中,各个设备正在运行的设备如果等于当前时刻,则将它切换,通过进程名称,开始时间,运行时长等信息来画图,然后将该进程下一个对于设备的需求加入相应的等待队列,其入队时间为当前时刻。
第四步
重复第一步
例题(来自王道考研2020操作系统单科书)
过程步骤过于繁杂,直接给出最后结果