问答题
有三个进程P1、P2和P3并发工作。进程P1需要资源S3和资源S1;进程P2需要资源S2和资源S1;进程P3需要资源S3和资源S2。问:
问答题
若对资源分配不加限制,会发生什么情况?为什么?
问答题
为保证进程正确运行,应采用怎样的分配策略?列出所有可能的方法。
【正确答案】可有以下几种答案:
A.采用静态分配:由于执行前已获得所需的全部资源,故不会出现占有资源又等待别的资源的现象(或不会出现循环等待资源的现象)。
B.采用按序分配:不会出现循环等待资源的现象。
C.采用银行家算法:因为在分配时,保证了系统处于安全状态。
【答案解析】
问答题
某系统有R1、R2和R3共三种资源,在T0时刻P1、P2、P3和P4这四个进程对资源的占用和需求情况见表2-24,此时系统的可用资源矢量为(2,1,2)。试问:
【正确答案】1)系统中资源总量为某时刻系统中可用资源量与各进程已分配资源量之和,即(2,1,2)+(1,0,0)+(4,1,1)+(2,1,1)+(0,0,2)=(9,3,6),各进程对资源的需求量为各进程对资源的最大需求量与进程已分配资源量之差,即
[*]
2)若此时P1发出资源请求Request1(1,0,1),按银行家算法进行检查:
Request1(1,0,1)<=Need1(2,2,2)
Request1(1,0,1)<=Available(2,1,2)
试分配并修改相应数据结构,由此形成的进程P1请求资源后的资源分配情况见下表。
[*]
再利用安全性算法检查系统是否安全,可用资源Available(1,1,1)已不能满足任何进程,系统进入不安全状态,此时系统不能将资源分配给进程P1。
若此时进程P2发出资源请求Reqe,est2(1,0,1),按银行家算法进行检查:
Request2(1,0,1)<=Need2(2,0,2)
Request2(1,0,1)<=Available(2,1,2)
试分配并修改相应数据结构,由此形成的进程P2请求资源后的资源分配情况下表:
[*]
再利用安全性算法检查系统是否安全,可得到如下表中所示的安全性检测情况。
[*]
从上表中可以看出,此时存在一个安全序列{P2,P3,P4,P1},故该状态是安全的,可以立即将进程P2所申请的资源分配给它。
如果2)中的两个请求立即得到满足,此刻系统并没有立即进入死锁状态,因为这时所有的进程没有提出新的资源申请,全部进程均没有因资源请求没得到满足而进入阻塞状态。只有当进程提出资源申请且全部进程都进入阻塞状态时,系统才处于死锁状态。
【答案解析】
问答题
设有进程P1和进程P2并发执行,都需要使用资源rl和r2,使用资源的情况见表2-22。
表2-22 资源使用情况
|
进程P1 |
进程P2 |
|
申请资源r1 |
申晴资源r2 |
|
申清资源r2 |
申请资源r1 |
|
释放资源r1 |
释放资源r2 |
|
试判断是否会发生死锁,并加以解释及说明产生死锁的原因和必要条件。
【正确答案】这段程序在不同的运行推进速度下,就可能产生死锁。如按顺序:进程P1先申请资源r1,得到资源r1,然后进程P2申请资源r2,也能得到,进程P1又申请资源r2,则因资源r2已分配使进程P1阻塞。进程P1和进程P2两个进程都因申请不到资源而形成死锁。如果改变进程的运行顺序,这两个进程就不会出现死锁现象了。
产生死锁的原因可归结为两点:
1)竞争资源。
2)进程推进顺序非法。
产生死锁的必要条件:
1)互斥条件。
2)请求和保持条件。
3)不剥夺条件。
4)环路等待条件。
【答案解析】
问答题
两个进程A和B,每一个进程都需要读取数据库中的记录1、2、3。假如这两个进程都以1、2、3的次序请求读取记录,系统将不会发生死锁。但如果A以3、2、1的次序读取记录,B以1、2、3的次序读取记录,则死锁可能会发生。试计算:两个进程读取记录的次序如果不确定,那么系统保证不发生死锁的概率是多少?
【正确答案】本题中进程请求到一个记录后,会独占读取该记录并继续请求下一个记录,直到进程结束,释放所有记录的读取权。当两个进程都以相同次序请求读取记录时,先请求到读取记录的进程会先执行,而另一进程只有在此进程全部读取结束后才能执行,故系统不会发生死锁。
如果进程A、B以不同次序读取记录,死锁可能会发生。按题中条件知,两进程读取次序正好相反,若某一时刻两进程都在读取记录,则随着进程的执行,必定出现各自占有记录并请求读取对方记录的死锁局面。所以只有在两个进程依次读取三个记录(不能出现交替)的情况下,才能保证系统不发生死锁。我们以简单的平均概率进行[分析]
每次读取记录时,两进程各有1/2的概率请求成功。对于依次读取的情形,A以3、2、1的次序连续读取记录成功的概率是(1/2)3]=1/8;同理,B以1、2、3的次序连续读取记录成功的概率也是1/8。故系统不发生死锁的概率是1/8+1/8=1/4。
【答案解析】[解析] 本题可能会有一种错误的思路。按照6次读取记录出现AAABBB和BBBAAA的概率计算,结果为[*]这里的错误在于,有些读取记录的序列是不可能出现的,弧ABABAB,A读取记录3,B读取记录1,A再读取记录2,这时已经出现死锁,进程不能继续推进。