操作系统复习第三章:处理机调度与死锁

3.1处理机调度的层次和调度算法的目标

处理机调度层次

高级调度
又称为长程调度、作业调度

主要功能:根据某种算法,决定外存上处于后备队列中哪几个作业调入内存,为它们创建进程,分配必要资源,放入就绪队列。

高级调度主要用于多道批处理系统中。

低级调度
又称为进程调度、短程调度。

主要功能:决定就绪队列中哪个进程先获得处理机,并将处理机分配给选中的进程,让它投入执行。

进程调度是最基本的调度,在多道批处理、实时、分时系统中都必须配置进程调度。

中级调度
又称为内存调度或中程调度,主要目的是提高内存利用率和系统吞吐量。

主要功能:按一定的算法将外存中已具备运行条件的进程换入内存,而将内存中处于阻塞状态的某些进程换至外存。

中级调度常用在分时系统及具有虚拟存储器的系统中。实际上就是存储器管理中的对换功能。

处理机调度算法目标

处理机调度算法共同目标:

① 资源利用率
应使系统中处理机和其他所有资源都尽可能保持忙碌状态。

在这里插入图片描述

② 公平性
指各个进程都获得合理的CPU时间,不会发生进程饥饿现象。

③ 平衡性
指调度的算法尽可能保持系统资源使用的平衡性。

④ 策略强制执行
对所制定的策略包括安全策略,只要需要,就必须予以准确地执行。

批处理系统目标:

① 平均周转时间短

周转时间 = 等待时间 + 执行时间

平均周转时间
在这里插入图片描述
带权周转时间
(Ti:作业i的周转时间,Ts:系统为它提供的服务时间)

在这里插入图片描述
② 系统吞吐量高
指单位时间内,系统完成的作业数。

③ 处理机利用率高

分时系统目标

① 响应时间快

② 均衡性

实时系统目标

① 截止时间的保证

② 可预测性

3.2 作业与作业调度

在多道批处理系统中,作业是用户提交给系统的一项相对独立的工作。

作业(Job)
作业步(Job Step)
作业控制块 (JCB)

作业运行的三种状态:
后备状态、运行状态、完成状态

作业运行的三个阶段:
收容阶段、运行阶段、完成阶段

作业调度的主要任务

① 接纳多少个作业
在每一次进行作业调度时,应当从后备队列中选取多少作业调入内存,取决于多道程序度(Degree of Multiprogramming)。

② 接纳哪些作业
选择后备队列中的哪些作业调入内存,取决于所采用的调度算法。

先来先服务调度算法(FCFS)

当在作业调度中采用该算法时,优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程。然后把它放入就绪队列。

当在进程调度中采用FCFS 算法时,每次调度是从就绪的进程队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后,进程调度程序才将处理机分配给其它进程。

优点:简单公平,有利于长作业。
缺点:不利于短作业。
在这里插入图片描述
周转时间:TA=1,TB=100,TC=199,TD=199
平均周转时间= [ (0+1) + (0+100) +(99+100) + (198+1) ]/4=124.75
带权周转时间:WA=1,WB=1,WC=1.99,WD=199
平均带权周转时间:W= (1/1+100/100+199/100+199/1)/4=50.7475

短作业优先调度算法(SJF)

SJF算法是以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。

优点:降低了系统平均周转时间。
缺点:必须预知作业的运行时间,对长作业不利,无法实现人机交互,未完全考虑作业紧迫程度,紧迫性的作业可能无法得到及时处理。

优先级调度算法(PSW)

在优先级调度算法中,是基于作业的紧迫程度,由外部赋予作业相应的优先级,调度算法是根据该优先级进行调度的。这样就可以保证紧迫性作业优先运行。

高响应比优先调度算法(HRRN)

高响应比优先调度算法既考虑作业的等待时间又考虑作业运行时间的调度算法,既照顾了短作业,又不致使长作业的等待时间过长,从而改善了处理机调度的性能。

优先权Rp:
在这里插入图片描述

3.3进程调度

进程调度任务
  1. 保存处理机现场信息
  2. 按某种算法选取进程
  3. 把处理器分配给进程
进程调度机制

