一.什么是死锁?
所谓死锁是指在多道程序系统中,一组进程中的每一个进程均无限期的等待被该组进程中的另一个进程所占有且永远不会释放的资源,这种现象称系统处于死锁状态。
二.死锁产生的原因?
1.竞争资源,系统产生的资源有限不能满足每个进程的需求。
2.多道程序运行时,进程推进顺序不合理。
三.形成死锁四个必要条件?
1.互斥使用资源
2.请求和保持资源
3.不可抢夺资源
4.循环等待资源
四.解决死锁问题的方法?
解决思索问题一般有三种方法。
1. 死锁预防。
预先确定一些资源分配策略,进程按规定申请资源,系统按预定的策略进行分配,这些分配策略均能使产生思索的四个必要条件中的一个条件不成立,从而使系统不会发生死锁。
2. 死锁避免。
当进程提出资源申请时系统动态测试资源分配情况,仅当能确保系统安全时才把资源分配给进程。一个死锁避免常用的算法是银行家算法。
银行家算法:见下
3. 死锁检测和解除。
允许系统中发生死锁现象,及对资源的申请和分配不加任何限制,只要有剩余的资源就把资源分配给申请进程,因此,就可能出现死锁。
银行家算法:
首先需要定义状态和安全状态的概念。系统的状态是当前给进程分配的资源情况。因此,状态包含两个向量Resource(系统中每种资源的总量)和Available(未分配给进程的每种资源的总量)及两个矩阵Claim(表示进程对资源的需求)和Allocation(表示当前分配给进程的资源)。安全状态是指至少有一个资源分配序列不会导致死锁。当进程请求一组资源时,假设同意该请求,从而改变了系统的状态,然后确定其结果是否还处于安全状态。如果是,同意这个请求;如果不是,阻塞该进程知道同意该请求后系统状态仍然是安全的。