《操作系统》学习笔记:死锁

目录

一.进程死锁、饥饿、死循环的区别:

二. 死锁

1.1 死锁产生的原因

1.2 死锁的定义

1.3 产生进程死锁的4大必要条件:

1.4 死锁的解决方法/处理策略

一. 预防死锁(破坏四个必要条件中的一个或多个)

二. 避免死锁

三. 检测死锁

四. 解除死锁


一.进程死锁、饥饿、死循环的区别:

死锁:两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。永远在互相等待的进程称为死锁进程。

饥饿:由于长期得不到资源导致进程无法推进;

死循环:代码逻辑BUG。

二. 死锁

1.1 死锁产生的原因

  • 系统资源的竞争
  • 进程的不恰当推进顺序

  • 简单来说,死锁产生的原因就是自己不释放资源还羡慕着别人的资源。

1.2 死锁的定义

   死锁:多个进程因竞争资源而造成的一种僵局或者一种阻塞现象,如果没有外力这些进程将永远                无法推进。

1.3 产生进程死锁的4大必要条件:

  1. 互斥条件独占资源而产生死锁 - 互斥条件是指多个线程不能同时使用同一个资源,若一个线程已经拥有了该资源,那么其它想获取该资源的线程就需要阻塞等待。
  2. 请求与保持条件请求与保持条件是指线程已经拥有了一个资源,但又提出了新的资源请求,请求新资源的同时又保持自己原有的资源不释放,而请求新资源时新资源已被其它线程占有,此时请求线程被阻塞,但对自己已获得的资源保持不放。
  3. 不可剥夺条件线程获得的资源在未完成使用前不能被剥夺(包括OS),只能由进程自身释放。不可剥夺条件就是指当一个资源被线程获取了之后,如果该线程不主动释放该资源,那么该资源一直被占有,其它想获取该资源的线程就要一直进行等待。
  4. 循环等待条件是指在发生死锁时,必然存在进程-资源环形链(两个线程获取资源的顺序购构成了环行链),环路中每一个线程所占有的资源同时被一个线程申请,也就是前一个线程持有后一个线程所申请的资源,环路等待不一定造成死锁,但是死锁一定有循环等待。
  • 右上图可知,死锁产生的原因都是自己不释放资源还羡慕别人的资源! 

1.4 死锁的解决方法/处理策略

一. 预防死锁(破坏四个必要条件中的一个或多个)

  1. 破坏互斥条件(一般不会,因为事实上我们操作系统不仅不返回互斥,还非常支持互斥)将独占改为共享,将临界资源改为共享资源
  2. 破坏不可剥夺条件请求新资源无法满足时必须释放已有资源
  3. 破坏请求与保持条件:请求新资源的时候不再保持原有资源
  4. 破坏循环等待条件(一般是这个)对所有资源进行排序,要求进程按照序号来申请 / 请求资源

二. 避免死锁

  1. 安全状态:安全状态一定不会发生死锁,安全状态是按照最坏的情况排列的,不安全状态不一定会发生死锁。
  2. 银行家算法:检查当前资源剩余是否可以满足某个进程的最大需求;如果可以,就把该进程                        加入安全序列

三. 检测死锁

  • 利用死锁原理

四. 解除死锁

  • 资源剥夺法,撤销进程法,进程回退法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GaoSSR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值