操作系统笔记第三章【处理机调度与死锁】
处理机调度与死锁
处理机调度的层次和调度算法的目的
调度的实质是一种资源分配。
三种调度中进程调度(低级调度)的运用频率最高。
处理器调度的层次
- 高级调度
又称长程调度或作业调度,调度对象是作业。
根据某种算法,决定将外存上处于后备队列的哪几个作业调入内存,为它们创建、分配必要的资源,并将它们放入就绪队列。
高级调度主要用于多道批处理系统中,分时和实时系统不设置高级调度。
- 低级调度
又称为进程调度或短程调度,调度对象是进程。
根据某种算法决定就绪队列中哪个进程应获得处理机,并由分派系统将处理机分配给被选中的进程。
在多道批处理、分时、实时系统中都必须配置这种调度。
- 中级调度
中级调度又称内存调度。
目的:提高内存利用率和系统吞吐量。
处理器调度算法的目标
- 处理器调度算法的共同目标
- 资源利用率
CPU的利用率=\frac{CPU有效工作时间}{CPU有效工作时间+CPU空闲等待时间}CPU有效工作时间+CPU空闲等待时间CPU有效工作时间
- 公平性
诸进程都获得合理的CPU时间,不会发生饥饿现象。
- 平衡性
为了使CPU和各种外设都经常处于忙碌状态
- 策略强制执行
对所制定的策略其中包括安全策略,只要需要,就必须予以准确执行,及时回造成工作延迟也要执行。
- 资源利用率
- 批处理系统的目的
- 平均周转时间短
周转时间:作业被提交给系统开始,到作业完成为止这段时间间隔。
平周周转时间描述为:T=\frac{1}{n}[\sum_{i=1}^{n}T_i]T=n1[∑i=1nTi]
平均带权周转时间可表示为:W=\frac{1}{n}[\sum_{i=1}^{n}\frac{T_i}{T_s}]W=n1[∑i=1nTsTi] - 系统吞吐量高
吞吐量是指单位时间内系统完成的作业数。与批处理作业的平均长度有关。
- 处理机利用率高
- 平均周转时间短
- 分时系统的目标
- 响应时间快
- 均衡性
- 实时系统的目标
- 截止时间的保证
- 可预测性
作业与作业调度
批处理系统中的作业
在多道批处理系统中,作业是用户提交给系统的一项相对独立的工作。
-
作业和作业步
- 作业
一个比程序更广泛的概念,不仅包括了通常的程序和数据,也配有一份作业说明书。在批处理系统中,是以作业为基本单位调入内存的。
- 作业步
在作业运行期间,每个作业都必须经过若干个相对独立,又相互关联的顺序加工步骤才能得到结果。我们把每一个加工步骤称为一个作业步。
-
作业和控制块
在多道批处理系统中,为每个作业设置了一个作业控制块JCB。JCB包括内容有:作业识别、用户名称、用户账号、作业类型、作业状态、调度信息、资源需求、资源使用情况等。
-
作业运行的三个阶段和三种状态
作业从进入系统到运行结束,通常需要经历收容、运行、完成三个阶段。相应的作业就有了“后备阶段”、“运行阶段”和“完成阶段”。
- 收容阶段:通过某种输入方式或SPOOL系统输入到硬盘上,再为该作业建立JCB,并把它放入作业后备队列中。
- 运行阶段:当作业被作业调度后,便为它分配必要的资源和建立过程,并将它放入就绪队列。
- 完成阶段:作业完成、或发生异常情况提前结束时,作业便会进入“完成阶段”。
作业调度的主要任务
作业调度的主要任务是,根据JCB中的信息,检查系统中的资源能否满足作业对资源的需求,以及按照一定算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。
- 接纳多少个作业
- 接纳哪些作业
先来先服务(FCFS)和短作业优先(SJF)调度算法
- 先来先服务调度算法
FCFS是最简单的调度算法,该算法即可用于作业调度,也可用于进程调度。
- 短作业优先的调度算法
SJF算法是以作业的长短来计算优先级,作业越短,优先级越高。
缺点: 1. 必须预知作业的运算时间。 2. 对长作业非常不利 3. 在采用SJF算法时,人——机无法实现交互 4. 该算法完全未考虑作业的紧迫程度
优先级调度算法和高响应比优先调度算法
- 优先级调度算法
该算法用于作业调度时,系统从后备队列中选择若干个优先级最高的作业进入内存。
- 高响应比优先调度算法
优先权=\frac{等待时间+要求服务时间}{要求服务时间}优先权=要求服务时间等待时间+要求服务时间
等待时间与服务时间之和就是系统对该作业的响应时间,故该优先级又相当于相应比R_pRp据此,优先级又可以表示为:
R_p=\frac{响应时间}{要求服务时间}Rp=要求服务时间响应时间
进程调度
进程调度是OS中必不可少的一种调度。
进程调度的任务、机制和方式
- 进程调度的任务
- 保存处理机的现场信息
- 按某种算法选取进程
- 把处理器分配给进程
- 进程调度机制
- 排队器:为了实现进程调度的效率
- 分派器
- 上下文切换器
- 进程调度方式
- 非抢占方式
- 抢占方式
轮转调度算法
分时系统中,最简单的也是交常用的是基于时间片的轮转(RR)调度算法。
- 轮转法的基本原理
将CPU分配给队首进程,令其执行。当该进程的时间片耗尽或者运行完毕时,系统再次将CPU分配给新的队首进程。
- 进程调度切换时机
①若一个时间片尚未用完,正在运行的进程便已经完成,就立即激活调度程序,将它从就绪队列中删除,在调度就绪队列中队首的进程运行,并启动一个新的时间片。
②在一个时间片用完时,计数器终端处理程序被激活。如果进程尚未运行完毕,调度程序将把它送往就绪队列的末尾。
周转时间=作业完成时刻—作业到达时刻;
带权周转时间=周转时间/服务时间;
平均周转时间=作业周转总时间/作业个数;
平均带权周转时间=带权周转总时间/作业个数;
- 时间片大小的确定
优先级调度算法
- 优先级调度算法类型
- 非抢占优先级调度算法
处理器分配给就绪队列最高的进程之后便会一直执行下去
- 抢占式优先级调度算法
进程执行的时候,只有出现了优先级更高的进程便会分配给新进程。
- 非抢占优先级调度算法
- 优先级的类型
- 静态优先级
在创建进程时确定,在进程的整个运行期间保持不变。
- 动态优先级
在创建之初先赋予一个优先级,然后随着进程的推进而改变。
- 静态优先级
多级队列调度算法
在进程调度时,由于系统中仅设置一个进程的就绪队列,即低级调度算法是固定的、单一的,无法满足系统中不同用户对进程的调度策略的不同需求。
该算法将系统中的进程就绪队列从一个拆分为若干个,将不同类型或性质的进程固定分配在不同的就绪队列,不同的就绪队列采用不同的调度算法。
多级反馈队列调度算法
- 调度机制
- 设置多个就绪队列
第一个队列优先级最高,第二个次之,此后类推。优先级越高的时间片越小。
- 给每个队列都采用FCFS算法
新进程都放入第一个队列,如果一个时间片未完成放入第二个队、、、当被降到第n个队列中,便采用RR方式运行。
- 按队列优先级调度
调度程序首先调度最高优先级队列中的进程运行,第一个队列空闲时才会运行第二队列、、
- 设置多个就绪队列
- 调度算法的性能
- 终端型用户
- 短批处理作业用户
- 长批处理用户
基于公平原则的调度算法
- 保证调度算法
- 跟踪计算每个进程自创建以来已经执行的处理时间
- 计算每个进程应获得的处理机时间,即自创建以来的时间除以n
- 计算进程获得处理机时间的比率,即进程实际执行的处理时间和应获得的处理机时间只比
- 比较各进程获得处理机时间的比率。比如进程A的比率最低,为0.5,而进程B的比率为0.8,进程C的比率为1.2等
- 调度程序应选择比率最小的进程将处理机分配给它,并让该进程一直运行,直到超过最接近它的进程比率为止。
- 公平分享调度算法
实时调度
在实时系统中,存在两种不同性质的实时服务,即HRT任务和SRT任务。
实时调度比如能满足实时任务对截止时间的要求。
实现实时调度的基本条件
- 提供必要信息
- 就绪时间
- 开始截止时间和完成截止时间
- 处理时间
- 资源要求
- 优先级
- 系统处理能力强
单处理机情况下必须满足:\sum_{i=1}^{m} \frac{C_i}{P_i}\leq1∑i=1mPiCi≤1
上述条件为考虑到任务切换所花费时间,因此应适当留有余地。 - 采用抢占调度机制
在含有HRT任务的实时系统中,广泛采用抢占机制。
- 具有快速切换机制
- 对中断的快速响应能力
- 快速任务的分派能力
实时调度算法的分类
- 非抢占式调度算法
- 非抢占轮转调度算法
- 非抢占优先调度算法
- 抢占式调度算法
- 基于时钟中断抢占的优先级调度算法
- 立即抢占
最早截止时间优先算法(EDF)
该算法根据截止时间确定任务的优先级,任务的截止时间越早,优先级越高。
- 非抢占式调度方式用于非周期实时任务
- 抢占式调度方式用于周期实时任务
最低腮松弛优先算法(LLF)
松弛度=必须完成时间-自身的运行时间-当前时间
优先级倒置
- 优先级倒置的形成
- 优先级倒置的解决方法
死锁概述
资源问题
- 可重用性资源和消耗性资源
- 可重用资源
可重用性资源是一种可供用户重复使用的资源,它具有如下性质: 1. 每个可重用性资源中的单元只能分配给一个进程使用。 2. 进程使用可重用资源时,分顺序:①请求资源;②使用资源;③释放资源 3. 系统中每一类可重用资源中的单元数目都是相对固定的。
- 可消耗资源
可重用性资源又被称为临时资源,由进程动态地创建和消耗。 1. 每一类可消耗资源数目单位都是可以不断变化的。 2. 进程在运行过程中,可以不断创造和消耗资源。 3. 进程在运行过程中,可用自己消耗,不在返还。
- 可重用资源
- 可抢占性资源和不可抢占资源
- 可抢占资源
CPU和主存均属于可抢占资源。
- 不可抢占资源
一旦系统吧某资源分配给该进程后,只能在进程用完后自己释放。
- 可抢占资源
计算机系统中的死锁
死锁的起因通常是源于多个进程对资源的争夺
- 竞争不可抢占性资源引起死锁
- 竞争可消耗资源引起死锁
- 进程推进顺序不当引起死锁
死锁的定义、必要条件和处理方法
- 死锁的定义
如果一组进程中每一个进程都在等待仅由该组进程中其他进程才能引发的事件,那么该组进程是死锁的。
- 产生死锁的必要条件
- 互斥条件
- 请求和保持条件
- 不可抢占条件
- 循环等待条件
- 处理死锁的方法
- 预防死锁
- 避免死锁
- 检测死锁
- 解除死锁
预防死锁
预防思索的方法是通过破坏产生死锁的四个必要条件中的一个或几个,以避免发生死锁。由于互斥条件是共享设备所必须的,因此主要是破坏产生死锁的后三个条件。
破坏和保持条件
- 第一种协议
这种协议规定:所有程序在开始运行之前,必须一次性申请其在整个运行过程中所需的全部资源。
缺点:①资源被严重浪费;②进程经常会发生饥饿现象。 - 第二种协议
对第一种协议的一种改进,它允许一个进程只获得运行初期所需的资源后,便开始运行。
破坏不可抢占条件
当一个已经保持了某些不可抢占资源的进程,提出新的资源请求而不能得到满足时,它必须释放已经保持的所有资源,待以后需要时重新申请。
破坏循环等待条件
规定每个进程必须按序号递增的顺序来请求资源。
避免死锁
在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁。
系统安全状态
- 安全状态
- 安全状态之例
- 由安全状态向不安全状态的转换
利用银行家算法避免死锁
死锁的检测与解除
- 死锁检测算法
- 死锁接触算法
死锁的检测
死锁的解除
- 终止所有的死锁进程
- 终止所有的死锁进程
- 逐个终止进程
- 付出代销最小的死锁算法
习题
-
高级调度和低级调度的主要任务是什么?为什么要引入中级调度?
高级调度的主要任务:用于决定把外存上处于后备队列的哪些作业调入内存,并为它们创建进程,分配必要的资源,然后再将新创建的进程插入就绪队列上,准备执行。 低级调度的主要任务:用于决定就绪队列中哪个进程应获得处理机,然后再由分配程序执行将处理机分配给该进程的具体操作。 引入中级调度的主要目的:为了提高系统资源的利用率和系统吞吐量。
-
处理机调度算法的共同目标是什么?批处理系统调度的目标又是什么?
①资源利用率、公平性、平衡性、策略强制执行。 ②平均周转时间短、系统吞吐量高、处理机利用率高
-
何为作业、作业步、作业流
作业:作业是一个比程序更广泛的概念,包括程序,数据,作业说明书。 作业步:把作业的每一个加工步骤称为一个作业步。 作业流:是指若干个作业进入系统后依次存放在外存上形成的输入作业流。
-
在什么情况下需要使用作业控制块JCB,其中包含了那些内容?
每当作业进入系统时,系统便为每一个作业建立一个作业控制块PCB,根据作业将它插入到相应的后备队列中。JCB包括的内容通常有:作业识别、用户名称、用户账号、作业类型、作业状态、调度信息、资源需求、资源使用情况等。
-
试说明低级调度的主要功能
保存处理机的现场信息、按某种算法选取进程、把处理器分配给进程 ``
-
在批处理系统、分时系统和实时系统中,各采用哪几种进程(作业)调度算法?
批处理系统的调度算法:作业优先、优先权、高响应比优先、多级反馈队列调度算法。分时系统调度算法:时间片轮转法。实时系统的调度方法:最早截止时间优先即EDF、最低松弛度优先即LLF算法。
-
时间轮调度算法中,应如何确定时间片大小?
时间片应略大于一次典型的交互所需要的时间。一般应考虑三个因素:系统对相应时间的要求、就绪队列中进程的数目和系统的处理能力。
-
为什么说传统的几种调度算法都不能算是公平调度算法?
以上介绍的几种调度算法所保证的只是优先运行,如优先级算法是优先级最高的作业优先运行,但并不保证作业占用了多少处理机时间。另外也未考虑到调度的公平性。
-
按照调度方式可将实时调度算法分为几种?
可分为非抢占和抢占两种算法。而非抢占又分为非抢占式轮转和优先调度算法;抢占式调度算法又分为基于时钟中断的抢占式优先权和立即抢占式优先权调度算法。
-
何谓死锁?产生死锁的原因和必要条件是什么?
答: (1) 死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进; (2)产生死锁的原因有二,一是竞争资源,二是进程推进顺序非法; (3)必要条件是:互斥条件,请求和保持条件,不剥夺条件和环路等待条件。