关于临界区问题(critical section problem)的一个算法(假设只有进程P0和P1可能会进入该临界区)如下(i为0或1),该算法( )。

admin2019-02-24  33

问题 关于临界区问题(critical section problem)的一个算法(假设只有进程P0和P1可能会进入该临界区)如下(i为0或1),该算法(    )。

选项 A、不能保证进程互斥进入临界区,且会出现“饥饿”
B、不能保证进程互斥进入临界区,但不会出现“饥饿”
C、保证进程互斥进入临界区,但会出现“饥饿”
D、保证进程互斥进入临界区,不会出现“饥饿”

答案B

解析 本题考查进程的同步与互斥。进程PO和P1写为:
    P0:①if(turn!=一1)  turn=0;    P1:  ④if(turn!=一1)  turn=1;
    ②if(turn!=0)  goto retry;    ⑤if(turn!=1)  goto retry;
    ③turn=一1;    ⑥turn=一1;
    当执行顺序为1、2、4、5、3、6时,P0,P1将全部进入临界区,所以不能保证进程互斥进入临界区。
    有的同学会觉得这题会产生饥饿,理由如下:
    当PO执行完临界区时,CPU调度P1执行④。当顺序执行1、4、(2、1、5、4)、(2、1、5、4)、…时,P0和P1进入无限等待,即出现“饥饿”现象。
    这是对饥饿概念不熟悉的表现。饥饿的定义是:当等待时间给进程推进和响应带来明显影响称为进程饥饿。当饥饿到一定程度的进程在等待到即使完成也无实际意义的时候称为饥饿死亡,简称饿死。
    产生饥饿的主要原因是:在一个动态系统中,对于每类系统资源,操作系统需要确定一个分配策略,当多个进程同时申请某类资源时,由分配策略确定资源分配给进程的次序。
    有时资源分配策略可能是不公平的,即不能保证等待时间上界的存在。在这种情况下,即使系统没有发生死锁,某些进程也可能会长时间等待。
    而在本题中,PO和P1只有满足了特定的某个序列才能达到“饥饿"的效果,并不是因为资源分配策略本身不公平造成的,而这两个进程代码表现出来的策略是公平的,两个进程的地位也是平等的。满足上述特定的序列具有特殊性,就进程推进的不确定性而言,是基本不可能恰好的达到这种巧合的。否则,几乎所有这类进程都有可能产生饥饿。
转载请注明原文地址:https://kaotiyun.com/show/MoCi777K
0

相关试题推荐
最新回复(0)