1、死锁产生的原因
1)例如两个共享资源A、B,进程P1和P2并发执行。P1占有了A,P2占有了B。此时,P1请求B,但B被P2占有着,P1得不到满足,等待。P2请求A,A被P1占有着,也得不到满足,等待。互相请求对方已经占有的资源,引发死锁。----请求和释放资源的顺序不当造成。
2)例如有m=5个资源被n=3个进程共享,每个进程都需要k=3个资源,资源数小于进程数需要的总和即m<n*k。若系统分配资源的策略是轮流为每个进程分配,那么第一轮每个进程分配一个,剩余2个资源。第二轮再为两个进程各分配一个,但此时系统没有资源了,就使得各进程都处于等待中,引发死锁。----多个进程共享的资源不能满足他们的需要时,引发竞争造成死锁。
2、死锁的必要条件
1)互斥条件:资源同一时刻只能有一个进程使用。
2)请求与保持:已经得到资源的进程还可以继续申请新的资源。
3)非剥夺条件:已经分配的资源不能从相应的进程被强制的剥夺。
4)循环等待条件:系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源
3、死锁处理
主要包含预防、避免、检测、解除。
1)预防:限制并发进程对资源的请求,破坏死活产生的四个必要条件之一,使系统在任何时刻都不处于死锁状态。
2)避免:比较有名银行家算法,对于进程每一个系统可以满足的资源请求命令加以检测,如果发现分配资源后,系统进入不安全状态(安全状态就系统能按某一个顺序为每个进程分配所需要的资源,可以使每个进程都能顺序完成。),则不予分配;若分配资源后系统仍处于安全状态,则分配。
3)检测:不限制资源分配,即允许死锁产生。但定时检测是否产生死锁,如果产生则对其进行解除。
4)接触:通常采用资源剥夺法和撤销进程法进行死锁解除。