操作系统学习笔记02 - 进程调度算法1
进程调度的学习
- CPU的利用率
- 系统的吞吐量
CPU 利用率
CPU运行处理事务的时间/总时间的占比
某进程cpu使用率 = 该进程cpu时间 / 总cpu时间
系统吞吐量
系统吞吐量 = 完成的作业数量/总共花费的时间
例如一个分成5个阶段的流水线指令 t,3t,t,2t,t , 执行N次,计算系统的吞吐量
吞吐量 = N/{(1+3+1+2+1)t + (N-1)3t}
周转与时间
周转时间 : 某一个作业完成的时间 - 作业提交时间 ;
平均周转时间 =各作业的周转时间总和/作业数;
带权周转时间=周转时间/作业实际运行时间;
平均带权周转时间 = 各个带权周转时间总和/作业数;
进程等待时间: 等待被服务的时间,等待IO设备的时间不属于进程的等待时间 ;
作业等待时间: 进程等待时间 + 在外存后备队列中等待的时间;
响应时间: 用户从提交请求到首次产生响应的时间;
调度计算的算法
- FCFS 先来先服务
- SJF 短作业优先
- HRRN 高响应比优先
先来先服务
使用一个队列来储存作业。 按照作业到达的先后顺序来决定执行顺序;
作业调度: 考虑那个作业到达后备队列
进程调度: 那个进程到达就绪队列
非抢占式算法
examp:
进程ID | 到达时间 | 实际用时 | 完成时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|
P1 | 0 | 7 | 7 | 7 | 1 |
P2 | 2 | 3 | 10 | 8 | 8/3 |
P3 | 4 | 12 | 22 | 18 | 3/2 |
P4 | 8 | 8 | 30 | 22 | 11/4 |
比较带权周转时间可以知道
整体而言 对长作业有利对于短作业不利
短作业优先算法
追求最小的平均周转时间
SJF/SPF 是非抢占式的算法,SRTN shortest remain Time Next 抢占式的算法
同样的上述的例子再次并不是按照P1- P2 - P3 - P4 的顺序完成
P1 在执行结束前, P2,P3都在等待队列里面因为P2用时比较少所以P2 优先P3
在P2的执行时间中, P4 到达了队列,由于P4所需时间小于P3 所以优于P3 处理
进程ID | 到达时间 | 实际用时 | 完成时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|
P1 | 0 | 7 | 7 | 7 | 1 |
P2 | 2 | 3 | 10 | 8 | 8/3 |
P4 | 8 | 8 | 18 | 10 | 5/4 |
P3 | 4 | 12 | 30 | 26 | 13/6 |
相比于先来先服务的算法,平均的带权周转时间更短
抢占式的会当P2 到达的时候挂起P1 优先完成P2 之后在激活P1 继续运行
特点:
- 对短作业更加的有利,不利于长作业
- 可能产生饥饿现象
高响应比优先算法(Highest Response Ratio Next)
每次调度之前计算每个作业的响应比 :
(等待时间 + 要求服务时间)/要求服务时间
非抢占式的算法:
综合考虑了等待时间和运行时间(要求服务时间)
等待时间相同时,要求服务时间短的优先(SJF 的优点)
要求服务时间相同时,等待时间长的优先(FCFS 的优点)
对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题