实现进程调度,应具有如下三个基本部分:

  1. 排队器
  2. 分派器
  3. 上下文切换器
进程调度方式

① 非抢占方式
一旦把处理机分配给某进程后,就一直让它运行下去,决不会因为时钟中断或任何其它原因去抢占当前正在运行进程的处理机,直至该进程完成,或发生某事件而被阻塞时,才把处理机分配给其它进程。
在采用非抢占调度方式时,可能引起进程调度的因素可归结为:

  • 正在执行的进程运行完毕,或因发生某事件而使其无法再继续运行;
  • 正在执行中的进程因提出IO请求而暂停执行;
  • 在进程通信或同步过程中,执行了某种原语操作,如Block原语。这种调度方式的优点是实现简单,系统开销小,适用于大多数的批处理系统。但它不能用于分时系统和大多数实时系统。

② 抢占方式
允许调度程序根据某种原则,去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一进程。

在现代OS中广泛采用抢占方式,这是因为:
对于批处理机系统,可以防止一个长进程长时间地占用处理机,以确保处理机能为所有进程提供更为公平的服务。
在分时系统中,只有采用抢占方式才有可能实现人一机交互。
在实时系统中,抢占方式能满足实时任务的需求。但抢占方式比较复杂,所需付出的系统开销也较大。

“抢占”必须遵循一定的原则。主要原则有:

  • 优先权原则
  • 短进程优先原则
  • 时间片原则

轮转调度算法

轮转法基本原理:
时间片轮转(RR) 法中,系统将所有的就绪进程按FCFS策略排成一个就绪队列。系统可设置每隔一定时间(如30 ms)便产生一次中断,去激活进程调度程序进行调度,把 CPU分配给队首进程,并令其执行一个时间片。当它运行完毕后,又把处理机分配给就绪队列中新的队首进程,也让它执行一个时间片。这样,就可以保证就绪队列中的所有进程在确定的时间段内,都能获得一个时间片的处理机时间。

进程切换时机
可分为两种情况:
① 若一个时间片尚未用完,正在运行的进程便已经完成,就立即激活调度程序,将它从就绪队列中删除,再调度就绪队列中队首的进程运行,并启动一个新的时间片。
② 在一个时间片用完时,计时器中断处理程序被激活。如果进程尚未运行完毕,调度程序将把它送往就绪队列的末尾。

时间片大小的确定
一个较为可取的时间片大小是略大于一次典型的交互所需要的时间,使大多数交互式进程能在一个时间片内完成,从而可以获得很小的响应时间。

优先级调度算法

优先级调度算法类型:

(1)非抢占式优先级调度算法。
该算法规定,一旦把处理机分配给就绪队列中优先级最高的进程后,该进程便一直执行下去直至完成,或者因该进程发生某事件而放弃处理机时,系统方可将处理机重新分配给另一优先级最高的进程。

(2)抢占式优先级调度算法。
把处理机分配给优先级最高的进程,使之执行。但在其执行期间,只要出现了另一个其优先级更高的进程,调度程序就将处理机分配给新到的优先级最高的进程。
抢占式的优先级调度算法常用于对实时性要求较高的系统中。

优先级类型

静态优先级
静态优先级是在创建进程时确定的,在进程的整个运行期间保持不变。优先级是利用某一范围内的一个整数来表示的,例如0~255中的某一整数,又把该整数称为优先数。

静态优先级法简单易行,系统开销小,但不够精确,可能会出现优先级低的进程长期没有被调度的情况。

动态优先级
动态优先级是指在创建进程之初,先赋予其一个优先级,然后其值随进程的推进或等待时间的增加而改变,以便获得更好的调度性能。

多队列调度算法

该算法将系统中的进程就绪队列拆分为若干个,将不同类型或性质的进程固定分配在不同的就绪队列,不同的就绪队列采用不同的调度算法,一个就绪队列中的进程可以设置不同的优先级,不同的就绪队列本身也可以设置不同的优先级。
多队列调度算法由于设置多个就绪队列,因此对每个就绪队列就可以实施不同的调度算法,因此,系统针对不同用户进程的需求,很容易提供多种调度策略。

