计算机操作系统 (第四版汤小丹老师) 复习笔记第三章

教材为西安电子科技大学 汤小丹老师 第四版

在多道程序环境下,内存中存在着多个进程,其数目往往多于处理机数目。这就要求系统能按照某种算法,动态地将处理机分配给处于就绪状态的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。对于大型系统运行时的性能,如系统吞吐量,资源利用率,作业周转时间或响应的及时性等,在很大程度上都取决于处理机调度性能的好坏。因而,处理机调度便成为OS中至关重要的部分。

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

人们一般都认为,在计算机系统中,中央处理机CPU是最重要的资源。每一个提交给计算机的任务都必须使用CPU。 CPU管理的主要任务是对处理机时间进行分配,也就是按照一定的策略将CPU运行时间分配给各个用户以满足用户的要求,同时要考虑到充分利用CPU来提高它的效率。这就是处理机调度的主要功能。

在多道程序系统中,调度的实质是一种资源分配,处理机调度是对处理机资源进行分配。处理机调度算法是指根据处理机分配策略所规定的处理机分配算法。在多道批处理系统中,一个作业从提交到获得处理机执行,直至作业运行完毕,可能需要经历多级处理机调度。

3.1.1处理机调度的层次

高级调度:即作业调度或长程调度。其任务是对那些提交给系统后被收容的作业, 按照一定策略选择出某些作业, 为其分配内存等必要的资源,建立与之对应的进程(可能是多个进程), 并将进程的PCB表放入就绪队列中, 使其具备参与竞争使用CPU的权利。

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

低级调度:即进程调度或短程调度。
其任务是在进入内存并处于就绪队列的进程中,确定哪个进程真正获得CPU及其使用CPU的时间。用执行指针指向选中进程的PCB表,将它从就绪队列移出并重布现场,使其运行。

中级调度:又称为内存调度或交换调度或中程调度。
将就绪状态细化为内存就绪和外存就绪状态,阻塞状态细化为内存阻塞和外存阻塞状态后,中级调度完成进程在内存与外存之间的对换。其任务是周期性地将那些在内存中暂时不用的进程换出并放到外存,而将那些在外存上需要运行的进程换入到内存。

3.1.2 处理机调度算法的目标

在操作系统设计中如何选择调度方式和算法,通常取决于操作系统的类型及其设计目标。

处理机调度算法的共同目标
(1)资源利用率:系统最重要的资源就是CPU。 CPU 的利用率 = CPU 的有效工作时间 / (CPU 的有效工作时间 + CPU 空闲等待时间)

(2)公平性:公平性是指所有的进程都获得合理的CPU时间,不会发生饥饿现象。但公平是相对的。

(3)平衡性:保持系统资源使用的平衡性。

(4)策略强制执行:如安全策略

批处理系统的目标

(1)平均周转时间短

(2)系统吞吐量高。吞吐量:单位时间内所完成的作业数,跟作业本身特性和调度算法都有关系。

(3)处理机利用率高。对于大、中型计算机尤为重要(CPU昂贵) ,故调度选择计算量大的作业可提高CPU的利用率。

分时系统的目标

(1)响应时间快。响应时间是从用户从键盘提交一个请求开始,直到屏幕上显示出处理结果为止的一段时间间隔。

(2)均衡性。均衡性是指系统响应时间的快慢应与用户所请求服务的复杂性相适应。通常,用户对较复杂的任务的响应时间允许较长。

实时系统的目标

(1)截止时间的保证。截止时间是指某任务必须开始执行的最迟时间,或必须完成的最迟时间。 实时任务又分为硬实时任务与软实时任务之分。

(2)可预测性。实时系统中可预测性非常重要,如视频播放应具有连续性,应具有提前下载的功能,提高并发性。

3.2作业与作业调度

3.2.1批处理系统中的作业

作业和作业步
1)作业:用户在一次解题过程中或一个事务处理中要求计算机系统所作工作的总和,它是用户向计算机系统提交一项工作(任务)的基本单位。
–用户的观点:在一次业务处理过程中,从输入程序和数据到输出结果的全过程。
–系统的观点(针对作业进行资源分配):作业由程序及数据 (作业体)和作业说明书(作业控制语言)构成。
2)作业步:是在一个作业的处理过程中,计算机所做的相对独立的工作。

