操作系统 处理机调度与死锁

处理机调度

调度概述

含义

从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发执行。

层次

操作系统 处理机调度与死锁_第1张图片

高级调度(作业调度)

按一定的原则从外存上处于后备队列的作业中挑选一个(或多个)作业,给他们分配内存等必要资源,并建立相应的进程(建立PCB),以使它(们)获得竞争处理机的权利。

中级调度(内存调度)

为了提高内存利用率和系统吞吐量。暂时调到外存等待的进程状态为挂起状态。值得注意的是,PCB并不会一起调到外存,而是会常驻内存。PCB中会记录进程数据在外存中的存放位置,进程状态等信息,操作系统通过内存中的PCB来保持对各个进程的监控、管理。被挂起的进程PCB会被放到的挂起队列中。

低级调度(进程调度)

主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中最基本的一种调度,在一般操作系统中都需要配置进程调度。进程调度的频率很高,一般几十毫秒一次。

作业和作业调度

作业

仅包含了通常的程序和数据,而且还应配有一份作业说明书,系统根据该说明书来对程序的运行进行控制。

作业步

作业运行期间需要经过若干个相对独立而又相互关联的顺序加工步骤才能得到结果,每一个加工步骤称为一个作业步。

作业控制块JCB

作业在系统中存在的唯一标志,其中保存了系统对作业进行管理和调度所需的全部信息(作业标识、用户名称、用户账号、作业类型、作业状态、调度信息、资源需求、资源使用等)。

作业流程

当一个作业进入系统时,便由“作业注册”程序为该作业建立一个作业控制块JCB,再根据作业类型,将它放到相应的作业后备队列中等待调度。

调度程序依据一定的调度算法来调度它们,被调度到的作业被装入内存。

在作业运行期间,系统就按照JCB中的信息和作业说明书对作业进行控制。

当一个作业执行结束进入完成状态时,系统负责回收已分配给它的资源,撤销该作业控制块。

收容阶段:操作员把用户提交的作业通过某种输入方式或SPOOLing系统输入到硬盘上,再为该作业建立JCB,并把它放入作业后备队列中,相应的状态为:后备状态。

作业调度的主要任务

根据作业控制块(JCB)中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。然后再将新创建的进程插入就绪队列,准备执行。

作业调度需决定

(1)接纳多少个作业,取决于多道程序度,即允许多少个作业同时在内存中运行。

对系统来说,希望装入较多的作业,有利于提高CPU的利用率和系统吞吐量。但如果内存中同时运行的作业太多时,进程在运行时因内存不足所发生的中断急剧增加。这将会使平均周转时间显著延长,影响系统的服务质量。因此,多道程序的确定使根据计算机的系统规模、运行速度、作业大小,以及能否获得较好的系统系统性能等情况做出适当的抉择的。

(2)接纳哪些作业取决于调度算法。

主要根据调度算法来确定。在批处理系统中,作业进入系统后,总是先驻留在外存的作业后备队列上,因此需要有作业调度,以便将它们分批地装入内存。然而在分时系统中,为了做到及时响应,用户通过键盘输入的命令或数据等都被直接送入内存,因而无需配置上述的作业调度机制,但也需要有某种接纳控制措施类来限制进入系统的用户数目。如果系统尚有能力处理更多的任务,将会接纳授权用户的请求,否则,便拒绝接纳。类似地,在实时系统中也不需要作业调度,而必须具有接纳控制措施。

进程调度

任务

保存CPU现场信息

②按某种算法选取进程

③把CPU分配给进程

机制

组成

操作系统 处理机调度与死锁_第2张图片

排队器

为了提高进程调度的效率,应事先将系统中所有的就绪进程按照一定的方式排成一个或多个队列,以便调度程序能最快地找到它。以后每当有一个进程转变为就绪状态时,排队器便将它插入到相应的就绪队列。

分派器

分派器把由进程调度程序所选定的进程,从就绪队列中取出,然后进行上下文切换,将处理机分配给它。

上下文切换器

当对处理机进行切换时,会发生两对上下文切换操作:(1)第一对上下文切换时,OS将保存当前进程的上下文,即把当前进程的处理机寄存器内容保存到该进程的进程控制块内的相应的单元,再装入分配程序的上下文,以便分派程序运行;(2)第二对上下文切换是移除分派程序的上下文,而把新选进程的CPU现场信息装入到处理机的各个相应寄存器中,以便新选进程运行。

