1、问题的产生
在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统的处理能力,然而,多个进程的并发执行也带来了新的问题—–死锁。
在单道程序中并不存在这样的问题,因为系统中的程序可以独占所有资源,而在多道程序会共享一些资源,这样就产生了竞争关系,例如
- P1先使用A资源,后继续使用B资源
- P2先使用B资源,后继续使用A资源
结果P1占用了A,P2占用了B,它们继续申请获得新资源便无法获得满足,无法向前推进,僵持的状态,这样便是死锁。
指多个进程在运行过程中因争夺资源而造成的一种僵局(deadly-Embrace),若无外力作用,这些进程都将无法向前推进。
2、死锁的必要条件
- 互斥条件(资源独占条件)
在某一时刻,如果程序P1获得这个资源,那么它将独占这个资源,别的程序无法使用这个资源。 - 请求和保持条件(部分分配条件)
程序获得了部分资源,还想获得剩下的资源。 - 不剥夺条件
资源一旦获取,便不可被其他程序剥夺。 - 循环等待条件(环路条件)
程序一直等待着某个资源。
3、处理死锁的基本方法
目前处理死锁的基本方法有四种:
- 预防死锁
指通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来防止死锁的发生。 - 避免死锁
指在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免死锁的发生。 - 检测死锁
允许系统在运行过程中发生死锁,但可设置检测机构及时检测死锁的发生,并采取适当措施加以清除。 - 解除死锁
当检测出死锁后,便采取适当措施将进程从死锁状态中解脱出来。