处理机调度:调度算法与相关计算

一、调度的层次分类

  1. 高级调度(作业调度):内存与辅存之间的调度。按照一定原则从外存上处于后备队列的作业选一个(或多个)分配内存、I/O设备等资源,并建立相应进程
  2. 中级调度(内存调度):即存储器管理中的对换功能(为了提高内存利用率的)。将暂时不能运行的进程调至外存等待,此时进程处于挂起态;内存有空闲时,将外存上已具备运行条件的进程调入内存,并修改其状态为就绪态
  3. 低级调度(进程调度):按某种算法从就绪队列中选一个进程,将处理机分配给它
  4. 三者中,作业调度次数少,中级调度次数略多,进程调度频率最高。
要做什么 调度发生在… 发生频率 对进程状态的影响
高级调度(作业调度) 按照某种规则,从后备队列中选择合适的作业将其调入内存,并为其创建进程 外存->内存(面向作业) 最低 无->创建态->就绪态
中级调度(内存调度) 按照某种规则,从挂起队列中选择合适的进程将其数据调回内存 外存->内存(面向进程) 中等 挂起态->就绪态(阻塞挂起->阻塞态)
低级调度(进程调度) 按照某种规则,从就绪队列中选择一个进程为其分配处理机 内存->CPU 最高 就绪态->运行态

二、调度的目标:一些性能计算

  1. CPU利用率: C P U 利用率 = C P U 有效工作时间 C P U 有效工作时间 + C P U 空闲等待时间 CPU利用率=\frac{CPU有效工作时间}{CPU有效工作时间+CPU空闲等待时间} CPU利用率=CPU有效工作时间+CPU空闲等待时间CPU有效工作时间
  2. 系统吞吐量:单位时间内CPU完成作业的数量
  3. 周转时间:指作业提交到完成所经历的时间,是作业等待、在就绪队列中排队、在处理机上运行、I/O操作所花费的时间之和
    带权周转时间 = 作业周转时间 作业实际运行时间 =\frac{作业周转时间}{作业实际运行时间} =作业实际运行时间作业周转时间(也是响应比的计算公式)
  4. 等待时间:进程处于等处理机的时间之和
  5. 响应时间:从用户提交到系统首次产生响应所用的时间。在交互式系统中,周转时间不是最好的评价准则,而是响应时间

三、调度算法

  1. 适合于早期批处理系统的调度算法对比:主要关心用户的公平性、平均周转时间、平均等待时间,但不关心响应时间,也不区分任务的紧急程度。对用户来说交互性很糟糕,适用于早期的批处理系统
算法 思想 可抢占? 优点 缺点 考虑等待时间/运行时间? 会导致饥饿? 适用于
FCFS 每次调度时选择等待时间最长的作业(进程)为其服务 非抢占式 公平,实现简单 对短作业不利 考虑等待时间,不考虑运行时间 不会 有利于CPU繁忙型作业,而不利于I/O繁忙型作业
SJF/SPF 每次调度时选择一个执行时间最短的作业(进程)为其服务 默认为非抢占式,也有SJF的抢占式(最短剩余时间优先算法SRTN) 严格来说,抢占式的短作业/进程(最短剩余时间)优先算法的平均等待时间、平均周转时间最少。不严格来说,SJF的平均等待时间、平均周转时间最少 对长作业不利,可能导致饥饿;难以做到真正的短作业优先 不考虑等待时间,考虑运行时间
HRRN 非抢占式,调度时计算所有就绪进程的响应比[^3],选响应比最高的进程上处理机 非抢占式 上述两种的权衡折中,综合考虑等待时间和运行时间 考虑等待时间,考虑运行时间 不会
  1. 适用于交互式系统的调度算法对比:这三种算法更注重系统的响应时间、公平性、平衡性等指标,适用于交互式系统(包括分时操作系统、实时操作系统)。比如Unix使用的就是多级反馈队列调度算法
算法 思想 可抢占? 优点 缺点 会导致饥饿? 补充
时间片轮转 按个进程到达就绪队列的顺序,轮流让各个进程执行一个时间片 抢占式 公平,适用于分时系统 频繁切换有开销,不区分优先级 不会 时间片太大或太小有何影响?[^4]
优先级调度 每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程 有抢占式的,也有非抢占式的。非抢占式只需在进程主动放弃处理机时进行调度即可,抢占式除此外还需要在就绪队列变化时检查是否会发生抢占 区分优先级,适用于实时系统 可能导致饥饿 动态/静态优先级?[5]各类进程设置优先级?[6]如何调整优先级?[^7]
多级反馈队列 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大。新进程先进入第1级队列,按FCFS原则排队等待被分配时间片,时间片到未结束则进入下一级队列队尾,若已经在最下级的队列则重新放回本队列队尾。只有第k级队列为空时,才会为k+1级队头的进程分配时间片 抢占式 平衡优秀 一般不说它有缺点,不过可能导致饥饿

你可能感兴趣的:(操作系统,算法,操作系统)