方式

非抢占式调度方式

进程获得CPU后,一直执行到完成或因等待某事 件而阻塞,才让出CPU。如:进程完成、等待I/O 、执行了wait、block原语等。

缺点:①平均周转时间长  ②紧急任务不能及时投入,通常用于批处理进程。

抢占式调度方式

调度程序根据某种原则强制性暂停正在执行的进程,把CPU分配给另一进程运行。

抢占原则:

(1)优先权原则 :指允许优先级高的新到进程抢占当前进程的处理机。

(2)短作业(进程)优先 :指允许新到的短进程可以抢占当前长进程的处理机。即当新到达进程的运行时间比正在执行的进程尚需运行的时间明显短时,将处理机分配给新到的短进程。

(3)时间片原则:即各进程按时间片轮转运行时,当正在执行的进程的一个时间片用完后,便停止该进程的执行而重新进行调度。

调度算法目标

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

批处理系统中处理机调度算法的目标

分时系统中处理机调度算法的目标

实时系统中处理机调度算法的目标

调度算法

1先来先服务调度算法,FCFS,First Come First Serve

思想

主要从公平的角度考虑(类似于我们生活中排队买东西的例子)

规则

按照作业/进程到达的先后顺序进行服务

用于作业/进程调度

用于作业调度时,考虑的是哪个作业先到达后备队列;

用于进程调度时,考虑的是哪个进程先到达就绪队列

是否可抢占

非抢占式算法

优点

公平、算法实现简单

 缺点

排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。

即,FCFS算法对长作业有利,对短作业不利。(排队10分钟吃2小时的大餐没关系,但排队10分钟上厕所就很难受了)

 是否会导致饥饿:不会

2 短作业优先调度算法,SJF,Shortest Job First

思想

追求最少的平均等待时间,最少的平均周转时间、最少的平均平均带权周转时间

规则

最短的作业/进程优先得到服务(所谓“最短”,是指要求服务时间最短)

 用于作业/进程调度

即可用于作业调度,也可用于进程调度。用于进程调度时称为短进程优先(SPF, Shortest Process First)算法

是否可抢占

SJF和SPF是非抢占式的算法。但是也有抢占式的版本——最短剩余时间优先算法(SRTN, Shortest Remaining Time Next)

优点

最短的平均等待时间、平均周转时间

缺点

不公平。对短作业有利,对长作业不利。可能产生饥饿现象。

另外,作业/进程的运行时间是由用户提供的,并不一定真实,不一定能做到真正的短作业优先。

是否会导致饥饿:会

3 优先级调度算法

思想

随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的紧急程度来决定处理顺序

规则

每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程

用于作业/进程调度

既可用于作业调度,也可用于进程调度。甚至,还会用于/O调度中

是否可抢占

抢占式、非抢占式都有。非抢占式只需在进程主动放弃处理机时进行调度即可,而抢占式还需在就绪队列变化时,检查是否会发生抢占。

优点

用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各种作业/进程的偏好程度。

缺点

若源源不断地有高优先级进程到来,则可能导致饥饿▷ 是否会导致饥饿:是

4 轮转调度算法

基本原理

系统将所有就绪进程按FCFS策略排成一个就绪队列。系统可设置每隔一定时间便产生一个中断,去激活调度程序进行调度,把CPU分配给队首进程,并令其执行一个时间片。当它运行完毕后,又把处理机分配给就绪队列中新的队首进程,也让它执行一个时间片。

进程切换时机

(1)正在运行的进程完成,应将其从就绪队列中删除,再调度就绪队列队首的进程运行,并启动一个新的时间片

(2)在一个时间片用完时,计时器中断处理程序被激活。如果该进程尚未运行完毕,调度程序将它送往就绪队列的末尾。

时间片长短的确定

时间片长度变化的影响:过长(退化为FCFS算法,进程在一个时间片内都执行完,响应时间过长)。

过短(用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,响应时间过长)。

时间片略大于一次典型的交互所需要的时间,使大多数进程在一个时间片内完成,应当使用户输入的80%以上的命令通常在一个时间片完成,否则使响应时间过长。

RR 算法思想

公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应。

 算法规则

按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。

 用于作业/进程调度

用于进程调度(只有作业放入内存建立了相应的进程后,才能被分配处理机时间片)

是否可抢占

