操作系统————死锁

11.死锁

概念:在并发环境下,各个进程因竞争资源而造成的一种互相等待的对方的资源,导致个进程都阻塞无法向前推进的现象。
饥饿:一个进程由于其他进程一直占用着资源,所以一直无法访问资源,导致无法向前推进的现象。
死循环:一个进程执行过程中一直循环,所以一直无法向前推进的现象。

死锁产生的条件:
1.互斥条件:一个资源每次只能被一个进程使用。
2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
3.不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
注意:发生循环等待条件不一定发生死锁,但是发生死锁一定有循环等待条件。

死锁的预防——静态策略:
1.破坏互斥条件:
将互斥的资源改为共享资源,如打印机使用SPOOLING技术,
2.破坏请求与保持条件:
进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。
可以采用静态分配的方法,即进程在运行前一次申请完所有需要的资源,否则不运行。
缺点:资源被严重浪费,进程延迟运行。
3.破坏不剥夺条件:
a.当某个进程请求资源不满足的时候他必须立即释放他已有的资源。
b.当某个进程请求资源的时候被其他进程已经占有了,可以由操作系统协助,将想要的资源强行剥夺。
4.破坏循环等待条件:
存在一种资源的循环等待链,每个进程对下一个进程持有的资源类型是已知的,并且形成一个环形链。
可采用顺序资源分配法,将资源进行编号,进程在申请资源时必须按编号顺序进行。

死锁的避免——动态策略:
安全序列:是指如果系统按照某种序列分配资源,则每个进程都能顺利完成,则称该序列为安全序列。安全序列有多个,只要找到一个安全序列系统就是安全状态。
如果系统找不到一个安全序列,则系统处于不安全状态。
如果系统处于安全状态就一定不会发生死锁。如果系统进入不安全状态系统可能发生死锁,但是死锁一定是不安全状态。

银行家算法:
荷兰家Dijkstra提出的一种安全状态检查算法。
核心思想:在进程提出资源请求时,先预判此次分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让进程等待。
操作步骤:
1.检查此次请求分配的资源是否超过了进程的需求量。
2.检查此时系统剩余的资源是否能满足进程的需求。
3.将本次的分配情况和进程的需求量、系统现存的资源量进行比较,判断是否安全。

在这里插入图片描述

死锁的处理策略——检测和接触(允许死锁发生)
1.死锁的检测:
用某种数据结构来保存资源的请求和分配信息,并利用某种算法检测是否存在循环等待,如果存在则说明系统中出现了死锁。
2.死锁的解除:
a.剥夺资源:从其他死锁进程(刮起某些进程————暂时存放外存)抢占资源,分配给其他死锁进程。应该防止被刮起的进程长时间处于外存中而饿死的现象。
b.撤销进程(终止进程法):强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。
c.进程回滚:让一个或多个死锁进程回退到某个安全状态,并释放他所占有的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值