调度分类
- 高级调度(作业调度)对象是作业
把作业从作业后备队伍调入内存,并创建进程
(作业:用户向系统提交一个作业=用户让操作系统启动一个程序)
作业调入创建PCB,作业调出撤销PCB
- 中级调度(内存调度)对象是进程
把进程从挂起队列调度内存
附挂起状态:就绪挂起,阻塞挂起
- 低级调度(处理机调度,进程调度)进程
把进程从就绪状态调入处理机(CPU)
即从就绪到运行状态
- 三者频率依次增高,低级调度最基本调度
调度时机
主动:正常/异常结束,阻塞(无IO不考虑)
被动:时间片用完,IO中断,高优先级抢占
无法调度:中断,操作系统内核临界区,原语
附①进程处于操作系统内核临界区,无法进行和进程调度与切换
②进程在临界区可以进行处理机的调度
调度指标
先算周转时间=完成时间-到达时间
带权周转时间=周转时间/实际运行时间
等待时间=周转时间-实际运行时间
响应比=(等待时间+实际运行时间)/实际运行时间
- CPU利用率
- 吞吐量
- 等待时间
进程:等待被服务时间,等待IO不算
作业:不仅考虑创建之后的等待时间,还要考虑在后备队列等待时间(高级调度之前的时间)
- 响应时间
进程切换与进程调度
- 狭义的进程调度,从就绪队列中选择一个要执行的进程,这个进程可以是刚暂停执行的进程,也可以是其他进程,后者需要进程切换
- 广义的进程调度包括选择和进程切换两个步骤
- 进程切换主要要做①保存原来进程各种数据②恢复新进程数据。这些数据一般都在进程控制管PCB中
各调度算法思想与规则
- 非抢占式
①考虑当前已到达且优先级别最高算法
②只有进程主动放弃处理机才会触发调度算法
如:正常或异常结束(运行态到终止态),进入阻塞状态(运行态到阻塞态)
此外,在不考虑IO等待时间就没有阻塞机会,不考虑异常结束,所以只考虑运行时间结束即正常结束触发调度算法。
③适用于早期批处理操作系统
- 抢占式
①在上面基础上,还要考虑就绪队列发生变化时触发调度算法。即正常结束和新进程到达。
②适用于分时和实时操作系统
具体调度算法思想和规则
- 先到先服务FCFS 短作业不利
公平,不会饥饿
时间上先到先得
对于作业就是谁先到了后备队列,对于进程就是谁先到了就绪队列
- 非抢占式短作业优先SJF 长作业不利
追求短的平均周转时间,会饥饿
在当前已到达且服务时间(运行时间)短的优先
- 抢占式短作业优先SRTN
- 高响应比优先HRRN
综合考虑等待时间和要求服务时间(运行时间),不会饥饿
响应比:(等待时间+服务时间)/服务时间
- 时间片轮转调度RR(常用分时操作系统)
①在时间片用完、新作业进来和作业结束时候触发调度算法
②不区分紧急度,不会导致饥饿,公平
③属于抢占式(未结束但是时间片已到就会剥夺处理机使用权
④属于进程调度(只有进入处理机才会分配时间片
⑤若时间片太大,则退化成先到先服务,响应时间过长。若时间片太小,则进程切换太频繁
⑤同一时刻,新到进程在就绪队列队首,下处理机进程在队尾,优先选择新到进程
- 非抢占式优先级调度算法
①优先数越大,优先级别越高(不同题目不同)
②选择当前已到达且优先级最高进程,只考虑进程主动放弃触发调度。
③会饥饿
- 抢占式优先级调度算法
还要考虑就绪对列变化是是否适合调度算法
- 多级调度反馈算法
- 多级队列调度算法