一、什么是死锁?
如果进程集合中的每个进程都在等待该集合中的其他进程(包括自身)执行,则在没有外力的情况下将无法继续。 这是一种死锁,处于死锁状态的进程称为死锁进程。
二.发生死锁的原因?
1 .竞争资源导致的死锁现象)在系统内多个进程共享的资源数量不足以满足所有进程的需求的情况下,会发生导致各资源竞争的死锁现象。
(1)可剥夺资源和不可剥夺资源:可剥夺资源是指某个进程获得此类资源时,其资源可以被其他进程或系统剥夺,而不可剥夺资源是指系统将此类资源
)2)不可从竞争中夺取资源)系统内不可剥夺的资源数量不足以满足各进程执行的要求时,会在执行中发生,不同的进程会因争夺这些资源而陷入僵局。
示例:资源a、b; 过程c,d
资源a、b都是不可剥夺的资源:一个流程申请后不能强制回收,只能在流程结束后自动释放。 内存是剥夺资源
进程c申请了资源a,进程d申请了资源b。
其次,在c的操作中使用资源b,在d的资源中使用资源a。 但是,c、d都得不到以下资源,发生了死锁。
)3)竞争性临时资源
2 .进程推进顺序不正确,发生死锁
3 .发生死锁的4个必要条件?
(1)排他条件)进程不允许其他进程访问被分配的资源,其他进程访问该资源时,只能在占有该资源的进程使用结束后等待直到释放资源
)要求和保持条件)进程获得一定资源后,向其他资源提出要求,但该资源可能被其他进程占有,这虽然阻止了要求,但并不插手自己获得的资源
)3)不可剥夺的条件)是指过程已经获得的资源,使用完毕前不得剥夺,使用后只能自行释放
4 )循环等待条件)意味着在进程发生死锁后,一定会存在进程(资源之间的循环链)
四.死锁处理的基本方法
1 .死锁的预防:通过设置几个限制条件,破坏发生死锁的必要条件
2 .避免死锁:在资源分配过程中,通过某种方式使系统不安全,从而避免死锁
3 .死锁检测:允许发生死锁,但通过系统检测后,采取措施消除死锁
4 .解锁:该方法与死锁检测联合使用