免费智能真题库 > 历年试卷 > 系统分析师 > 2022年上半年 系统分析师 上午试卷 综合知识
  第46题      
  知识点:   死锁   死锁问题   进程
  关键词:   并发进程   死锁   并发   进程        章/节:   操作系统       

 
某系统中有5个并发进程竞争资源R。假设每个进程都需要3个R,那么最少需要有()个R,才能保证系统不会发生死锁
 
 
  A.  10
 
  B.  11
 
  C.  12
 
  D.  13
 
 
 

 
  第52题    2012年上半年  
   47%
假设某系统采用非抢占式优先级调度算法,若该系统有两个优先级相同的进程P1和P2,各进程的程序段如下所示,若信号量S1和S2的初值都..
  第50题    2019年上半年  
   48%
假设计算机系统中有三类互斥资源Rl、R2和R3,可用资源数分别为9、5和3,若在T0时刻系统中有P1、P2、P3、P4和P5五个进程,这些进程..
  第49题    2022年上半年  
   20%
程P1、P2、P3、P4、P5和P6的前趋图如下所示:

若用PV操作控制进程PI、P2、P3、P4、P5和P6并发执行的过程,则需要..
   知识点讲解    
   · 死锁    · 死锁问题    · 进程
 
       死锁
        采用封锁的方法固然可以有效防止数据的不一致性,但封锁本身也会产生一些麻烦,最主要就是死锁问题。死锁是指多个用户申请不同封锁,由于申请者均拥有一部分封锁权而又需等待另外用户拥有的部分封锁而引起的永无休止的等待。死锁是可以避免的,目前采用的办法有如下几种。
        (1)预防法:采用一定的操作方式以避免死锁的出现,顺序申请法、一次申请法等即是此类方法。顺序申请法是指对封锁对象按序编号,用户申请封锁时必须按编号顺序(从小到大或反之)申请,这样能避免死锁发生;一次申请法是指用户在一个完整操作过程中必须一次性申请它所需要的所有封锁,并在操作结束后一次性归还所有封锁,这样能避免死锁的发生。
        (2)死锁的解除法:允许产生死锁,并在死锁产生后通过解锁程序以解除死锁。这种方法中需要有两个程序,一个是死锁检测程序,用它测定死锁是否发生;另一个是解锁程序,一旦检测到系统已产生死锁,则启动解锁程序以解除死锁。
 
       死锁问题
        死锁是指多个进程之间互相等待对方的资源,而在得到对方资源之前又不释放自己的资源,这样,造成循环等待的一种现象。如果一个进程在等待一个不可能发生的事件,则进程就死锁了。如果一个或多个进程产生死锁,就会造成系统死锁。
               死锁发生的必要条件
               产生死锁的根本原因在于系统提供的资源个数少于并发进程所要求的该类资源数。产生死锁有4个必要条件:互斥条件,不可抢占条件,保持与等待条件(部分分配条件)、循环等待条件。
               (1)互斥条件:即一个资源每次只能被一个进程使用。
               (2)保持与等待条件:有一个进程已获得了一些资源,但因请求其他资源被阻塞时,对已获得的资源保持不放。
               (3)不可抢占条件:有些系统资源是不可抢占的,当某个进程已获得这种资源后,系统不能强行收回,只能由进程使用完时自己释放。
               (4)循环等待条件:若干个进程形成环形链,每个都占用对方要申请的下一个资源。
               银行家算法
               所谓银行家算法,是指在分配资源之前先看清楚,资源分配后是否会导致系统死锁。如果会死锁,则不分配,否则就分配。
               按照银行家算法的思想,当进程请求资源时,系统将按如下原则分配资源:
               (1)当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程。
               (2)进程可以分期请求资源,但请求的总数不能超过最大需求量。
               (3)当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源。
               (4)当系统现有的资源能满足进程尚需资源数时,必须测试系统现存的资源能否满足该进程尚需的最大资源数,若能满足则按当前的申请量分配资源,否则也要推迟分配。
               对于这些内容,关键在于融会贯通地理解与应用,为了帮助考生更好地理解,下面,我们通过一个例子来说明银行家算法的应用。
               假设系统中有三类互斥资源R1、R2和R3,可用资源数分别是9、8和5。在T0时刻系统中有P1、P2、P3、P4和P5五个进程,这些进程对资源的最大需求量和已分配资源数如下表所示。进程按照P1→P2→P4→P5→P3序列执行,系统状态安全吗?如果按P2→P4→P5→P1→P3的序列呢?
               
               进程对资源的最大需求量和已分配资源数
               在这个例子中,我们先看一下未分配的资源还有哪些?根据试题给出的条件,从上表中可以看出,很明显,还有2个R1未分配,1个R2未分配,而R3全部分配完毕。
               按照P1→P2→P4→P5→P3的顺序执行时,首先执行P1,这时由于其R1、R2和R3的资源数都未分配够,因而开始申请资源,得到还未分配的2个R1,1个R2。但其资源仍不足(没有R3资源),从而进入阻塞状态,并且这时所有资源都已经分配完毕。因此,后续的进程都无法得到能够完成任务的资源,全部进入阻塞,死锁发生了。
               而如果按照P2→P4→P5→P1→P3的序列执行时:
               (1)首先执行P2,它还差1个R2资源,系统中还有1个未分配的R2,因此满足其要求,能够顺利结束进程,释放出2个R1、2个R2、1个R3。这时,未分配的资源就是:4个R1、2个R2、1个R3
               (2)然后执行P4,它还差一个R3,而系统中刚好有一个未分配的R3,因此满足其要求,也能够顺利结束,并释放出其资源。因此,这时系统就有5个R1、4个R2、1个R3。根据这样的方式推下去,会发现按这种序列可以顺利地完成所有的进程,而不会出现死锁现象。
               从这个例子中,我们也可以体会到,死锁的四个条件是如何起作用的,只要打破任何一个条件,都不会产生死锁。
               解决死锁的策略
               对待死锁的策略主要有:
               (1)死锁预防:破坏导致死锁必要条件中的任意一个就可以预防死锁。例如,要求用户申请资源时一次性申请所需要的全部资源,这就破坏了保持和等待条件;将资源分层,得到上一层资源后,才能够申请下一层资源,它破坏了环路等待条件。预防通常会降低系统的效率。
               (2)死锁避免:避免是指进程在每次申请资源时判断这些操作是否安全,例如,使用银行家算法。死锁避免算法的执行会增加系统的开销。
               (3)死锁检测:死锁预防和避免都是事前措施,而死锁的检测则是判断系统是否处于死锁状态,如果是,则执行死锁解除策略。
               (4)死锁解除:这是与死锁检测结合使用的,它使用的方式就是剥夺。即将某进程所拥有的资源强行收回,分配给其他的进程。
 
       进程
        简单而言,一个进程就是一个正在运行的程序。一般来说,一个进程至少应该包括以下几个方面的内容。
        .相应的程序:进程既然是一个正在运行的程序,当然需要有相应程序的代码和数据。
        .CPU上下文:指程序在运行时,CPU中各种寄存器的当前值,包括:程序计数器,用于记录将要取出的指令的地址;程序状态字,用于记录处理器的运行状态信息;通用寄存器,用于存放数据或地址;段寄存器,用于存放程序中各个段的地址;栈指针寄存器,用于记录栈顶的当前位置。
        .一组系统资源:包括操作系统用来管理进程的数据结构、进程的内存地址空间、进程正在使用的文件等。
        进程有动态性、独立性和并发行三个特性。
        (1)动态性。进程是一个正在运行的程序,而程序的运行状态是在不断地变化的。例如,当一个程序在运行的时候,每执行完一条指令,PC寄存器的值就会增加,指向下一条即将执行的指令。而CPU中用来存放数据和地址的那些通用寄存器,它们的值肯定也不断地变化。另外,堆和栈的内容也在不断地变化,每当发生一次函数调用时,就会在栈中分配一块空间,用来存放此次函数调用的参数和局部变量。而当函数调用结束后,这块栈空间就会被释放掉。
        (2)独立性。一个进程是一个独立的实体,是计算机系统资源的使用单位。每个进程都有自己的运行上下文和内部状态,在它运行的时候独立于其他的进程。
        (3)并发性。从宏观上来看,在系统中同时有多个进程存在,它们相互独立地运行。
        下图表示四个进程A、B、C、D在系统中并发地运行。从中可以看出,虽然从宏观上来说,这四个进程都是在系统中运行,但从微观上来看,在任何一个特定的时刻,只有一个进程在CPU上运行。从时间上来看,开始是进程A在运行,然后是进程B在运行,然后是进程C和进程D。接下来又轮到了进程A去运行。因此,在单CPU的情形下,所谓的并发性,指的是宏观上并发运行,而微观上还是顺序运行,各个进程轮流去使用CPU资源。
        
        四个进程在并发运行
        在具体实现上,以CPU中的程序计数器PC为例,真正物理上的PC寄存器只有一个。当四个进程在轮流执行时,PC取值的运动轨迹是先在进程A内部流动,然后再到进程B的内部流动,再到进程C和D。从进程的独立性角度来说,每个进程都有“自己”独立的PC寄存器,即逻辑上的PC寄存器,它们的取值相互独立、互不影响。所谓的逻辑PC,其实就是一个内存变量。例如,在上图中,当进程A要执行的时候,就把A的逻辑PC的值拷贝到物理PC中,然后开始运行。当轮到B运行的时候,先把物理PC的当前值保存到A的逻辑PC中,然后再把B的逻辑PC的值装入到物理PC中,即可运行。这样就实现了各个进程的轮流运行。
   题号导航      2022年上半年 系统分析师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第46题    在手机中做本题