死锁定义:
是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象。(两个人占着同一个茅坑,谁也不让谁,谁也拉不出来屎。
死锁必要条件(4个):
1
)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
2
)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3
)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
4
)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。 解决办法:
银行家算法 进程集合{P0,P1,…,Pn} 对于资源集合{R0,R1,…,Rm}有一定的需求。每个进程都对这一系列资源有着不同数量的需求。如 P0需要 R0*1,R1*6,R2*3…Rm*5. P1需要 R1*2,R2*8,R3*4…Rm*0. 等等。 其中,进程集合P中的各个进程都已经占用一定量的资源,而资源总量是固定的。因此,一部分进程将因为资源不足而无法运行。此时,应考察现有未分配资源,以及进程集合中个进程对资源的需求,当需求满足时即可交给该进程运行,等待进程运行结束后,回收资源,此时资源应比之前多,可以满足新的进程运行。因此类推。