先来先服务调度算法(FCFS):
-
概述:
- 先来先服务调度算法(First-Come,First-Served,FCFS) 是一种基本的进程调度算法,其核心思想是按照作业到达时间的先后顺序进行调度
-
流程:
- 当一个作业到达时,将其放入就绪队列的末尾
- 当前执行的作业执行完毕后,从就绪队列中选择队首的作业进行运行
- 重复步骤 2,直到所有作业都执行完毕
-
优点:
- 实现简单,公平性好
- 由于按照作业到达的先后顺序进行调度,所以所有作业都可以得到执行,不存在作业 "饥饿" 问题
-
缺点:
- 如果有一个长作业在队首,那么后面的作业就必须等待很长时间才能得到执行,导致平均等待时间较长
- FCFS 调度算法无法适应作业的不同执行时间,执行时间较长的作业会导致整个系统的响应时间变长
-
总结:
- FCFS 调度算法时一种简单实现的调度算法,公平性较好
- 但在实际应用中需要注意长作业的等待时间较长的问题
-
示例:
- 有三个作业按照下表的时间提交给系统
作业号 提交时刻 作业长度 1 10:00 2小时 2 10:06 1小时 3 10:15 0.25小时 - 按照下先来服务的原则,可以计算出各个作业在系统中的开始执行时刻、结束时刻、周转时间。
- 周转时间 = 作业结束时间 - 作业提交时间
- 带权周转时间 = 周转时间 / 作业长度
作业号 提交时刻 作业长度 开始时刻 结束时刻 周转时间 带权周转时间 1 10:00 2小时 10:00 12:00 2 1 2 10:06 1小时 12:00 13:00 2.9 2.9 3 10:15 0.25小时 13:00 13:15 3 12
- 单个作业的平均周转时间和带权周转时间为:
-
T =(2.00+2.90+3.00)/ 3 = 2.63(小时)
-
W =(1+2.9+12)/ 3 = 5.30(小时)
-
- 有三个作业按照下表的时间提交给系统
短作业优先调度算法(SJF):
-
概述:
- 短作业有限调度算法核心思想是优先执行时间较短的作业
- 短作业指的是估计执行时间短的作业,也可以理解为剩余执行时间短的作业
-
流程:
- 按照作业的执行时间对待执行的作业队列进行排序,即将估计执行时间较短的作业排在前面
- 选择执行时间最短的作业来运行,直到该作业执行完毕或者被阻塞
- 当作业执行完毕或者被阻塞时,从待执行作业队列中选择下一个执行时间最短的作业来运行
- 重复步骤 2、3,直到所有作业执行完毕
-
优点:
- 可以最大程度地减少平均等待时间,使得作业能够快速执行完毕
-
缺点:
- 该算法可能会导致长作业等待时间过长,造成作业 "饥饿" 的情况
-
示例:
- 根据上面的例子利用短作业优先算法计算平均周转时间和平均带权周转时间
作业号 提交时刻 作业长度 调度次序 开始时刻 结束时刻 周转时间 带权周转时间 1 10:00 2小时 1 10:00 12:00 2 1 2 10:06 1小时 3 12:15 13:15 3.1 3.1 3 10:15 0.25小时 2 12:00 12:15 2 8 - 平均周转时间 T 和平均带权周转时间 W 为:
- T =(2.00+3.10+2.00)/ 3 = 2.37(小时)
-
W =(1+2.9+12)/ 3 = 4.03(小时)
- 根据上面的例子利用短作业优先算法计算平均周转时间和平均带权周转时间
高响应比优先调度算法(HRRN):
-
概述:
- 高响应比优先调度算法(High Response Ratio Next,简称 HRRN) 是一种动态优先级的进程调度算法,其核心思想是根据作业的相应比来确定执行顺
-
流程:
- 当一个作业到达时,计算其响应比。响应比定义为作业等待时间加上作业执行时间除以作业执行时间,即 (等待时间 + 作业长度) / 作业长度
- 将计算得到的响应比最高的作业放入就绪队列
- 当前执行的作业执行完毕后,从就绪队列中选择响应比最高的作业进行运行
- 重复步骤 2、3,直至所有作业执行完毕
-
优点:
- 能够根据作业的等待时间和执行时间动态调整优先级,使得等待时间较长的作业能够优先得到执行,提高系统的响应速度
-
缺点:
- 计算响应比需要动态获取作业的等待时间和执行时间,增加了系统的开销
- 如果作业的执行时间很短,那么相应比就会很高,导致其他作业长时间等待,可能会出现 "长作业优先" 问题
-
示例:
- 按响应比高者优先算法调度算法,计算出它们的平均周转时间和平均带权周转时间
作业号 提交时刻 运行长度 1 8:00 2小时 2 8:30 0.5小时 3 9:00 0.1小时 4 9:30 0.2小时 - 当作业 1,做完后,其它三个作业的响应比为:
-
R2p = 1 + 已等待时间/作业长度 = 1 + 1.5/0.5 = 4
-
R3p = 1 + 1.0/0.1 = 11
-
R4p = 1 + 0.5/0.2 = 3.5
-
-
故作业 3 的响应比最大,作业 1 完成后要运行作业 3
-
作业 3 完成后,时间为 10:16,这时候再看作业 2 和 4 的响应比哪个高:
-
R2p = 1 + 已等待时间/作业长度 =1 + 1.6/0.5 = 4.2
-
R4p = 1 + 0.6/0.2 = 4
-
-
所以先调度作业 2 到内存中,作业 2 运行完毕,结束时间为 10:36,最后调入作业 4 到内存运行即可。
-
作业调度的次数为:作业 1、作业 3、作业 2、作业4
作业号 提交时刻 运行长度 调度次序 开始时刻 结束时刻 周转时间 带权周转时间 1 8:00 2小时 1 8:00 10:00 2 1 2 8:30 0.5小时 3 10:06 10:36 2.1 4.2 3 9:00 0.1小时 2 10:00 10:06 1.1 11 4 9:30 0.2小时 4 10:36 10:48 1.3 6.5 -
4 个作业的平均周转时间和平均带权周转时间为:
-
T =(2+2.1+1.1+1.3)/ 4 = 1.625(小时)
-
W =(1+4.2+11+6.5)/ 4 = 5.675(小时)
-
- 按响应比高者优先算法调度算法,计算出它们的平均周转时间和平均带权周转时间
时间片轮转调度算法(RR):
-
概述:
- 时间片轮转调度算法(Round Robin Scheduling) 是一种基于时间片的进程调度算法,指在公平地分配 CPU 时间给各个就绪程序
-
流程:
- 将所有就绪程序按照到达时间地顺序放入就绪队列
- 设定一个固定的时间片大小,通常为几十毫秒
- 从就绪队列中选择一个进程,分配给它们一个时间片的 CPU 时间
- 若该进程在时间片结束前完成任务,则该进程被移出队列,否则将其放到队列的末尾等待下一次调度
- 重复步骤 3、4,直至所有作业执行完毕
-
优点:
- 能够公平地分配 CPU 时间给每个就绪地进程,避免某个进程独占 CPU 资源,从而提高系统的可响应性和吞吐量
-
缺点:
- 如果时间片太短,频繁进行上下文切换会带来较大的开销
- 如果某些进程的执行时间较长,会导致其他进程长时间等待,可能会出现 "长作业效应" 问题
-
总结:
- 时间片轮转调度算法是一种能够公平分配 CPU 时间的调度算法,适用于多道程序环境。
- 但需要注意时间片大小的设置以及长作业效应问题
-
示例:
- 5 个进程几乎同时到达,预期运行时间分别为 10、6、2、4、8个时间单位。按照时间片轮转调度算法计算任务的平均周转时间(假设时间片大小为 2 个时间单位)。
进程号 P1 P2 P3 P4 P5 备注 剩余运行时间 10 6 2 4 8 第一趟 2 4 6 8 10 P3运行完 剩余运行时间 8 4 0 2 6 第二趟 12 14 16 18 P4运行完 剩余运行时间 6 2 0 0 4 第三趟 20 22 0 24 P2运行完 剩余运行时间 4 0 0 0 2 第四趟 26 28 P5运行完 剩余运行时间 2 0 0 0 0 第四趟 30 P1运行完 - 时间片调度顺序为:
平均值 周转时间 10 16 18 22 30 19.2 带权周转时间 1 2.67 9 5.5 3.75 4.384
- 5 个进程几乎同时到达,预期运行时间分别为 10、6、2、4、8个时间单位。按照时间片轮转调度算法计算任务的平均周转时间(假设时间片大小为 2 个时间单位)。