可以把死锁定义为一组相互竞争系统资源或进行通信的进程间的“永久”阻塞。当一组进程中的每个进程都在等待某个事件(典型的情况是等待所请求的资源释放),而只有在这组进程中的其他被阻塞的进程才可以触发该事件,这时就称这组进程发生死锁。因为没有事件能够被触发,所以死锁是永久性的。
产生死锁的原因主要是:
1) 因为系统资源不足。
2) 进程运行推进的顺序不合适。
3) 资源分配不当等
导致死锁的4个必要条件:
1、
互斥。一次只有一个进程可以使用一个资源。其他进程不能访问已分配给其他进程的资源。
2、
占有且等待。当一个进程等待其他进程时,继续占有已经分配的资源。
3、
不可抢占。不能强行抢占进程已占有的资源。
4、
循环等待。存在一个封闭的进程链,使得每个进程至少占有此链中下一个进程所需要的一个资源。
死锁预防策略是试图设计一种系统来排除发生死锁的可能性,方法分为两类:间接的死锁预防方法(防止前面三个列出的三个必要条件中的任何一个的发生);直接的死锁的预防方法(防止循环等待的发生)。
死锁避免策略
银行家算法:首先需要定义状态和安全状态的概念。系统的状态是当前给进程分配的资源情况。因此,状态包含两个向量Resource(系统中每种资源的总量)和Available(未分配给进程的每种资源的总量)及两个矩阵Claim(表示进程对资源的需求)和Allocation(表示当前分配给进程的资源)。安全状态是指至少有一个资源分配序列不会导致死锁。当进程请求一组资源时,假设同意该请求,从而改变了系统的状态,然后确定其结果是否还处于安全状态。如果是,同意这个请求;如果不是,阻塞该进程知道同意该请求后系统状态仍然是安全的。