目录
b.低级调度(进程调度/短程调度)【面向进程(或内核级线程)】
(5)死锁问题及其处理方法,包括死锁的概念和原因,产生死锁的必要条件,死锁处理策略,死锁的预防、避免以及检测和解除。
(1)调度的概念
-
1.调度
在多道程序系统中,调度的实质是一种资源分配。
-
2.调度的三个层次
a.高级调度(长程调度/作业调度)【面向作业】
决定将外存上处于后备队列中的哪几个作业调入内存。
b.低级调度(进程调度/短程调度)【面向进程(或内核级线程)】
决定就绪队列中的哪几个进程应获得处理机,并由分派程序将处理机资源分配给选中进程。
进程调度方式:1)抢占式2)非抢占式
c.中级调度(内存调度)
【目的:提高资源利用率和系统吞吐量】
决定把外存上的哪些已具备运行条件的就绪进程再重新调入内存,并修改其状态为就绪状态。
(2)调度队列模型
1.仅有进程调度的调度队列模型
2.具有高级和低级调度的调度队列模型
3.同时具有三级调度的调度队列模型
🔍:https://blog.csdn.net/qq_15037231/article/details/55808250
🔍:https://blog.csdn.net/canyanruxue/article/details/78462802
(3)调度的基本准则与方法
🔍:https://blog.csdn.net/canyanruxue/article/details/78463030
-
1.面向用户的准则
1)周转时间短
2)响应时间快
3)截止时间的保证
4)优先权准则
-
2.面向系统的准则
1)系统吞吐量高
2)处理机利用率好
3)各类资源的平衡利用
(4)各种调度算法及评价
-
1.先来先服务(FCFS)调度算法
1)既可用于作业调度,也可用于进程调度
2)系统按照作业到达的先后次序进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短。
-
2.短作业优先(SJF)调度算法
1)以作业的长短来计算优先级,作业越短,其优先级越高。
2)作业的长短是以作业所需的运行时间来衡量的。
3)SJF算法可以用于作业调度和进程调度。
4)缺点:
a.必须预先知道作业的运行时间。
b.对长作业不利,容易出现“饥饿”现象。
c.人—机无法交互。
d.无法及时处理紧迫性作业。
-
3.优先级调度算法(PSA)
1)单纯以静态优先数作为作业调度的标准,优先数越小,优先级越高。
2)在优先级调度算法中,是基于作业的紧迫程度的,由外部赋予作业相应的优先级,调度算法是根据优先级进行调度的。
3)该算法用于作业调度时,系统是从后备队列中选择若干个优先级最高的作业装入内存。
-
4.高响应比调度算法(HRRN)
为每个作业引入一个动态优先级,优先级是可以改变的,令它随等待时间延长而增加,这使长作业的优先级在等待期间不断增加,等到足够的时间后,必然有机会获得处理机。该规律可描述为:优先权=(等待时间+要求服务的时间)/要求服务的时间
由于等待时间与服务时间之和就是系统对该作业的响应时间,故该优先级又相当于响应比,即 =优先权=响应时间/要求服务的时间
1)如果作业等待时间相同,则要求服务的时间越短,其优先权越高,因而类似于SJF算法,有利于短作业。
2)如果要求服务的时间相同时,作业的优先权又决定于其等待时间,因而该算法又类似于FCFS算法。
3)对于长作业的优先级,可以随等待时间的增加而提高,当其等待时间足够长时,也可获得处理机。
(5)死锁问题及其处理方法,包括死锁的概念和原因,产生死锁的必要条件,死锁处理策略,死锁的预防、避免以及检测和解除。
-
1.死锁的概念
如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的(Deadlock)。
两个或多个进程被无限的阻塞,相互等待的一种状态。
-
2.死锁产生的原因
死锁的起因,通常是源于多个进程对资源的争夺,不仅对不可抢占资源进行争夺时会引起死锁,而且对可消耗资源进行争夺时,也会引起死锁。
1.竞争不可抢占性资源引起死锁
2.竞争可消耗资源引起死锁
3.进程推进顺序不当引起死锁
-
3.产生死锁的必要条件
1)互斥条件
一段时间内某资源只由一个进程占用。
2)请求和保持条件
进程已经保持了一个资源又申请了新的资源,而该资源被其它进程所占用,此时进程阻塞,但又不释放自己已经申请的资源。
3)不可抢占条件/不剥夺条件
进程已获得的资源,在未使用完之前不能被抢占,只能在进程使用完时由自己释放。
4)循环等待条件/环路等待条件
发生死锁时,必然存在一个进程——资源的环形链。
-
4.处理死锁的方法
1)预防死锁
破坏死锁产生的四个必要条件中的一个或几个
2)避免死锁
在资源动态分配时,用某种方法防止系统进入不安全状态(银行家算法)
3)检测死锁
当系统发生死锁时检测死锁的存在
4)解除死锁
与检测死锁配套用于解除死锁
以上四种方法从1)到4)对死锁的防范程度逐渐减弱,但对应的是资源利用率的提高,以及进程因资源因素而阻塞的频度下降(即并发程度提高)。
【注】鸵鸟算法可用于处理死锁(即重新启动系统)。
-
5.死锁的预防
由于互斥条件是非共享设备所必须的,不仅不能改变,还应加以保证,因此主要是破坏产生死锁的后三个条件。
预防死锁的方法:
1)资源的静态分配法(破坏“请求和保持”条件)
2)剥夺资源法(破坏“不可抢占”条件)
3)有序资源分配法(破坏“循环等待”条件)
-
6.死锁的避免
利用银行家算法避免死锁
-
7.死锁的检测与解除
为了能对系统中是否已发生了死锁进行检测,在系统中必须:a.保存有关资源的请求和分配信息;b.提供一种算法,它利用这些信息来检测系统是否已进入死锁状态。
1)资源分配图
我们用圆圈⭕️代表一个进程,用方框代表一类资源,请求边是由进程指向方框中的一个资源,而分配边则应始于方框中的一个点。
一组进程结点和一组资源结点
下图中示出了两个请求边和两个分配边,即
图 每类资源有多个的情况 图 资源分配图的简化
2)死锁定理
S为死锁状态的充分条件是:当且仅当S状态的资源分配图是不可完全被简化的。该充分条件被称为死锁定理。
-
8.死锁的解除
常采用解除死锁的两种方法:
1)抢占资源
从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态。
2)终止(或撤销)进程
终止(或撤销)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来。