问答题 假定计算机系统有R1设备3台,R2设备4台,它们被P1、P2、P3和P4这4个进程所共享,且已知这4个进程均以下面所示的顺序使用现有设备。
→申请R1→申请R2→申请R1→释放R1→释放R2→释放R1→
问答题 说明系统运行过程中是否有产生死锁的可能?为什么?
【正确答案】系统运行过程中有可能产生死锁。根据题意,系统中只有3台R1设备,它们要被4个进程共享,且每个设备对R1的最大需求量为2。由于R1设备数量不足,且为互斥、不可被剥夺资源,而系统又未采取任何措施破坏死锁产生的剩余两个必要条件“请求与保持”和“环路等待”条件,因此在系统运行过程中,可能会产生死锁。
【答案解析】
问答题 如果有可能,请举出一种情况,并画出表示该死锁状态的进程-资源图。
【正确答案】当P1、P2、P3进程各得到一个R1设备时,它们可以继续运行,并均可顺利申请到一个R2设备,当它们第二次申请R1设备时,因为系统已无空闲R1设备,故它们全部阻塞并进入循环等待的死锁状态。这种死锁状态下的进程-资源图如图所示。 [*]
【答案解析】
问答题 假定当前处于非抢占调度策略,进程只有两种方式可以放弃CPU:一个是主动调用系统调度函数sysnc(),此时进程主动放弃CPU;另一个方式是当进程执行I/O操作时,系统将调度下一个进程。试分析以下3种进程对,何时会出现不符合下列原则,并说明原因: 1)空闲则入。 2)有限等待。 3)保证互斥。 第一种: Thread1(){ sysnc(); ----critical section---- g=g+b; f=g-a; ----critical section---- } Thread2(){ ----critical section---- g=g+b; f=g-a; ----critical section---- } 第二种: Thread1(){ sysnc(); ----critical section---- g=g+b; f=g-a; ----critical section---- } Thread2(){ ----critical section---- g=g+b; f=g-a; ----critical section---- sysnc(); } 第三种: Thread1(){ sysnc(); ----critical section---- g=g+b; fstring=printf(…); //调用I/O f=g-a; ----critical section---- } Thread2(){ sysnc(); ----critical section---- g=g+b; f=g-a; ----critical section---- }
【正确答案】第一种进程对:不符合有限等待原则。 当第一个进程调用sysnc释放CPU后,第二个线程获得CPU后一直执行,线程无释放CPU的过程,导致它一直占用CPU,使得Thread1在释放CPU之后一直处于等待状态,即出现无限等待的情况(还有一种可能是Thread2先占用CPU,这样它就一直占用并不释放,使得Thread1永远无法执行)。 第二种进程对:不符合空闲则入原则。 这是由于Thread2中调用了sysnc操作释放CPU,这时调用Thread1,而Tbread1也释放CPU,从而可能出现关键区空闲却无线程访问的情况。 第三种进程对:不符合保证互斥原则。 在两个进程运行的过程中,第二个进程会先释放CPU,此时第一个运行。但是在第一个运行的过程中也会释放CPU(但它此时正在访问关键区)。Thread2进入关键区运行,直至释放CPU,此时Thread1继续运行。这时关键区中的数据是被Thread2访问后的结果,使得Thread1的结果与预计结果不同,并未保证访问关键区这个操作是原子操作。未能实现互斥访问。
【答案解析】