假设系统中有M个可用资源,N个进程,设每个进程需要的资源数位W。请问哪些情况可能死锁那些不会死锁为什么

M=2,N=2,W=1
M=3,N=2,W=2
M=3,N=2,W=3
M=5,N=3,W=2
M=6,N=3,W=3

如果多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,就会产生死锁
进程死锁的必要条件:
1.互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
  2.请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
  3.非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
  4.循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。
以上你说的5个情况中,第一个资源等于所需资源数,其他的都小于所需资源数,在总的资源数小于所需资源情况下,a进程需要等待b进程释放资源,但是b进程可能需要等待c进程释放资源,有可能c又在等待a进程释放资源,环路就产生了。
第一种情况不会死锁,不需解释
第二种:至少有一个进程获得两个资源,等待是可以结束的 ,死锁也就不会产生。
第三种情况,当每个进程拥有一个资源,还剩一个资源,但是每个进程还需要2个资源,只有一个资源于是死锁产生
第四种情况:但其中一个进程没有占用资源的时候,不会死锁,如果每个都占用资源,那么还有2个资源可以用,而每个进程只需要一个资源就能结束,也不会死锁。
第五种情况不做解释,和第三种同理,死锁
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-20
考研过了以后两年没有碰这个东西了,楼上说得已经很清楚了,其实最简单的方法就是反证法,只要能举出一种出现死锁的方案就说明会出现死锁,不是安全的。
最简单的测试方法就是让每个进程都“欲求不满”。再看多出来的资源,再按这种方法分配,如果分配过程中能够满足一个进程的资源需求。进而可以满足所有进程,那么就不会出现死锁。
比如:
P1 需要 3个资源,P2需要2个资源,P3需要4个资源,总共6个资源
第一步:P1,P2,P3各分配2,1,3个。那么就没有资源了,但所有的进程都无法满足资源。这就出现死锁了。(简单说就是∑(进程所需要的资源数-1)小于总的资源数,那么就会出现死锁。)
其实这只是一种做题的方法,楼上的同志把理论依据都列出来了。
因为好久没有关注这些东西了,也不知道是不是错的。
相似回答