多级反馈队列调度算法

调度机制:

  1. 设置多个就绪队列(按队列先后顺序优先级递减,时间片大小递增)
  2. 每个队列都采用FCFS算法
  3. 按队列优先级调度

多级反馈队列的优势有以下几点:
① 终端型作业用户: 短作业优先。
② 短批处理作业用户: 周转时间较短。
③ 长批处理作业用户: 经过前面几个队列得到部分执行,不会长期得不到处理。

在这里插入图片描述

3.4 实时调度

实现实时调度的基本条件

  • 提供必要的信息(就绪时间,优先级、…截止时间)
  • 系统处理能力强
  • 采用抢占式调度机制
  • 具有快速切换机制

实时调度算法的分类

非抢占式调度算法:

  1. 非抢占式轮转调度算法
  2. 非抢占式优先调度算法

抢占式调度算法

  1. 基于时钟中断的抢占式优先级调度算法
  2. 立即抢占的优先级调度算法

最早截止时间优先调度算法(EDF)

该算法是根据任务的截止时间确定任务的优先级,任务的截止时间愈早,其优先级愈高。调度程序在选择任务时,总是选择就绪队列中的第一个任务,为之分配处理机。

  1. 非抢占式调度方式用于非周期实时任务
  2. 抢占式调度方式用于周期性实时任务

最低松弛度优先(LLF)算法

该算法在确定任务的优先级时,根据的是任务的紧急(或松弛)程度。任务紧急程度愈高,赋予该任务的优先级就愈高,以使之优先执行。

优先级倒置

系统中高优先级进程(或线程)被低优先级进程(或线程)延迟或阻塞的现象。

解决办法:

方法一:
假如进程P3在进入临界区后P3所占用的处理机就不允许被抢占。于是P3就有可能会较快地退出临界区,不会出现上述情况。如果系统中的临界区都较短且不多,该方法是可行的。反之,如果P3临界区非常长,则高优先级进程P1,仍会等待很长的时间,其效果是无法令人满意的。
方法二:
建立在动态优先级继承基础上。当高优先级进程P1要进入临界区,去使用临界资源R,如果已有一个低优先级进程P3正在使用该资源,此时一方面P1被阻塞,另一方面由P3继承P1的优先级,并一直保持到P3退出临界区。这样做的目的在于不让比P3优先级稍高,但比P1优先级低的进程如P2进程插进来,导致延缓P3退出临界区。该方法已在一些操作系统中得到应用,而在实时操作系统中是必须的。

3.5 死锁概述

所谓死锁,是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。

死锁产生原因:

  1. 竞争不可抢占性资源引起死锁
  2. 竞争可消耗资源引起死锁
  3. 进程推进顺序不当引起死锁

在这里插入图片描述

产生死锁必要条件

(缺少任一条件死锁就不会发生)

1. 互斥条件
2. 请求和保持条件
3. 不可抢占条件
4. 循环等待条件

处理死锁的方法:

  1. 预防死锁
  2. 避免死锁
  3. 检测死锁
  4. 解除死锁

3.6 预防死锁

预防死锁一般破坏后三种条件,破坏互斥条件而预防死锁的方法不太可行,在有的场合应该保护这种互斥性。比如有些资源根本不能同时访问,如打印机等临界资源只能互斥使用。

破坏请求和保持条件

第一种协议:
所有进程在开始运行之前,必须一次性地申请其在整个运行过程中所需的全部资源。此时若系统有足够的资源分配给某进程,便可把其需要的所有资源分配给它。这样,该进程在整个运行期间,便不会再提出资源要求,从而破坏了“请求”条件。
优点:简单、易行、安全。
缺点:严重降低资源利用率,使进程经常发生饥饿现象。

第二种协议:
允许一个进程只获得运行初期所需的资源后,便开始运行。进程运行过程中再逐步释放已分配给自己的、且已用毕的全部资源,然后再请求新的所需资源。

优点:使进程更快地完成任务,提高设备的利用率,还可减少进程发生饥饿的几率。

破坏不可抢占条件

