死锁定义
由于多个并发执行的进程之间竞争资源而导致进程之间“永久”阻塞。在无外力作用下,所有进程都无法向前推进的状态。
当一组进程中的每个进程都在等待某事件(等待所请求资源释放),而只有这组进程中的其他被阻塞的进程才可以触发该进程,就称这组进程发生死锁。
竞争资源
- 竞争不可剥夺资源
- 竞争可消耗资源
- 进程之间推进顺序不当
死锁四个必要条件
- 互斥。其他进程不能访问 已分配个其他进程的资源
- 占有且等待。在等待其他资源时,继续占有已分配的资源
- 不可抢占。不能抢占其他进程已占有的资源
- 循环等待。一个资源在被其他进程请求的同时也被另外一个进程所占有。
资源分配图
有向无环图,表示系统资源和进程的状态
解决死锁的方法
避免死锁
是否允许当前的资源分配请求是通过判断该请求是否可能导致死锁来决定
- 如果一个进程的请求会导致死锁,则不启动该进程
- 如果一个进程增加的资源请求会导致死锁,则不允许分配