十二、单处理器调度
提纲:
- 处理器调度的类型
- 单处理器调度算法
8.1处理器调度
- 长程调度
- 决定哪些新建进程可以进入系统准备执行
- 控制多道程序系统的并发程度
- 进程越多则各进程对CPU的使用百分比越小
- 中程调度
- 决定交换哪些主存-辅存(内存-外存)进程
- 基于多道程序设计的管理需要
- 短程调度
- 决定下一个使用CPU的进程(dispacher,分派程序)
![image]()
- 决定下一个使用CPU的进程(dispacher,分派程序)
- 调度的层次
![image]()
- 调度队列
![image]()
- 短程调度时机
- 当前进程正常或异常终止(通过中断实现)
- 时钟或I/O中断
- 系统调用(通过软中断实现)
- 信号量操作(通过软中断实现)
- 短程调度模式
- 非剥夺式(nonpreemptive)
- 让进程运行直到结束或阻塞的调度方式
- 容易实现
- 适合专用系统,不适合通用系统
- 剥夺式(preemptive)
- 允许将逻辑上可继续运行的进程在运行过程中暂停的调度方式
- 可防止单一进程长时间独占CPU
- 系统开销大(降低途径:硬件实现进程切换,或扩充主存以贮存大部分程序)
- 非剥夺式(nonpreemptive)
- 短程调度过程
- 保存现场
- 根据某种调度算法选择下一个运行的程序
- 没有就绪程序,系统执行空闲进程
- 没有其他进程时,该进程一直运行
- 在执行过程中可接收中断
- 恢复现场
- 短程调度目标
- 面向用户的目标与面向系统的目标
- 定量目标与定性目标
- 公平——确保每个进程都获得合理的CPU份额
- 效率——使CPU及其他系统资源尽量忙碌
- 响应时间(从提交到开始输出结果)——尽可能短
- 在交互式系统中尤为重要
- 周转时间Tr(从提交到结束,也叫驻留时间)——尽可能短
- 吞吐量(单位时间内完成的进程数)——尽可能大
- 实时性——可以指定进程完成的最后期限
8.2进程调度算法
- 先来先服务(FCFS)
- 最短进程优先(SPN)
- 最短剩余优先(SRT)
- 最高响应比优先(HRRN)
- 时间片轮转(RR)
- 最高优先级优先(HPF)
- 多级队列反馈(MF/FB)
![image]()
8.2.1先来先服务
- 当前进程结束后,选择最早到达就绪队列的进程(非剥夺式)
- 短进程等待执行的时间可能较长
- I/O密集进程必须等待CPU密集进程结束
![image]()
![image]()
8.2.2最短进程优先
- 选取估计运行时间最短的进程(非剥夺式)
- “长”进程可能饿死
![image]()
![image]()
- 难点:预知或估计进程的执行时间
- 生产环境:统计
- 交互式环境:估计
- 进程执行时间的估计:“指数平滑”技术
- Sn:第n个实例执行时间的估计值
- Tn:第n个实例执行时间的测量值
- a:加权系数,a值越大,对变化反应越快(对老的运行时间忘记得越快)(0<a<1)
8.2.3最短剩余优先
- 剥夺式的SPN
- 新进程进入就绪队列时引发重新调度
- 选取估计剩余时间最短的那个进程
- 需要估计进程剩余执行时间
- “长”进程可能饿死
![image]()
![image]()
8.2.4最高响应比优先
- 非剥夺式
- 选取响应比R最大的进程
- w:等待CPU时间
- s:估计执行时间
![image]()
- 利于短进程,但长进程也不会饿死
- 同SPN、SRT,要估计执行时间
![image]()
8.2.5时间片轮转
- 剥夺式的FCFS
- 把CPU分为若干片,按顺序分配给就绪队列中的各个进程
- 时间片用完时,系统剥夺该进程的CPU,将该进程排列到就绪队列的末尾
- 运行就绪队列头的进程
![image]()
![image]()
- 时间片长度的选择问题:
- 太短:切换开销大
- 太长:响应时间变长
- 一般比典型的一次交互过程时间略长
- 分时系统和事务处理系统中常用时间片轮转法
- 有利于CPU密集型进程,不利于I/O密集型进程
![image]()
- 虚拟轮转VRR
- 阻塞解除的进程进入辅助队列
- 辅助队列中的进程比就绪队列中的优先获得处理器
- 可解决轮转对I/O密集型进程的不公平性问题
![image]()
8.2.5最高优先级优先
- 每个进程被赋予了一个优先级(priority)
- 每次调度选取就绪队列中优先级最高的进程
- 优先级确定方法
- 静态:进程创建时指定优先级,在进行运行时优先级保持不变
- 动态:在进程创建时指定一个优先级,但在其生命周期内优先级可以动态变化(如等待时间长的优先级可以提高,时间片过后的优先级可以降低)
- 实现时可对应不同优先级采取多个就绪队列
- 优先级排队
![image]()
8.2.6多级队列反馈(MF/FB)
- 剥夺式、时间片
- 关注进程已执行的时间
- 不用估计(剩余)执行时间
- 动态优先级
- 设立多个优先级就绪队列,各个队列运行时间片可能不同(优先级越高[i越小]时间片越小:\(2^i\))
- 新的就绪进程进入最高优先级队列
- 进程由于时间片用完被抢占而放弃CPU,下降一个优先级队列(最高->最低)
- 进程由于等待而放弃CPU后,进入等待队列,一旦等待的时间发生,则回到原来的就绪队列
- 在各优先级队列中采用FCFS(最低级队列中采用RR)
![image]()
- 调度:先按FCFS从最高优先级队列中选取,若最高优先级队列为空,按FCFS从次高优先级队列中选取......
![image]()
![image]()
8.2.7性能比较——响应时间
- 短进程(高优先级)的标准化响应时间
- 归一化响应时间 = 周转时间Tr/平均服务时间Ts = 1/(1-处理器利用率p)
- 短进程(高优先级)的标准化响应时间
![image]()
- 长进程(低优先级)的标准化响应时间
![image]()
- 性能比较——周转时间
- 仿真建模——50,000个仿真进程,按服务时间分成100组,80%的CPU利用率(所需时间的百分点~进程服务时间长度)
![image]()
- 性能比较——等待时间
![image]()
8.2.8公平共享调度
- 用户应用或作业可以是一个进程(含线程)集合
- 用户关心的是应用或作业的整体性能
- 应该基于进程集合进行调度决策
- 一个用户也可看成是一个用户组的成员
- 同一用户组的用户应只影响本用户组的调度而不影响其他用户组的调度,即应基于用户组进行调度决策
- 公平共享调度(FSS)
- 基于组调度,每个组公平共享处理器时间
- 每个用户被指定某种类型的权值,以定义其使用共享资源的份额
- 公平共享调度示例
![image]()


























浙公网安备 33010602011771号