阅读本文应了解的知识:
非抢占式的调度算法,只有当前运行的进程主动放弃CPU时(正常/异常完成,或主动阻塞),才需要进行调度
- 周转时间 = 完成时间 - 到达时间
- 带权周转时间 = 周转时间/运行时间
- 等待时间 = 周转时间 – 运行时间
- 响应比=(等待时间+要求服务时间)/ 要求服务时间
FCFS-先来先服务
- 算法思想: 公平
- 规则:按照作业/进程到达顺序进行服务
- 作业调度:考虑哪个作业先到到后备队列
- 进程调度:考虑哪个进程先到达就绪队列
- 是否抢占式:非抢占式
- 优点:简单容易实现,公平
- 缺点:不利于短作业,对长作业有利
- 是否导致饥饿:不会
- 周转时间 = 完成时间 - 到达时间
- 带权周转时间 = 周转时间/运行时间
等待时间 = 周转时间 – 运行时间
J1->J2->J3->J4
作业 | 到达时间 | 所需服务时间 | 开始执行时间 | 完成时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|---|
J1 | 0 | 20 | 0 | 20 | 20 | 1 |
J2 | 5 | 15 | 20 | 35 | 30 | 2 |
J3 | 10 | 5 | 35 | 40 | 30 | 6 |
J4 | 15 | 10 | 40 | 50 | 35 | 3.5 |
SJF-短作业优先(SPF短进程优先)
- 算法思想: 追求平均等待时间,平均周转时间,平均带权周转时间最短
- 规则:服务时间最短的优先得到服务
- 作业调度:SJF短作业优先
- 进程调度:SPF短进程优先
- 是否抢占式:SJF和SPF是非抢占式的算法。但是也有抢占式的版本——最短剩余时间优先算法
- 优点:“最短的”平均等待时间、平均周转时间(前提是所有进程同时可运行或者说所有进程几乎都同时到达)因为最短剩余时间优先算法得到的平均等待
时间、平均周转时间还要更少
- 缺点:不利于长作业,对短作业有利,由此可能产生饥饿现象
- 是否导致饥饿:会,当短作业不断到来会导致长作业长时间得不到服务
- 周转时间 = 完成时间 - 到达时间
- 带权周转时间 = 周转时间/运行时间
等待时间 = 周转时间 – 运行时间
J1->J3->J4->J2
作业 | 到达时间 | 所需服务时间 | 开始执行时间 | 完成时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|---|
J1 | 0 | 20 | 0 | 20 | 20 | 1 |
J2 | 5 | 15 | 35 | 50 | 45 | 3 |
J3 | 10 | 5 | 20 | 25 | 15 | 3 |
J4 | 15 | 10 | 25 | 35 | 20 | 2 |
HRRN-高相应比优先
- 算法思想: 要综合考虑作业/进程的等待时间和要求服务时间
- 规则:每次调度都计算各个作业/进程的响应比,选最高的进行服务
- 是否抢占式:非抢占式
- 优缺点:
等待时间相同时,要求服务时间短的优先(SJF 的优点)
要求服务时间相同时,等待时间长的优先(FCFS 的优点)
对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题
- 是否导致饥饿:不会
- 周转时间 = 完成时间 - 到达时间
- 带权周转时间 = 周转时间/运行时间
- 等待时间 = 周转时间 – 运行时间
- 响应比=(等待时间+要求服务时间)/ 要求服务时间=(开始时间-到达时间+服务)/服务
开始时间指本次调度的作业的开始时间,即上一个完成的进程的完成时间
响应比计算: 0时刻:只有J1到达就绪队列,J1上处理机 7时刻(J1完成):就绪队列中有 J2 (响应比=(20-5+15)/15=2)、 J3((20-10+5)/5=3)、 J4((20-15+10)/10=1.5), 8时刻(J3完成): J2((25-5+15)/15=2.3)、 J4((25-15+10)/10=2) 12时刻(J2完成):就绪队列中只剩下 J4
J1->J3->J2->J4
作业 | 到达时间 | 所需服务时间 | 开始执行时间 | 完成时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|---|
J1 | 0 | 20 | 0 | 20 | 20 | 1 |
J2 | 5 | 15 | 25 | 40 | 35 | 2.3 |
J3 | 10 | 5 | 20 | 25 | 15 | 3 |
J4 | 15 | 10 | 40 | 50 | 35 | 3.5 |