指两个或两个以上的进程在执行过程中,由于资源的竞争造成的一种阻塞的现象。
死锁的发生必须具备以下四个必要条件
-
互斥条件
即在一段时间内资源只由一个进程占用
-
请求和保持条件
指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程阻塞,但又对自己已获得的其他资源保持不放
-
不剥夺条件
指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放
-
环路等待条件
指在发生死锁时,必然存在一个进程-资源的环形链,即进程集合{P0,P1,P2,...,Pn}中的P0正在等待P1占用的资源,P1正在等待P2占用的资源...
银行家算法
在避免死锁方法中运行进程动态地申请资源,但是系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待
-
可利用资源向量
-
最大需求矩阵
-
分配矩阵
-
需求矩阵(仍需要)
死锁避免从本质上来说是不可能的,因为它需要获知未来的请求,而这些请求是不可知的
-
破坏互斥条件
有个小思路是尽量做到尽可能少的进程可以真正请求资源
-
破坏占有和等待条件
-
静态资源分配策略
资源的静态分配策略要求每一个进程在开始执行就申请它所需要的全部资源,仅当系统能满足进程的资源申请且把资源分配给进程后,该进程才开始执行。于是,进程在执行中不再申请资源,即能使
请求和保持条件的条件不成立。 -
当一个进程请求资源时,先暂时释放当前占用的所有资源,然后再尝试一次获得所需的全部资源
-
-
破坏不可抢占条件
将资源虚拟化
-
破坏环路等待条件
-
保证每一个进程在任何时刻只能占用一个资源,如果要请求另一个资源,它必须先释放第一个资源。
-
将所有资源统一编号,进程的所有请求都必须按照资源编号的顺序来
在实际中难以运用
-