处理机调度与死锁
处理机调度
-
调度层次
-
高级调度:作业调度,长程调度,调度对象为作业,主要用于多道批处理系统
-
低级调度:进程调度,短程调度,调度对象为进程(或内核级线程),是最基本的一种调度
-
中级调度:内存调度,提高内存利用率和系统吞吐量
-
处理机调度算法目标
-
共同目标
-
资源利用率
-
$$CPU的利用率=\frac{CPU有效工作时间}{CPU有效工作时间+CPU空闲等待时间}$$
-
-
公平性:合理的CPU分配时间,避免进程饥饿现象
-
平衡性:进程类型不同,如计算型作业,I/O型作业
-
策略强制执行
-
-
批处理系统:
-
平均周转时间短
-
周转时间:作业被提交给系统开始,到作业完成为止的时间间隔
-
-
系统吞吐量高
-
吞吐量:单位时间内系统所完成的作业数,与作业平均长度有关
-
-
处理机利用率高:计算型作业,IO型作业
-
-
分时系统
-
响应时间快
-
响应时间:从用户通过键盘提交一个请求开始,到屏幕上显示出处理结果为止的一段时间
-
-
均衡性:响应时间快慢与请求服务的复杂性相适应
-
-
实时系统
-
截止时间的保证
-
截止时间:某任务必须开始执行的最迟时间或必须完成的最迟时间
-
-
可预测性:如播放视频应该是连续性的
-
作业与作业调度
-
作业 Job:包含程序,数据,作业说明书,是批处理系统调度的基本单位
-
作业步 Job Step: 编译作业步,链接装配作业步,运行作业步
-
作业控制块 Job Control Block JCB:作业在系统中存在的标志
-
作业运行的阶段和状态
-
收容阶段:作业后备队列
-
运行阶段:分配必要资源,建立进程,从第一次进入就绪状态开始到运行结束前
-
完成阶段:结束,回收JCB和资源
-
-
接纳调度Admission Scheduling:
-
接纳多少个作业
-
接纳哪些作业:先来先服务,短作业优先,作业优先级,相应比高者优先
-
作业调度算法
-
先来先服务first-come first-served FCFS
-
短作业优先short job first SJF:作业的长短由要求的运行时间来衡量
-
缺点
-
必须预知作业运行时间
-
对长作业不利
-
SJF算法不能实现人机交互
-
完全未考虑作业的紧迫程度
-
-
-
优先级调度算法 proritiy-scheduling algorithm PSA:
-
优先级:作业等待时间FCFS,作业长短SJF,外部赋予作业优先级PSA
-
-
高响应比优先调度算法 Highest Response Ratio Next HRRN:
-
动态优先级
-
进程调度(低级调度)
-
任务
-
保存处理机的现场信息
-
按某种算法选取进程
-
把处理机分配给进程
-
-
调度机制
-
排队器:将来自其他状态的进程插入就绪队列
-
分派器:取出进程,进行从分派器到新进程的上下文切换,将处理器分配给新进程
-
上下文切换器:保存旧进程上下文,切换至分派器程序的上下文,再从分派器切换至新进程上下文
-
-
调度方式
-
非抢占方式Nonpreemptive Mode:
-
运行完毕或异常终止
-
IO请求
-
执行原语操作如Block
-
-
抢占方式 Preemptive Mode: 优先权原则,短进程优先原则,时间片原则
-
进程调度算法
-
轮转调度算法,时间片轮转round robin RR
-
CPU分配给队首进程
-
若运行完毕立即分配给新的队首进程
-
时间片大小确定:略大于一次典型的交互所需要的时间
-
-
优先级调度算法
-
算法类型
-
非抢占式:等待当前进程停止
-
抢占式:立即分配
-
-
优先级类型
-
静态优先级
-
进程类型:系统进程一般先于用户进程
-
进程对资源需求:要求少的优先级高
-
用户要求:紧迫程度及所付费用多少
-
-
动态优先级
-
就绪队列中的进程随等待时间增长,其优先级提高
-
当前进程优先级随运行时间增长而降低,防止一个长作业长期地垄断处理机
-
-
-
-
多队列调度算法
-
多个就绪队列,不同队列采用不同调度算法
-
多处理机系统,为每个处理机设置一个单独的就绪队列
-
-
多级反馈队列调度算法 multileved feedback queue
-
不必事先知道各种进程所需的执行时间
-
调度机制
-
设置多个就绪队列,优先级愈高的队列,时间片愈小
-
每个队列FCFS,最后一个队列除外,用时间片RR调度
-
每个进程在各队列执行一个时间片,若未完成则降至下一队列末尾
-
-
按队列优先级调度
-
若有新进程插入至高优先级队列,当前进程立即放回至原本队列的末尾,处理机分配给新进程
-
-
-
性能
-
终端型用户
-
短批处理作业用户
-
长批处理作业用户
-
-
-
基于公平原则的调度算法
-
保证调度算法:基于进程
-
公平分享调度算法:基于用户(各个用户可能会有不同数量的进程)
-
实时调度
-
HRT Hard real-time,SRT Soft real-time,硬实时,软实时
-
实现实时调度的基本条件
-
知道以下信息:
-
就绪时间
-
开始截止时间和完成截止时间
-
处理时间
-
资源要求
-
优先级
-
-
系统处理能力强
-
采用抢占式调度机制:对于小的实时系统,若能预知任务的开始截止时间,则可用非抢占式的
-
具有快速切换机制
-
对中断的快速响应能力
-
快速的任务分派能力:每个运行功能单位尽量小
-
-
实时调度算法
-
非抢占式
-
非抢占式轮转调度算法
-
非抢占式优先权调度算法
-
-
抢占式
-
基于时钟中断的抢占式优先级调度算法
-
立即抢占的优先级调度算法 Immediate Preemption
-
-
最早截止时间优先算法 EDF Earliest Deadline First
-
截止结束时间越早的优先级越高
-
非抢占式用于非周期实时任务
-
抢占式用于周期实时任务
-
-
最低松弛度优先算法 LLF Least Laxity First
-
松弛度越低越优先执行(在要切换时比较)
-
$$松弛度=完成截止时间 - 本身运行时间 - 当前时间$$
-
一直到必须切换时才切换(B一直运行直到A的松弛度降至0,必须切换时才切换)
-
当前进程执行完后立马切换
-
优先级倒置现象 priority inversion problem
-
原因:优先级$$P_1>P_2>P_$$,$$P_1 和 P_3$$互斥使用临界资源,导致$$P_$$插队
-
解决办法
-
P3进入临界区时,处理机不允许被抢占
-
动态优先级继承,P3进入临界区,继承P1的优先级,P2也无法抢占处理机
-
死锁
资源
-
可重用性资源:可供用户重复使用多次的资源
-
性质
-
不允许多进程共享
-
请求、使用/阻塞、释放(用完需要归还)
-
数量相对固定
-
-
系统调用
-
request/release 设备
-
open/close 文件
-
wait/signal 信号量 PV操作
-
-
-
可消耗性资源:临时性资源,在进程运行期间,由进程动态地创建和消耗的
-
性质
-
单元数目可以不断变化
-
进程运行期间可以创造
-
可以请求消耗若干个,且不再将它们返回给资源类(不需归还)
-
-
通常由生产者创建,消费者消耗,如进程间通信的消息
-
-
可抢占性资源:如CPU和主存 (不引起死锁)
-
不可抢占性资源:如刻录机,磁带机,打印机
死锁的引起
-
竞争不可抢占性资源引起死锁
-
读文件
-
资源分配图:
-
圆圈代表进程,方框是资源
-
进程指向资源代表请求该资源,资源指向进程代表资源已被分配给该进程
-
如下图形成闭环,即死锁
-
-
-
竞争可消耗性资源引起死锁
-
消息:等待一个永远不能生成的消息引起死锁
-
-
进程推进顺序不当引起死锁
-
D是不安全区,继续运行会发生死锁
-
可重用性资源也会因推进顺序不当引起死锁
-
如消费者生产者中的互斥访问量mutex是信号量,PV操作,是可重用性资源
-
-
死锁的定义,必要条件和处理方法
-
死锁定义 Deadlock:
如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的
-
必要条件
-
互斥条件:对资源排它性使用,不共享
-
请求和保持条件:已经保持一个资源,但又提出了新的资源请求,若被阻塞又不释放已有资源
-
不可抢占条件:已获得的资源在使用完前不能被抢占直至自己释放
-
循环等待条件:存在进程-资源循环链 $$\{P_0,P_1,P_2,...,P_n\}$$,P0等P1,P1等P2,Pn等P0
-
-
处理死锁的方法
-
事先预防策略
-
预防死锁:破坏后三个必要条件
-
避免死锁:在资源的动态分配过程中作限制
-
-
事后策略
-
检测死锁:检测死锁的发生
-
解除死锁:将进程从死锁中解脱出来,如撤销部分进程,回收并分配它们的资源
-
-
预防死锁
-
破坏“请求和保持”条件
-
第一种协议:类似于and信号量,要么全分要么不给
-
资源浪费严重:有些资源如打印机可能最后才使用,但过早地被分配
-
进程容易发生饥饿现象:等好久才满足条件
-
-
第二种协议:允许进程获得运行初期所需资源后便开始运行,随后逐步释放已分配且不需要的资源
-
-
破坏“不可抢占”条件
-
提出新的资源请求不可满足时,要释放已有资源
-
释放不可抢占资源如打印机可能会造成前一段工作失效
-
频繁释放和请求,延长周转时间,增加系统开销,降低系统吞吐量
-
-
-
破坏“循环等待”条件
-
方法
-
对资源线性排序
-
每个进程必须按序号递增的顺序请求资源
-
若已有高序号资源时请求低序号资源,则释放全部,重新申请
-
-
给资源定序号的一个方法是根据资源在进程中被使用的先后顺序
-
好处:总有一个进程占据了较高序号的资源,此后申请的资源都是空闲的,可以推进
-
缺点
-
序号要相对稳定
-
实际作业使用资源的顺序和系统规定的顺序有偏差
-
-
避免死锁
-
安全状态
-
系统能按某种进程推进顺序为每个进程分配所需资源,则处于安全状态,该顺序为安全序列,否则是不安全状态
-
处于安全状态就不会进入死锁状态,处于不安全状态可能进入死锁状态
-
避免死锁的实质就是确保系统不进入不安全状态
-
若先分配一个磁带机给$$P_$$,则进入不安全状态
-
银行家算法
-
逻辑
-
首先判断是否有足够资源分配给一个提出需求的进程
-
然后检查分配后系统是否处于不安全状态
-
若处于安全状态才分配资源
-
-
数据结构
-
available向量:对于资源
-
Max,Allocation,Need$$n*$$矩阵:n个进程,m类资源
-
-
算法
-
Request向量,对于进程
-
安全性算法
-
Work向量,对于资源
-
Finish向量:对于进程
-
-
-
例子
-
$$T_$$时刻资源分配表:
-
写出Max, Allocation, Need, Available
-
need = max - allocation
-
available = 总资源数 - 所有分配出去的
-
-
$$T_$$时刻安全性检查:
-
写出Work, Need, Allocation, Work + Allocation, Finish
-
Work初始值为Available
-
从P0到P4比较work和need,不合法就wait,否则分配,更新Work+Allocation
-
最后所有Finish都为True则状态安全
-
-
申请资源时的处理过程:
-
根据Request进行银行家算法检查Need, Available
-
若不通过,则报错或等待
-
若通过则按照request修改
-
Available相应减去request
-
Allocation相应增加
-
Need相应减去
-
-
然后进行该状态的安全性检查
-
-
-
死锁的检测和解除
-
死锁检测
-
资源分配图
-
结点N:进程结点P,资源结点R(表示一类资源,一类资源内部可以有多个资源)
-
边E:资源请求边和资源分配边
-
-
简化过程:
-
找出一个既不阻塞又不独立的进程结点P,消去它的所有请求边和分配边
-
重复该过程,若最后所有边都消去,则该资源分配图是可完全简化的
-
-
死锁定理:当且仅当S状态的资源分配图是不可完全简化的
-
死锁检测的数据结构
-
-
死锁的解除
-
抢占资源:抢占一个或多个进程的资源来分配给死锁进程
-
终止(或撤销)进程
-
终止所有死锁进程
-
逐个终止进程
-
缺点:每终止一个都要再死锁检测
-
代价最小:
-
进程优先级
-
已执行时间,还需多少时间
-
已使用的资源数量,还需要多少资源
-
进程性质是交互式还是批处理
-
-
代价最小算法
-
广搜:枚举所有情况直至死锁状态解除,然后选取代价最小的(如下图)
-
迭代:每次都选取代价最小的,直至死锁状态解除,是以最小代价为优先级的分支限界搜索
-
-
-
-