一、死锁产生的4个条件:
1.互斥条件,进程之间资源不共享(两个人不能用同一个杯子喝水)
2.阻塞和保持条件,进程请求资源而被阻塞,对已经有的资源保持不释放
3.不可剥夺条件,进程未使用完的资源不能被其他进程剥夺,只能由自己释放
4.循环阻塞条件,多个进程循环链,每个进程在等待下一个进程释放资源
当死锁产生时,4个条件必定同时存在
二、死锁产生的原因:
1.系统资源配置不足,引起进程争夺资源
2.系统各并发进程请求资源的随机性
3.各进程在系统中异步向前推进,造成进程推进顺序的非法性(进程行进速度)
二、解决死锁的方法有4种:
1.忽略不计,出现死锁时,重启启动系统
1)杀死进程
2)重启机器
2.预防死锁,通过破坏死锁的4个必要条件
1)破坏互斥条件
资源是否共享由资源本身性质决定,不能破坏
将一台独享设备改造成多台设备,满足多个进程共享
2)破坏阻塞和保持条件
进程开始运行前,必须获得全部资源,如果系统不能满足,则该进程等待
系统合理的分配资源给各个进程
3)破坏不可剥夺条件
进程进入阻塞状态前强行使其他进程释放资源,这个办法不可行,因为保护进程放弃资源时的现场以及以后现场恢复,系统付出代价很高
4)破坏循环阻塞条件
采用有序分配资源,将系统全部资源按类进行全局编号排序
通常微型计算机采用1,2这两种方法
3.避免死锁,进程请求分配资源时,采用银行家算法防止系统进入不安全状态
系统确定是安全状态才给进程分配资源
4.检测和恢复死锁,通过设置一个死锁检测机构,进行死锁检测,一旦检测出系统存在死锁,通过逐一撤销进程等方法使系统恢复。
1)死锁的检测
2)死锁的恢复
①终止一些进程
a.杀死所有死锁进程,原先计算作废,以后重新计算
b.杀死一个进程,后期需要进行探测,是否死锁已经解除
②资源剥夺
a.挂起进程并剥夺资源给另一个进程使用(依赖于进程本身特性是否容易重新得到资源)
b.回滚一些进程,将不在环路(不是死锁)的进程设置到没有获得资源时的状态,把这个资源分配给死锁的进程