若进程未能在时间片内运行完,将被强行剥夺处理机使用权,因此时间片轮转调度算法属于抢占式的算法。由时钟装置发出时钟中断来通知CPU时间片已到

优点

公平;响应快,适用于分时操作系统;

缺点

由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度。▷ 是否会导致饥饿:不会

操作系统 处理机调度与死锁_第3张图片

操作系统 处理机调度与死锁_第4张图片

5 多级队列调度算法

产生条件

由于系统中仅设置一个进程的就绪队列,即低级调度算法是固定的、单一的,无法满足系统中不同用户对进程调度策略的不同要求,再多处理机系统中,这种单一调度策略实现机制的确定更显突出,为此多级队列调度算法在一定程度上弥补了这一缺点。

含义

该算法将系统中的进程就绪队列从一个拆分为多个,将不同类型或性质的进程固定分配在不同的就绪队列,不同的就绪队列采用不同的调度算法,一个就绪队列中可以设置不同的优先级,不同的就绪队列本身也可以设置不同 优先级。

优点

多队列调度算法由于设置多个就绪队列,因此对每个就绪队列就可以实施不同的调度算法,因此,系统对不同用户进程的需求,很容易提供多种调度策略。

6 多级反馈队列调度算法

含义

时间片轮转算法和优先级算法的综合和发展,目前被公认较好的一种进程调度算法。多级反馈队列调度算法不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要。

机制

(1)应设置多个就绪队列,并为每个队列赋予不同的优先级。

第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。

(2)每个队列都采用FCFS算法。

新进程进入内存后,首先将其放在第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,…如此下去,最后一个队列中采取时间片轮转的方式运行。

(3)按队列优先级调度。

调度程序首先调度最高优先级队列中的就绪进程运行,仅当第一队列为空时才调度第二队列中的进程运行;如果是抢占方式,则进程执行时有新进程进入较高优先级的队列,则抢先执行新进程,并把被抢先的进程投入原队列的末尾。

算法性能

多级反馈队列调度算法具有较好的性能,能很好地满足各种类型用户的需要。

(1)终端型用户。

由于终端型作业用户所提交的作业大多属于交互型作业,作业通常较小,系统只要能使这些作业在第一队列所规定的时间片内完成,便可使终端型作业用户都感到满意。

(2)短批处理作业用户。

对于很短的批处理型作业,开始时像终端作业一样,如果仅在第一队列中执行一个时间片即可完成,便可获得与终端型作业一样的响应时间。对于稍长的作业,通常也只需在第二和第三队列各执行一个时间片即可完成,其周转时间仍然很短。

(3)长批处理作业用户。

对于长作业,它将依次在第1,2,…,n队列中运行,然后再按轮转方式运行,用户不必担心其作业长期得不到处理。

7 基于公平原则的调度算法nn

保证调度算法

保证处理机分配的公平性,如果在系统中有n个相同类型的进程同时运行,为公平起见,须保证每个进程都获得相同的处理机时间1/n。

实施公平调度算法时需要具备以下功能:

(1)跟踪计算每个进程自创建以来已经执行的处理时间;

(2)计算每个进程应获得的处理机时间,即自创建以来的时间除以n;

(3)计算进程获得处理机时间的比率,即进程实际执行的处理时间和应获得的处理机时间之比;

(4)比较各进程获得处理机的比率;

(5)调度程序选择比率最小的进程将处理机分配给它

公平分享调度算法

调度的公平性主要针对用户而言,使所有用户能获得相同的处理机时间,或所要求的时间比例。为此,必须考虑到每一个用户所拥有的进程数目。

例如,系统中有两个用户,用户1有4个进程A、B、C、D,用户2有1个进程E。为保证两个用户获得相同的处理机时间,则必须执行如下所示的强制调度序列:A  E  B  E  C  E  D  E  A  E  B  E  C  E  D  E…

如果希望用户1所获得的处理机时间是用户2的两倍,则必须执行如下所示的强制调度序列:A  B  E  C  D  E  A  B  E  C  D  E  A  B  E  C  D  E …

实时调度

含义

在实时系统中,存在若干个实时进程或任务,它们用来反应或控制某个(些)外部事件,往往带有某种程度的紧迫性。因此,对实时系统中的调度提出了特殊要求。前面所介绍的多种调度算法并不能很好地满足实时系统对调度的要求,因此引入了一种新的调度方法,即实时调度

任务

硬实时任务

指必须满足最后期限的限制,否则会给系统带来不可接受的破坏或者致命错误。