当一个已经保持了某些不可被抢占资源的进程,提出新的资源请求而不能得到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请。这意味着进程已占有的资源会被暂时地释放,或者说是被抢占了,从而破坏了“不可抢占”条件。

缺点:实现起来复杂,且延长了进程周转时间,增加了系统开销,降低了系统吞吐量。

破坏循环等待条件

采用顺序资源分配法。首先给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源一次申请完。也就是说,只要进程提出申请分配资源R;则该进程在以后的资源申请中就只能申请编号大于R的资源。

优点:与前两种方法相比,资源利用率和系统吞吐量有所改善。
缺点:编号必须相对稳定,限制了新类型设备的增加;经常会发生作业使用资源的顺序与系统规定顺序不同的情况,造成资源的浪费;此外会给用户的编程带来麻烦。

3.7 避免死锁

避免死锁的实质:系统在进行资源分配时,应使系统不进入不安全状态。

安全状态与不安全状态:
指系统能按某种进程推进顺序(P1, P2,…,Pn)为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。此时称(P1, P2,…,Pn)为安全序列。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。

当系统进入不安全状态后,就有可能进入死锁状态。但只要系统处于安全状态,系统便不会进入死锁状态。

判断系统在某时刻是否安全,就是要看这个时刻是否存在一个安全序列!

银行家算法避免死锁

银行家算法中数据结构:

  1. 可利用资源向量 Available[j] = k, 表示系统中现有 Rj 类资源 k 个。
  2. 最大需求矩阵 Max[i,j] = k, 表示进程 i 需要 Rj 类资源最大数目为 k 个。
  3. 分配矩阵 Allocation[i,j] = k, 表示进程 i 当前已分得 Rj 类资源数目为k 个。
  4. 需求矩阵 Need[i,j] = k, 表示进程 i 还需要 Rj 类资源 k 个才能完成工作。

由此可知:Need[i,j] = Max[i,j] - Allcation[i,j]

银行家算法步骤:

在这里插入图片描述

安全性算法

在这里插入图片描述
在这里插入图片描述

3.8 死锁的检测与解除

死锁的检测

在这里插入图片描述
圆圈代表进程,方框代表一类资源,方框中圆点代表资源。

死锁定理:

利用把资源分配图加以简化的方法,来检测当系统处于S状态时,是否为死锁状态。简化方法如下:

在资源分配图中,找出一个既不阻塞又非独立的进程结点Pi。在顺利的情况下,Pi可获得所需资源而继续运行,直至运行完毕,再释放其所占有的全部资源,这相当于消去Pi的请求边和分配边,使之成为孤立的结点。重复上述过程,若能消去图中所有的边,使所有的进程结点都成为孤立结点,则称该图是可完全简化的;若不能通过任何过程使该图完全简化,则称该图是不可完全简化的。

所有的简化顺序都将得到相同的不可简化图。

S为死锁状态的充分条件是:当且仅当S状态的资源分配图是不可完全简化的。该充分条件被称为死锁定理

死锁的解除

解除死锁方法:

一、立即通知操作员,人工解决。

二、采取死锁解除算法,主要方法如下:

  1. 抢占资源法 (从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态)

  2. 撤销进程法 (终止(或撤消)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来)

  3. 进程回退法 (让一些进程回退到足以回避死锁的地步,进程回退时自愿释放资源而非被剥夺。要求系统保持进程的历史信息,设置还原点。)


银行家算法课本例题:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


习题

1 .采用时间片轮转调度算法是为了( A )。
A、多个终端用户能得到系统的及时响应
B、先来先服务
C、需CPU最短的进程先执行
D、优先级高的进程能得到及时调度

2 . 时间片轮转调度算法经常用于( C)。
A、单用户操作系统
B、实时系统
C、分时操作系统
D、批处理系统

3 .在引入线程的操作系统中,独立调度和分派任务的基本单位是( 线程),资源分配的基本单位是( 进程)。

4 .某系统中有3个并发进程,都需要同类资源4个,试问该系统一定不会发生死锁的最少资源数是(10 )。


所学课本:
计算机操作系统 第四版(汤小丹等)西安电子科技大学出版社
王道操作系统复习指导(王道论坛)电子工业出版社

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Andy.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值