作业控制块(JCB)

  • 预输入程序从输入设备上接收作业信息(即作业说明书、程序 和数据),把作业组织成文件送到磁盘上的特定空间(称为输 入井),同时,系统应把所录入的作业进行登记,登记在一张 作业控制表中。每一个进入系统的作业均占据作业控制表中的 一个表项,该表项称之为作业控制块。此时,作业建立完成。
  • JCB包含了对作业进行管理控制所必需的信息。作业控制块是 作业在系统中存在的标志。作业控制块的内容也是作业调度的 依据。
  • 从系统管理的角度看,作业的建立过程就是申请一个空白的作 业控制表项,填写作业控制块。
  • 通常在JCB中包含的内容有:作业标识,用户名称,用户账号,作业类型(CPU繁忙型,I/O繁忙型,批量型,终端型),作业状态,调度信息(优先级,作业运行时间),资源需求(预计运行时间,要求内存大小等),资源使用情况等。

作业运行的三个阶段和三种状态
作业从进入系统到运行结束,通常要经历收容、运行、和完成三个阶段。

收容阶段。用户作业从提交到放入作业后备队列中,此时作业为后备状态。
运行阶段。作业被调度进内存,建立进程控制块,进入就绪队列直至运行结束,此期间作业均为运行状态。
完成阶段:当作业完成或异常结束时,进入完成阶段,此时作业为完成状态,等待回收资源。

3.2.2作业调度的主要任务

作业调度的主要任务是根据JCB中的信息,检查资源需求, 并按一定的调度算法,从外存的后备队列中选取某些作业到 内存中来,为其创建进程。故作业调度也称为接纳调度。

作业调度的主要工作:
(1)接纳多少个作业:从后备队列中选取多少作业进入内存,取决于多道程序度,允许多少个作业同时在内存中运行。
(2)接纳哪些作业:选择后备队列中的哪些作业进入内存,取决于调度算法。
作业调度的目标是使作业运行最大限度地发挥各种资源的利用率,并保持系统内各种活动的充分并行。

3.2.3先来先服务和短作业优先调度算法

先来先服务调度算法(FCFS)。系统将按照作业到达的先后次序来进行调度。

短作业(进程)优先调度算法(SJF),是指对短作业或短进程优先调度的算法。作业的长短是以作业所要求的运行时间来衡量的。SJF算法可以分别用于作业调度和进程调度。该算法,是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。

SJF调度算法也存在不容忽视的缺点:
(1) 该算法对长作业不利。
(2) 该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)会被及时处理。
(3) 由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。

3.2.4优先级调度算法和高响应比优先调度算法

优先级调度算法(PSA)。通常优先级是指依据作业的重要紧迫程度而设置的优先级,级别高的作业可以获得优先调度。

高响应比优先调度算法(HRRN)
优先权的变化规律可描述为:
优先权 = (等待时间 + 要求服务时间) / 要求服务时间

由于等待时间与服务时间之和,就是系统对该作业的响应 时间,故该优先权又相当于响应比RP。据此,又可表示为:
优先权 = (等待时间 + 要求服务时间) / 要求服务时间 = 响应时间 / 要求服务时

由公式可知:
(1) 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业。
(2) 当要求服务的时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,因而它实现的是先来先服务。
(3) 对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高, 从而也可获得处理机。

3.3进程调度

3.3.1进程调度的任务、机制和方

进程调度的任务

  • 保存处理机的现场信息
  • 按某种算法选取进程
  • 将处理器分配给进程

进程调度机制

  • 排队器:将就绪进程插入到相应的就绪队列
  • 分派器:从就绪队列挑选进程运行
  • 上下文切换:当前进程->分派器->新选进程 (为节省切换时间,可采用2组或多组寄存器)

