操作系统笔记—进程的死锁

死锁的概念

死锁:在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都被阻塞,都无法向前推进(至少有两个或两个以上的进程同时发生)

饥饿:长时间得不到想要的资源,某进程无法向前推进。(可能只有一个进程发生饥饿,发生饥饿的进程可能是阻塞态(得不到I/O设备),也可能是就行态(得不到处理机))

死循环:某种进程执行过程中一直跳不出某个循环的现象。(可以在处理机上循环,可能处于运行态)

死锁和饥饿是操作系统应该解决的问题,死循环饿是管理者的问题。

死锁产生的必要条件:

1.互斥条件:只有对必须互斥的资源争抢才会发生死锁

2.不可剥夺条件:进程所获得的资源在未完成之前。不能由其他进程强行夺走,只能主动释放。

3.请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己的已有资源保持不放。

4.循环等待条件:存在一种资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求

注意:发生死锁一定会有循环等待资源的现象,但是发生循环等待未必死锁(同类资源只有一个就会死锁)

发生死锁的时机

1.对系统资源的竞争,各进程对不可剥夺的资源的竞争可能引起死锁,对可剥夺的资源(cpu)的竞争不会引起死锁

2.进程推进程序非法,请求和释放资源的顺序不当,也会引起死锁。

3.信号量的使用不当也会造成死锁。

总之对不可剥夺的资源分配不合理就会造成死锁

死锁的处理策略

预防死锁

预防死锁,破坏死锁产生的四个必要条件中的一个或几个

破坏互斥条件:SPOOLing技术:将互斥的资源改造成允许共享使用的资源(使用队列依此使用设备或资源)

缺点:不是所有资源都可以被改造为共享使用,而且有时为了系统安全需要保护互斥性

破坏不剥夺条件:方式1.当某个进程请求新的资源得不到满足时,必须立即释放所有资源,待以后需要再重新申请;方式2.当某个进程需要的资源被其他进程占用时,可以由操作系统协助,将想要的资源强行剥夺(需要考虑进程优先级)

缺点:实现复杂,释放已获得的资源可能造成前一阶段的工作失效.会增加系统开销

破坏请求和保持条件:可以采用静态分配方法,在进程运行前一次申请完它所需要的全部资源。

缺点:有的资源可能只需要很短的时间,资源利用率极低,可能导致某些进程饥饿。

破坏循环等待条件:可以采用顺序资源分配法,给系统资源统一编号,规定每个进程必须按编号递增的顺序请求资源,同类型资源一次性请求完。

缺点:不方便增加新的设备,因为可能需要重新分配所有编号;而且进程实际使用资源的顺序可能和编号递增顺序不一致,会导致资源浪费
避免死锁

用某种方式防止系统进入不安全状态,从而避免死锁。

安全序列:如果系统按照这种序列分配资源,每个进程都能顺利完成,只要能找出一个安全序列,系统就是安全状态。安全序列可能有多个。如果分配资源后,系统找不出任何一个安全序列,那么系统就会进入不安全状态。这意味着之后可能所有进程都无法顺利执行下去。

系统处于安全状态,就一定不会发生死锁,如果在不安全状态,可能会发生死锁。

银行家算法:在分配之前预先判断这次分配是否会导致系统进入不安全状态,如果会进入不安全状态,就暂时不考虑这次请求,进行阻塞。

死锁的检测与解除

允许死锁发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁

检测死锁:用某种数据结构来保存资源的请求和分配信息;提供一种算法,利用上述信息检测系统是否已进入死锁状态

死锁定理:如果某时刻系统资源分配图是不可完全简化的,那么此时系统死锁

解除死锁的方法:

1、资源剥夺法。挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。

2.撤销进程法(终止进程法):强制撤销部分,甚至全部死锁进程,并剥夺这些进程的资源

3.进程回退法:让一个或多个死锁进程回退到足以避免死锁的地步,这就要求系统要记录进程的历史信息,设置还原点

决定操作那个进程的依据:进程优先级,已经执行的时间,还有多久完成,进程已经使用的资源,进程是交互式还是批处理式的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值