第二章 Part2 进程调度与算法实现
第一节 处理机调度
基本概念:
调度:利用规则确定处理任务的顺序
- 处理器调度:按照一定算法选择一个进程并将处理机分配给它运行,以实现程序的并发
三个层次
高级调度(
作业调度
):外存和内存间的数据交互——无 -> 创建态 -> 就绪态
- 按照一定原则从外存上后备队列中的作业选取一个
- 分配内容,建立进程(PCB)
- 给予它竞争处理机的权利
高级调度是外存与内存间的调度,每个作业只调入、调出一次
- 调入作业时创建PCB,作业调出时撤销PCB(回收系统资源)
中级调度(
内存调度
):决定将那个挂起状态的进程重新调入内存引入虚拟存储之后,可能需要将暂时不能运行的进程调入外存等待
可以提升内存利用率和系统吞吐量
暂时调入外存的程序被称作
挂起状态
,PCB不会被一起调入外存被挂起的PCB被放到挂起队列中
低级调度(
进程调度
):从就绪队列中选择进程,并给它分配处理机——就绪态 - > 运行态
- 最基本的调度,频率很高
三个层次调度的联系、对比
作业调度
外存 -> 主存
无 -> 创建态 -> 就绪态
发生频率低
中级调度
外存(虚拟内存) -> 内存(面向进程)
挂起态 -> 阻塞态
发生频率中
低级调度
内存 -> CPU
就绪态 -> 运行态
发生频率高
第二节 进程调度的时机、切换与过程的调度方式
进程调度即第一节所述低级调度
时机
什么时候需要进程调度
当前进程主动放弃处理机
进程正常终止
发生异常总之
阻塞等待
……
当前进程被动放弃处理机
时间片用完
紧急事件
有更高优先级的事件进入队列
什么时候不能进行进程调度
中断处理过程
进程在操作系统内核临界区中
注意区分临界区和内核临界区
原语操作过程中
切换与过程
进程调度
与进程切换
调度:选中一个要运行的进程
”狭义的“进程切换:让一个进程让出处理机,由另一个进程占用处理机的过程
- 对原进程的各种数据进行保存
- 对新进程的各种数据进行恢复
广义的进程切换:调度+”狭义的“进程切换,两个步骤之和
进程切换需要做什么
方式
非剥夺调度方式(非抢占式):只允许进程主动放弃处理机
剥夺调度方式(抢占式):有更重要的任务需要处理时,剥夺处理机资源
第三节 调度算法的评价指标
本节需要理解和计算
CPU利用率:忙碌时间 / 总时间、甘特图
系统吞吐量:总作业量 / 总时间
周转时间:作业提交到系统,到作业完成的时间。
周转时间 = 作业完成时刻 - 作业提交时刻
平均周转时间 = 时间之和 / 作业数
带权周转时间 = 周转时间 / 实际运行时间
等待时间:作业处于等待状态的时间之和
响应时间:提交请求到首次相应的事件
第四节 调度算法(一)
-
算法解决什么问题
-
算法规则
-
用于作业调度和进程调度
-
抢占式 or 非抢占式
-
优缺点
-
是否导致
饥饿
?饥饿:指某个进程或作业长期得不到服务
先来先服务(FCFS,first come first service)
算法思想:公平
算法规则:按照到达的顺序(优先服务等待时间长的)
调度:
作业调度:看谁先到后备队列
进程调度:看谁先到就绪队列
是否抢占:非抢占
优缺点:
优:简单、公平
缺:对长作业有利,短进程不利(长作业后的短作业需要等待很长事件)
饥饿:不会
短作业优先(SJF,shortest job first)
算法思想:追求最少的平均等待事件、最少平均周转时间、最少平均带权周转时间
算法规则:(已到达的)最短的进程最先得到服务
调:
作业调度:
进程调度:用于进程调度时称作
短进程优先
算法 (STRN,shortest remaining time next)算法优缺点:
优:“最短”的平均等待时间
缺:对短作业有利长作业不利、运行时间可能不真实、长作业饥饿
饥饿:(长作业)可能饥饿
高响应比优先(HRRN,high)
算法思想:综合考虑等待时间和占用服务时间
算法规则:
计算相应比 -> 选择最高相应比的服务或进程
响应比:(等待时间 + 要求服务时间)/ 要求服务时间
调度:作业、进程调度均可
是否抢占:非抢占
优缺点
优:综合考虑了等待时间和运行时间
是否饥饿:不会饥饿
这三种算法适合早期的批处理系统,不区分任务的紧急程度,缺乏交互性
(二)中将介绍用于交互式系统的调度算法
第五节 调度算法(二)
- 算法思想
- 算法规则
- 作业or进程调度
- 是否抢占
- 优缺点
- 是否饥饿
时间片轮转(RR,Round-Robin)
算法思想:公平轮流的为各进程服务,让每个进程得到相应
算法规则:
按照到达就绪队列的时间执行
- 执行时间为一个时间片
若没能在一个时间片内执行完,则剥夺处理机,将进程放在队尾重新排队
用途:用于进程调度,因为只有创建进程后才能被分配处理机的时间片
是否抢占:
抢占式算法
由时钟装置发出时钟中断通知时间
优缺点:
优点:公平,相应快,适用于分时操作系统
缺点:进程切换有开销,不区分进程紧急程度
是否饥饿:不会导致饥饿
补充(时间片过大过小有什么影响):
时间片过大,则时间片轮转算法将退化为先来先服务算法,增大相应时间
时间片过小,进程切换过于频繁,消耗系统资源
应当保证切换进程的开销占比不超过1%
优先级调度算法
算法思想:需要根据紧急程度来决定任务顺序
算法规则:为每个作业 / 进程设定优先级,调度时选择优先级最高的作业/ 进程
用于作业 / 进程调度:可以用于作业调度也可用于进程调度
是否抢占:
抢占式:在就绪队列变化时检查是否需要抢占
非抢占式:等待进程放弃处理机
优缺点:
优点:灵活调整任务的偏好程度
缺点:饥饿
是否饥饿:低优先级进程可能发生饥饿
补充:
就绪队列可能不止一个
根据优先级是否能改变,可以分为静态优先级和动态优先级
优先级划分
系统进程高于用户进程’
前台进程高于后台进程
优先执行I / O繁忙型进程
多级反馈队列调度算法
算法思想:折中平衡
算法规则:
多级就绪队列,各队列优先级由高到低,时间片由小到大
新进程到达后进入1级队列,按照FCFS原则等待被分配时间片。
若时间片用完进程还未结束,则重新放回下一级队列队尾
只有K级队列为空时,才会为K + 1级队头的进程分配时间片
用途:用于进程调度
是否抢占:抢占式算法
在K级队列运行过程中,若更上级队列(1~K - 1)中加入了一个新进程,则由于新进程优先级较高,新进程抢占处理机
优缺点:
优:公平,不必预计进程运行时间
缺:可能饥饿
是否饥饿:会导致饥饿
适用于交互式系统(注重相应时间、公平性、平衡性)