进程调度方式
1)非抢占方式
采用这种调度方式时,一旦把处理器分配给某个进程后,就一直让它运行下去,决不会因为时钟中断或任何其它原因去抢占当前正在运行进程的处理机。

在采用非抢占调度方式时,可能引起进程调度的因素可归结为这样几个:

  • 正在执行的进程执行完毕, 或因发生某事件而不能再继续执行;
  • 执行中的进程因提出I/O请求而暂停执行;
  • 在进程通信或同步过程中执行了某种原语操作,如Block原语等。
    这种调度方式的优点是实现简单、系统开销小,适用于大多数的批处理系统环境。但它难以满足紧急任务的要求——立即执行,因而可能造成难以预料的后果。显然,在要求比较严格的实时系统中,不宜采用这种调度方式。

2)抢占方式
抢占不是一种任意性行为,必须遵循一定的原则。
抢占的原则有:
(1) 优先权原则。
(2) 短进程优先原则。
(3) 时间片原则。

3.3.2轮转调度算法

轮转法的基本原理

在早期的时间片轮转法中,系统将所有的就绪进程按先来先 服务的原则,排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。时间片的大小从几ms到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断 请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新 的队首进程,同时也让它执行一个时间片。这样就可以保证 就绪队列中的所有进程,在一给定的时间内,均能获得一时间片的处理机执行时间。

进程切换时机
进程切换分为两种情况:

  1. 时间片未完但进程已结束,可激活调度程序,从就绪队列中删除,再调度就绪队列中队首的进程运行。
  2. 时间片耗尽但进程未结束,也可激活调度程序,调度程序将把它送往就绪队列的末尾。

时间片大小的确定
时间片小:有利于短作业,中断频繁,系统开销大。
时间片大:进程可在一个时间片内执行完,就成为FCFS,不利于交互。

故时间片应略大于一次典型的交互所需要的时间。
这样可使大多数交互进程可在一个时间片内完成。

3.3.3 优先级调度算法

优先级调度算法的类型
1)非抢占式优先级算法
在这种方式下,系统一旦把处理机分配给就绪队列中 优先级最高的进程后,该进程便一直执行下去,直至完成; 或因发生某事件使该进程放弃处理机时,系统方可再将处 理机重新分配给另一优先级最高的进程。
2)抢占式优先级调度
在采用这种调度算法时,是每当系统中出现一个新的就绪进 程i时,就将其优先权Pi与正在执行的进程j的优先权Pj进行比较。如果Pi≤Pj,原进程Pj便继续执行;但如果是Pi>Pj, 则 立即停止Pj的执行,做进程切换,使i进程投入执行。显然,这种抢占式的优先级调度算法,能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中。

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

确定进程优先级的依据有如下三个方面:
进程类型:系统进程高于用户进程。
进程对资源的需求:需求少的高。
用户要求:重要或紧迫的高。

2)动态优先级
在创建进程时所赋予的优先级,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。

例如,可以规定,在就绪队列中的进程,随其等待时间的增长,其优先级相应提高。若所有的进程都具有相同的优先级初值,则显然是最先进入就绪队列的进程,将因其动 态优先权变得最高而优先获得处理机,此即FCFS算法。

若所有的就绪进程具有各不相同的优先级初值,那么,对于优先权级初值低的进程,在等待了足够的时间后,其优先权便可能升为最高,从而可以获得处理机。当采用抢占式优先权 调度算法时,如果再规定当前进程的优先级随运行时间的推移而下降,则 可防止一个长作业长期地垄断处理机。

3.3.4多队列调度算法

一个就绪队列无法满足不同用户对进程调度策略的不同要求,多处理机系统该缺点更加突出。在采用这种调度算法时,将不同类型或性质的进程固定分配在不同的就绪队列,分别采用不同的调度算法。
在多处理机系统中,可以为每个CPU设置一个就绪队列,每个处理机可以采用不同的调度算法。

3.3.5多级反馈队列调度算法

调度机制
(1) 应设置多个就绪队列,并为各个队列赋予不同的优先级。
第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍,……,第 i +1个队列的时间片要比 第i个队列的时间片长一倍

