第3章 处理机调度与死锁
第3章 处理机调度与死锁
3.1 处理机调度的层次和调度算法的目标
- 作业
用户提交作业以后(用户提交给操作系统计算的一个独立的任务),当作业被调度,系统会为作业创建进程,一个进程无法完成时,系统会为这个进程创建子进程。- 进程:完成任务的执行实体
- 联系:
没有作业任务,进程无事可做;
没有进程,作业任务无法完成。
一个作业通常包括几个进程,几个进程共同完成一个任务,即作业。
3.1.1 处理机调度的层次
调度层次
-
高级调度(作业调度或长程调度)
调度对象:作业 -
低级调度(进程调度或短程调度)
调度对象:进程或内核级线程 -
中级调度(内存调度)
定义:把暂时不能运行的进程调度至外存等待,被调出的进程的状态称为就绪驻外存状态(挂起状态),实际上就是存储器管理中的对换功能。
调度对象:进程
目的:提高内存利用率和系统吞吐量
3.1.2 处理机调度算法的目标
1、处理机调度算法的共同目标
- 资源利用率
- 公平性
使诸进程都获得合理的CPU时间,不会发生饥饿现象。 - 平衡性
调度算法应尽可能保持系统资源使用的平衡性。 - 策略强制执行
只要需要,就必须予以明确的执行,即使会造成某些工作的延迟也要执行。
2、批处理系统的目标
- 平均周转时间短
周转时间:从作业被提交给系统开始,到作业完成为止的这段时间间隔。 - 系统吞吐量高
吞吐量指的是在单位时间内系统所完成的作业书 - 处理及利用率高
3、分时系统的目的
- 响应时间快
响应时间:从用户通过键盘提交一个请求开始,直到屏幕上显示出处理结果为止的一段时间间隔。 - 均衡性
系统响应时间的快慢应与用户所请求的服务的复杂性相适应
4、实时系统的目的
- 截至时间的保证
指某任务必须开始的最迟时间或必须完成的最迟时间。 - 可预测性
eg:3D重建、电影的连续播放
3.2 作业与作业调度
作业
用户提交给操作系统计算的一个独立的任务。
作业:任务实体
进程:完成任务的执行实体
没有作业任务,进程无事可做;
没有进程,作业任务无法完成。
3.2.1 批处理系统中的作业
-
作业和作业步
以作业为基本单位从外存调入内存
作业步:编译→链接装配→运行 -
作业控制块JCB
保存了系统对作业进行管理和调度所需的全部信息。 -
运行阶段和运行状态
3.2.2 作业调度的主要任务
-
接纳多少个作业
在每一次进程调度时,应当从后备队列中选取多少作业调入内存,取决于多道程序度,即允许多少个作业同时在内存中运行。 -
接纳哪些作业
应选择后备队列中的那些作业调入内存,取决于所采用的调度算法。 -
最简单:先来先服务算法。
常用:短作业优先、基于作业优先级的调度算法
较好:相应比高优先调度算法
3.2.3 先来先服务调度算法(FCFS)
按照作业到达的先后次序来进行调度;
优先考虑在系统中等待时间最长的作业;
示例:
- 周转时间:进入调度进内存的总时间(就绪时间+执行时间)
周 转 时 间 = 作 业 完 成 时 刻 − 作 业 到 达 时 刻 周转时间=作业完成时刻-作业到达时刻 周转时间=作业完成时刻−作业到达时刻;- 带权周转时间:
带 权 周 转 时 间 = 周 转 时 间 ÷ 服 务 时 间 带权周转时间=周转时间\div服务时间 带权周转时间=周转时间÷服务时间;- 平均周转时间=作业周转总时间/作业个数;
- 平均带权周转时间=带权周转总时间/作业个数;
3.2.4 短作业优先调度算法(SJF)
1、定义:以作业的长短来计算优先级,作业越短,其优先级越高
示例:
作业
作业1:
有一个内存中只能装入2道作业的批处理系统,作业调度采用短作业优先的调度算法,进程调度采用以优先数为基础的抢占式调度算法。如下表所示,表中所列优先数是进程调度的优先数,且优先数越小优先级越高。
问:
(1) 列出所有作业进入内存的时刻以及结束的时刻。
(2) 计算作业的平均周转时间。
答:
3.2.5 优先级调度算法(PSA)
基于作业的紧迫程度,由外部赋予作业相应的优先级;
调度算法根据优先级进行调度。
3.2.6 高响应比优先调度算法
以作业的长短来计算优先级,作业越短,其优先级越高;
作业的长短是以作业所要求的运行时间来衡量的。
3.3 进程调度(重点)
3.3.1 进程调度的任务、机制和方式
1、任务
- 保存处理机现场信息
- 按某种算法选取程序
- 把处理器分配给进程
2、进程调度机制
3、调度方式
非抢占式
抢占式
3.3.2 轮转调度算法(重点)
基于时间片的轮转(round robin,RR)调度算法
-
原则
系统将所有的就绪进程按照FCFS策略排成一个就绪队列。 -
进程切换时机
若一个时间片尚未用完,正在运行的进程便已完成,则立即激活调度程序,将其从就绪队列中删除,再调度就绪队列中队首进程运行;
在一个时间片用完时,计时器中断处理程序被激活,若进程尚未运行完毕,调度程序将其送到就绪队列的末尾。 -
时间片大小的确定
略大于一次典型的交互所需要的时间,使大多数交互式进程能在一个时间片内完成,从而获得很小的响应时间。
示例:
答:
- 一线法:时间线上CPU,时间线下就绪队列
- 图示法
3.3.3 多级反馈队列调度算法(重点)
多级反馈队列调度算法
- 设置多个就绪队列
优先级:高级就绪队列>低级就绪队列
被抢占时:第 0~ n-1 队列 抢占第 n 队列进程A时,进程A进入该第 n 队列末尾。- 每个就绪队列中采用FCFS算法
作业
作业1:
假设一个系统中有5个进程,它们的到达时间和服务时间如下表所示,忽略I/O以及其他开销时间,若分别按
先来先服务(FCFS)
抢占的短作业优先(SJF)
时间片轮转(RR,时间片=1)
多级反馈队列调度算法(FB,第级队列的时间片=2i-1)。
问:
请给出各进程的完成时间,周转时间带权周转时间,平均周转时间和平均带权周转时间。
答:
- FCFS
- SJF
- RR
- FR
3.4 实时调度
3.4.1 实现实时调度的基本条件
-
信息
就绪时间
开始截止时间和完成截止时间
处理时间
资源要求
优先级 -
系统处理能力
-
采用抢占式调度机制平衡性
优先权
开始截止时间
结束截止时间 -
具有快速切换机制
对中断的快速响应能力
快速的任务分派能力
3.4.2 实时调度算法的分类
3.4.3 最早截止时间优先算法EDF(Earliest Deadline First)
看谁的截止时间最早,谁先执行
示例
例:有2个周期性任务:
A:周期20ms,处理时间10ms
B:周期50ms,处理时间25ms
3.4.4 最低松弛度优先算法LLF(Least laxity First)
最低松弛度优先算法:松驰度为0时抢占
- 优先级:根据任务的紧急情况。
- 公式:
松 驰 度 = 必 须 完 成 时 间 − 其 本 身 运 行 所 需 时 间 − 当 前 时 间 松驰度=必须完成时间-其本身运行所需时间-当前时间 松驰度=必须完成时间−其本身运行所需时间−当前时间- 开始运行后:
松驰度不变:做做反而有多余时间吗?做做反而完成不了吗
其本身运行所需时间 ↓ \darr ↓
示例
例:有2个周期性任务:
A:周期20ms,处理时间10ms
B:周期50ms,处理时间25ms
3.7 避免死锁
3.7.1 系统安全状态
预先并不设置限制性条件!但是把系统分为安全和不安全状态,在每次资源分配的时候,检测是否导致系统进入不安全状态。保证系统永远处于安全状态。
示例:
问:此时,P3申请一台设备,能分配吗?
答:不能,不安全。
问:此时,P2申请一台设备,能分配吗?
答:可以,安全,能找到一个安全序列(P2-P1-P3)
问:此时,P1申请一台设备,能分配吗?
答:可以,安全能找到一个安全序列(P2-P1-P3)
3.7.2 利用银行家算法避免死锁
示例:
问:判断该状态是否安全?
答:安全,能找到一个安全序列(P1-P3-P4-P0-P2)
问:若进程P1提出请求Request(1、0、2)后,系统能否将资源分配给它。
答:可以,因为有安全序列
练习:
题目: 在银行家算法中,若出现下面的资源分配情况:
问:
1、请计算每组进程对应Allocation的值。
2、判断该状态是否安全?
3、若进程P2提出请求Request(1、2、2、2)
后,系统能否将资源分配给它。
4、如果系统立即满足P2的请求,系统是否立即进入死锁状态?
3.8 死锁的检测与解除
3.8.1 死锁的检测
3.8.1 死锁的解除
抢占资源\终止进程