【正确答案】这是一个综合性很强的题目,题目中出现了缓冲区、SPOOLing技术、进程共享资源(共享同一个缓冲区)、死锁等概念。而究其本质,其实本题考查的是死锁现象的判断,就是要考生找出该系统的一种死锁的可能。
可以先画出该系统的大致结构草图,如图所示。
[*]
下面找到一种导致该SPOOLing系统死锁的情况:
当磁盘上输入数据块总数i=max时,那么磁盘上输出数据块总数。必然为零。此时,进程I发现输入缓冲区已经满了,所以不能再把输入数据放入到缓冲区中;进程P此时有一个处理好了的数据,打算把结果数据放入缓冲区,但是也发现没有空闲的空间可以放结果数据,因为o=0,所以没有输出数据可以输出,于是进程O也无事可做。这时进程I、P、O各自都等待着一个事件的发生,如果没有外力的作用,它们将一直等待下去,这种僵局显然是死锁。
只需要修改条件①为:i+o≤max,且i≤max-1;这样就不会再发生死锁。也就是说,产生的数据不能达到缓冲区总和的上限,至少保证能够有一个非输入数据有缓冲空间可以存放,以便进程P和进程O正常运行。
在其他类似题目中,通常都会在临界条件处发生死锁,因此可以通过验证临界值来考查条件是否能完全满足要求。