(2) 每个队列都采用FCFS算法
当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时, 如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第 二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它 放入第三队列,……,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n队列中便采取按时间片轮转的方式运行。

(3) 按队列优先级调度
仅当第一队列空闲时,调度程序才调度第二队列中的进程运行; 仅当第1-(i-1) 队列均空时,才会调度第 i 队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1) 中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队 列的末尾,把处理机分配给新到的高优先权进程。

调度算法的性能 该算法具有较好的性能,能很好地满足各种类型用户的需要。

• 终端型作业。作业通常较小,作业(进程)在第一队列所规定的时间片内完成。
• 短批处理作业。很短的批处理型作业,在第一队列中执行一个时间片即可完成。对于稍长的作业,通常也只需在第二队列和第三队列各执行一 个时间片即可完成,其周转时间仍然较短。
• 长批处理作业。对于长作业,它将依次在第1,2,…,n个队列中运行,然后再 按轮转方式运行,用户不必担心其作业长期得不到处理。

3.3.6基于公平原则的调度算法

保证调度算法
该算法要做到调度的公平性,比如处理机分配的公平性,系统中若有n个进程,每个进程都可获得1/n 的处理机时间。此时系统应具有如下功能:

  1. 跟踪计算每个进程自创建以来已经执行的处理时间。
  2. 计算每个进程应该获得的CPU时间,自创建以来的时间除以n。
  3. 计算进程获得的CPU时间的比率,实际服务时间与应该获得的时间之比。
  4. 比较各个进程获得的CPU时间的比率;
  5. 调度比率最小的进程运行,直至超过最接近它的进程比率为止。

公平分享调度算法
上面算法对进程调度公平,若用户启用的进程数量不同,如A用户有6个进程,B用户有2个进程,时间轮转法就会对进程少的用户不公平。
若对用户公平,就应强制调度序列,如: A1 A2 B1 B2 A3 A4 B1 B2 A5 A6 B1 B2

3.4实时调度

在实时系统中,可能存在着两类不同性质的实时任务,即HRT任务和SRT任务,它们都联系着一个截止时间。为保证系统能正常工作,实时调度必须满足实时任务对截止时间的要求。

3.4.1实现实时调度的基本条件

提供必要的信息
(1)就绪时间
(2) 开始截止时间和完成截止时间
(3) 处理时间
(4) 资源要求
(5) 优先级

系统处理能力强

采用抢占式调度机制
• 含有硬实时任务的实时系统中,广泛采用抢占机制。
• 小型实时系统,如果能预知任务的开始截止时间,则 对实时任务的调度可采用非抢占调度机制。

具有快速切换机制
• 对外部中断的快速响应能力。
• 快速的任务分派能力。

3.4.2实时调度算法的分类

非抢占式调度算法
1)非抢占式轮转调度算法
由一台计算机控制若干个相同的 (或类似的)对象,为每一个被控对象建立一个实时任务,并 将它们排成一个轮转队列。
2)非抢占式优先调度算法
实时任务到达时,把它们安排在就绪队列的队首,等待当 前任务自我终止或运行完成后才能被调度执行。

抢占式调度算法
在要求较严格的(响应时间为数十毫秒以下)的实时系统中, 应采用抢占式优先权调度算法。
1)基于时钟中断的抢占式优先权调度算法
• 不立即抢占当前任务的处理机,而是等到时钟中断到来时,调度程序才 剥夺当前任务的执行,将处理机分配给新到的高优先权任务。调度延迟可降为几十毫秒至几毫秒
2)立即抢占的优先权调度算法
• 立即剥夺当前任务的执行,把处理机分配给请求中断的紧迫任务。调度延迟降低到几毫秒至100微秒。

3.4.3最早截止时间优先即(EDF)算法

该算法是根据任务的截止时间确定任务的优先级,任务的截止时间愈早,其优先级愈高,具有最早截止时间的任务排在队列的队首。调度程序在选择任务时,总是选择就绪队列中的第一个任务,为之分配处理机。最早截止时间优先算法既可用于抢占调度方式中,也可用于非抢占式调度方式中。

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

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

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

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

