文章目录
第三章 处理机调度与死锁
概述
1. 处理机调度目标
- 极小化平均响应时间
- 极大化系统吞吐率
- 保持系统各个功能部件均处于繁忙状态,提供公平机制
2. 处理机管理关键
- 处理机调度算法
- 处理机调度时机
- 处理机调度过程
3.1 处理机调度
两级调度
作业调度
- 使作业进入主存储器
处理器调度
- 作业进程占用处理器
1、处理机调度层次
-
高级调度
- 即作业调度,选中一个作业将它装入主存储器,为改作业创建一个用户进程并分配必要的资源,将其排入就绪队列
-
低级调度
-
即进程调度、短程调度
-
按照某种原则决定就绪队列中哪个进程获得处理器,并将处理机出让给它进行工作
-
低级调度方式
-
剥夺方式
- 高优先级剥夺原则
- 时间片剥夺原则
-
非剥夺方式
-
-
-
中级调度
- 平衡负载调度
- 决定主存储器中所能容纳的进程数,这些进程将允许参与竞争处理器资源
- 中级调度根据资源量和进程当前的状态来决定辅存和主存中进程的对换
- 通过把一些进程换出主存使之进入挂起状态,不参与进程调度,起到平滑和调整系统负荷的作用
2.调度算法–高级调度
-
确定了处理机的分配策略
-
几个衡量调度算法的关键指标
-
- 资源利用率
- CPU利用率 = CPU有效工作时间/CPU总的运行时间
- CPU总的运行时间=CPU有效工作时间+cpu空闲等待时间
-
- 响应时间
- 从提交一个请求到接收到响应之间的时间间隔称响应时间
-
- 周转时间
-
从作业提交给系统开始到作业完成为止的时间
-
周转时间=作业等待时间+作业运行时间
-
周转时间=作业完成时刻-作业提交时刻
-
平均作业周转时间
- 周转时间/n
- n为作业的个数
-
作业带权周转时间
- 作业i的周转时间ti,所需运行时间为tk,则wi=ti/tk 为作业带权周转时间
-
平均作业带权周转时间
- W = 作业带权周转时间/n
-
- 吞吐率
- 单位时间内处理的作业数
-
5.公平性
- 确保每个用户每个进程获得合理的CPU份额或其他资源份额,不会出现饿死情况
-
-
批处理作业的管理与调度
- 作业、收容、执行、完成
- 作业是任务实体、进程是完成任务的执行实体
- 作业的概念更多的用在批处理操作系统,而进程则可以用在各种多道程序设计系统中
-
作业控制块(JCB)
-
多批道处理操作系统具有独立的作业管理模块
-
JCB由Spooling系统建立,它是作业存在于系统的标志,作业撤离时,JCB也被撤销
-
作业生命周期状态
-
输入状态
- 作业输入
-
后备状态
- 作业输入结束,但未被选中执行
-
执行状态
- 作业被选中,并构成进程去竞争处理器资源以获得运行
-
完成状态
- 作业执行结束,正在等待缓冲输出
-
-
-
几种常见的调度算法
-
先来先服务(FCFS)
- 缺点是后来的进程等待CPU的时间较长,有利于长作业,不利于短作业
- 只顾及作业等候时间,没有考虑作业要求服务时间,有利于繁忙型作业
-
最短作业优先算法(SJF)
- 忽视了作业的等待时间
- 会出现饥饿现象
-
SRTF
- 是SJF的抢占式调度算法
-
响应比最高者优先算法(HRRF)
-
即考虑作业等待时间,又考虑作业的运行时间
-
响应比=1+已等待时间/估计时间
-
特点
- 短作业容易得到较高的响应比
- 长作业在等待较长时间后,也将获得足够高的响应比
- 饥饿现象不会发生
-
-
优先权法
-
每次选择优先权高的作业
-
优先数定义
- 用户自定义
- 系统定义
-
-
分类调度算法
- 预先按一定原则把祖业划分成若干类,以达到均衡使用系统资源和坚固大小作业的目的
-
3.低级调度
-
负责动态的把处理器分配给进程或内核级线程
-
调度时机
- 分时系统中,现行进程的时间片用完了
- 发生了外部中断
- 进程因等待某事件或资源而阻塞
- 现行进程运行结束或出现异常情况
-
低级调度的主要功能
- 决定某个进程什么时候获得处理器,以及占用多长时间
- 记住进程状态
- 把处理器分配给进程
- 收回处理器
-
低级调度算法
-
先来先服务调度算法
-
短进程优先算法
-
时间片轮转调度算法
-
实现思想
- 将就绪进程根据FCFS原则排成一个队列
- 规定时间片,作为进程每次使用处理机的最长时间单位
- 按时间片把处理机轮流分配给当前位于就绪队列队首的进程使用,当该进程时间片用完以后,系统产生时钟中断,剥夺该进程的执行,将它送到就绪队列的队尾,等待下一轮次的调度,同时处理机调度程序又去调度当前就绪队列的队首进程,让它运行给定的时间片
-
-
优先权调度–优先数法
-
总选择最高优先级的进程首先使用处理机
-
静态优先权
-
动态优先权
- 根据占有CPU时间的多少来决定
- 根据等待CPU时间多少来决定
-
动态优先数法
-
抢占式调度算法
- 可以防止一个长作业长期垄断处理机
-
-
-
多级反馈队列调度算法
- 按进程优先级设置了舵机就绪进程队列,从第一级到最后一级队列,优先级越来越低
- 每一级就绪队列对应不同的时间片,优先权越高的队列,进程时间片越小
- 当新进程进入内存后,首先被放到第一级队列的末尾。按照FCFS原则排队等待调度。当轮到该进程执行时,如能在时间片内完成,便可准备撤离系统;如果在时间片内未完成,调度程序便将该进程转入第二队列的末尾,再次按照FCFS原则等待调度
- 仅当第一级队列为空时,才调度第二季队列中的进程;如此下去,仅当前面的n-1级队列全部为空时,才去调度最后第n级队列中的进程.
-
保证调度算法
-
彩票调度算法
-
3.2死锁问题
你不让,我也不让
1. 死锁的定义
- 指两个或两个以上的进程在执行过程中,因争夺资源而造成一种互相等待的现象,若无外力作用,他们都无法推进下去
2. 死锁产生的原因
-
竞争临界资源
-
资源分类
-
可剥夺性资源
- CPU和主存
-
不可剥夺性资源
- 磁带、打印机
-
-
-
进程推进顺序不当
- 请求和释放资源的顺序不当
3.产生死锁的必要条件
-
互斥条件
- 每个资源被分配给一个进程,或者空闲
-
占有并请求条件
- 已分配到一些资源的进程,可以申请新的资源
-
不可剥夺条件
- 资源所获得的资源在未使用完毕之前,,资源申请者不能强行地从资源占有者手中夺取资源
-
循环等待条件
- 链中的每一个进程都在等待相邻进程所占用的资源
4.死锁解决的方法
-
鸵鸟算法
- 忽略死锁,不去解决
-
死锁的预防
-
在系统运行之前就采取措施,即在系统设计时确定资源分配算法,消除发生死锁的任何可能性
-
1、静态资源分配算法(摈弃占有并请求条件)
-
一次性的申请所有的资源
-
系统可以满足则一次性分配,不满足,则一个资源都不分配
-
缺点:
- 资源被严重浪费
- 进程延迟运行
-
-
2、摈弃不可剥夺条件
- 当一个已经保持了某些资源的进程,当他提出新的资源要求而不能立即得到满足时,必须释放它已经保持的所有资源,待以后再需要时重新申请
-
3、有序资源使用法(摒弃循环等待条件)
-
-
死锁的避免
-
系统在运行过程中采取动态的资源分配策略。保证系统不进入可能导致系统陷入死锁状态的所谓不安全状态
-
系统安全状态
- 若在某一时刻,按某种进程顺序,为每一个进程分配所需的资源,直至最大需求,使每个进程可顺利完成,则成此时的系统状态为安全状态,这样一个序列为安全序列
-
不安全状态
-
若在某一时刻,系统不按照安全序列分配资源,使系统中不存在一个安全序列,则称系统处于不安全状态
-
注意点
- 系统在某一时刻的安全序列不唯一
- 安全状态是非死锁状态,而不安全状态并不一定是死锁状态,系统处于不安全状态仅仅可能进入死锁状态
-
银行家算法
-
数据结构
- Available(可利用资源)
- Max(最大需求矩阵)
- Allocation(已为每个进程分配的资源的数量)
- Need(需求矩阵)
- Request(请求向量)
-
实质
- 要设法保证系统动态分配资源后进入不安全状态,以避免产生的死锁
-
-
安全性子算法
-
数据结构
-
工作向量(Work)
-
Finish
- 表示是否有足够的资源分配给进程
-
-
-
-
-
死锁的防止与死锁避免的区别
- 死锁的防止是系统预先确定一些资源分配策略,进程按规定申请资源,系统按预先规定的策略进行分配,从而防止死锁的发生;
- 死锁的避免是当进程提出资源申请时系统测试资源分配,仅当能确保系统安全时才把资源分配给进程,使系统一直处于安全状态之中。
-
死锁的检测和恢复
- 系统定时运行一个死锁检测程序,判断系统内是否已出现死锁,如果检测到系统已发生了死锁,再采取措施解除它
- 如果进程–资源分配图中无环路,则此时系统没有发生死锁
- 如果进程资源分配图中有环路,且每个资源类中仅有一个资源,则系统发生了死锁,此时,环路系统发生死锁的充要条件,环路中的进程便为死锁进程
-
死锁的解除
-
1、撤销进程法
- 撤销全部死锁进程
- 最小代价撤销法
-
2、挂起进程法(剥夺资源)
- 使用挂起/激活机构挂起一些进程,剥夺它们的资源以解除死锁,待条件满足时,再激活进程
-