软实时任务

也有一个与之关联的最后期限,并希望能满足这个期限的要求,但这并不是强制的,即使超过了最后期限,调度和完成这个任务仍然是有意义的。

实现实时调度的基本条件

提供必要的信息:系统应向调度程序提供任务的就绪时间、截止时间、处理时间、资源要求和优先级等信息。

系统处理能力强:系统应具备足够的处理能力,以处理多个实时任务。

采用抢占式调度机制:在含有硬实时任务的实时系统中,广泛采用抢占机制,允许高优先级任务暂时挂起当前任务。

具有快速切换机制:为保证要求较高的硬实时任务能及时运行,实时系统应具备快速切换机制。

分类

实时任务性质

硬实时调度算法

软实时调度算法

调度方式

非抢占式

抢占式

调度程序调度时间

静态调度算法

动态调度算法

多处理机环境下,可分为集中式调度分布式调度两种算法。

最早截止时间优先算法EDF(Earliest Deadline First)

根据任务的截止时间确定优先级,截止时间越早,优先级越高。

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

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

最低松弛度优先算法LLF(Least Laxity First),松弛度越小,优先级越高。

死锁

死锁概述

概念

各个进程在互相等待对方进程已经占据有的资源,导致各个进程都陷入阻塞,无法向前推进

饥饿:某一个进程长时间得不到所需资源,而长时间等待的现象

死循环:进程因为某种原因,陷入某个循环无法走出

必要条件

互斥条件:一个资源一次只能被一个进程(线程)占用。

请求和保持条件:一个进程至少占有一个资源,但是又申请其他资源,但是申请的资源被其他进程占有,此时进程陷入阻塞,同时自己拥有的资源不会被释放

不可剥夺条件:进程已获得的资源,在未使用完之前,不能被强制剥夺。只有获得该资源的进程可以释放它。

循环等待条件:A进程占有B进程申请的资源,B进程占有A进程申请的资源,存在着“进程-资源"循环链

资源问题

1.可重用资源和可消耗资源

2.可抢占资源和不可抢占资源

资源分配图

操作系统 处理机调度与死锁_第5张图片

死锁预防

含义

这是一种较简单和直观的事先预防方法。该方法是通过设置某些限制条件,去破坏产生死锁四个必要条件中的一个或几个来预防产生死锁。预防死锁是一种较易实现的方法,已被广泛使用。

方法

破坏“请求和保持”条件

破坏“不可抢占”条件

破坏“循环等待”条件

死锁避免

含义

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

系统安全状态

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

利用银行家算法 避免死锁

银行家算法是一种经典的死锁避免算法,旨在确保系统在资源分配过程中不会陷入死锁状态。它最初是为银行系统设计的,以确保在发放现金贷款时,不会出现无法满足所有客户需求的情况。后来,这一算法被引入操作系统中,用于避免死锁。

数据结构

可利用资源向量 (Available):表示系统中每类可用资源的数量。

最大需求矩阵 (Max):定义了每个进程对各类资源的最大需求。

分配矩阵 (Allocation):表示每类资源已分配给每个进程的数量。

需求矩阵 (Need):表示每个进程尚需的各类资源数量。

银行家算法执行步骤

进程请求资源时,系统按以下步骤检查:

如果请求的资源小于等于进程尚需的资源且小于等于系统可用资源,则进一步检查。

如果满足条件,试探性地将资源分配给进程,并修改数据结构。

执行安全性算法,检查系统是否处于安全状态。

如果安全,正式分配资源给进程;否则,让进程等待。

安全性算法

用于检查试探性资源分配后系统是否处于安全状态。

判断是否存在安全序列,如果有,表示系统处于安全状态,不会产生死锁。

例子

假设系统有五个进程 {P0, P1, P2, P3, P4} 和三类资源 {A, B, C}。

通过安全性算法检查系统是否处于安全状态,以避免死锁。

死锁检测

无需事先采取任何限制性措施,允许进程在运行过程中发生死锁。但可通过检测机构及时的检测出死锁的发生,然后采取适当措施,把进程从死锁中解脱出来。

死锁解除

当检测到系统中已发生死锁时,就采取相应措施,将进程从死锁状态中解脱出来。常用的方法是撤销一些进程,回收它们的资源,将它们分配给已处于阻塞状态的进程,使其能继续运行。

你可能感兴趣的:(jvm)