3.4.5优先级倒置

优先级倒置的形成
系统运行中,高优先级进程或线程有可能被低优先级进 程或线程延迟或阻塞。

3.5 死锁概述

3.5.1资源的问题

可以引起死锁的主要是:

  • 需要采用互斥访问方式的方法
  • 不可以被抢占的资源
    即在前面介绍的临界资源。
  1. 可重用性资源和消耗性资源。
  2. 可抢占性资源和不可抢占性资源。
3.5.2计算机系统中的死锁

死锁的起因,通常是源于多个进程对资源的争夺,不仅对不可抢占资源进行争夺时,会引起死锁,而且对可消耗资源进行争夺时,也会引起死锁。

  1. 竞争不可抢占性资源引起死锁
  2. 竞争可消耗性资源引起的死锁
  3. 进程推进顺序不当引起死锁:进程在运行过程中,对资源进行申请和释放的顺序是否合法,也是在系统中是否会产生死锁的一个重要因素。
3.5.3死锁的定义,必要条件和处理方法
  1. 死锁的定义,如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那该组进程死锁的。
  2. 产生死锁的必要条件
  • 互斥条件
  • 请求和保持条件
  • 不可抢占条件
  • 循环等待条件,(环路等待条件)
  1. 处理死锁的方法
    目前处理死锁的方法可以归结为四种
    一 预防死锁
    二 避免死锁
    三 检测死锁
    四 解除死锁

3.6 预防死锁

预防死锁是通过破坏产生死锁的四个必要条件中的一个或几个。

3.6.1破坏请求和保持条件

为了能破坏请求和保持条件,系统必须做到,当一个进程请求资源时,它不能持有不可抢占资源。可以通过两种不同的协议实现。

第一种协议,该协议规定,所有进程在开始之前必须一次性申请其在整个运行过程中所需要的全部资源。

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

3.6.2破坏不可抢占条件

当一个已经保持了某些不可被抢占资源的进程, 提出新的资源请求而得不到满足时,它必须释放已经保持的所有资源。待以后需要时再进行重新申请,

3.6.3破坏循环等待条件

3.7避免死锁

避免死锁同样是属于事先预防的策略,但并不是事先采取某种限制措施,破坏产生死锁的必要条件,而是在资源动态分配的过程中防止系统进入不安全状态,以避免发生死锁。

3.7.1系统安全状态,

在死锁避免的方法中,把系统的状态分为安全状态和不安全状态,当系统处于安全状态时,可避免发生死锁。反之,当系统处于不安全状态时,则可能进入死锁。

虽然并非所有不安全状态都必然会成为死锁状态,但当系统进入不安全状态后就有可能进入死锁状态,反之只要系统处于安全状态系统,便不会进入死锁状态,因此避免死锁的实质在于,系统在进行资源分配时,应使系统不进入不安全状态。

在建立了系统安全状态的概念后,便可知道避免死锁的基本思想,就是确保系统始终处于安全状态。

3.7.2利用银行家算法避免死锁

这是一种试错,尝试性分配。

3.8死锁的检测与解除

为了能对系统中是否已发生了死锁进行检测,在系统中必须:1.保存有关资源的请求和分配信息;2.提供一种算法,它利用这些信息来检测系统是否已进入死锁状态。

  1. 死锁检测算法。该方法用于检测系统状态,以确定系统中是否发生了死锁
  2. 死锁解除算法。当认定系统中已发生死锁,利用该算法可将系统从死锁状态中解脱出来。
3.8.1死锁的检测
  • 资源分配图。
  • 死锁定理。
  • 死锁检测中的数据结构
3.8.2 死锁的解除

最简单的措施就是立即通知操作员,请操作员以人工方法解除死锁,另一种措施则是利用死锁解除算法,把系统从死锁状态中解脱出来。常采用死锁解除方法是:

  • 抢占资源,从一个或多个进程中,抢占足够多的资源,分配给死锁进程,以解除死锁状态。
  • 中止或撤销进程
    • 终止进程的方法。
      • 终止所有死锁进程
      • 逐个终止进程

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值