操作系统学习记录20220405

操作系统学习记录(三)

2.4.1 死锁的概念

1.死锁:各个进程为了竞争资源而互相等待对方进程里的资源,进而所有进程都阻塞。至少有两个或以上的进程发生死锁,且处于阻塞态。

2.饥饿:长期得不到某种资源,可能只有一个进程发生饥饿,且处于就绪态或阻塞态。

3.死循环:进程因某些问题进入死循环,如逻辑问题。可能只有一个进程发生死循环,且可能处于运行态。

4.死锁条件:①只有互斥资源会导致死锁②互斥资源是不可主动剥夺的③存在资源的循环等待④进程在占用一定资源的同时,又主动申请新的资源被拒。

5.存在资源的循环等待时,不一定会发生死锁;发生死锁,一定会存在资源的循环等待。

6.对不可剥夺的资源分配不合理时,会导致死锁。比如生产消费者模型中,互斥信号量使用在同步信号量之前,这种PV操作导致死锁。

7.死锁的处理策略:预防死锁(打破四个条件);避免死锁(银行家算法);死锁的检查与解除(已经产生死锁)。

2.4.2 死锁处理策略之预防死锁

1.方法一:破坏互斥条件。比如,对于同一打印机资源,原本是同时只能由一台打印机同时占用,但是现在在打印机上开启管家进程,进程1和进程2把自己的打印需求交给打印机的管家进程就好了,进程1和进程2就可以继续去执行自己的事情。缺点是可执行性差,很多情况下互斥条件是故意设置的。

2.方法二:破坏不可剥夺条件

①因为某进程的优先级高,所以剥夺了其他进程正在占用的资源。②如果某进程尝试申请某种竞争资源失败,就立即放弃竞争。

缺点是反复读写资源系统开销变大、且容易造成进程饥饿。

3.方法三:破坏循环等待条件

在多个进程竞争某些资源的时候,就考虑竞争这些资源的顺序。缺点是编程复杂,进程对资源的使用顺序也会造成资源浪费。

4.方法四:破坏请求保持条件

运行前分配所有资源,进程在占用某资源之后就会一直占用。缺点是系统资源利用率低,可能会造成进程饥饿。

2.4.3避免死锁(银行家算法)

银行家算法:

①通过当前的分配方案计算剩余可分配资源情况;

②查看剩余可分配资源是否满足某一进程最大剩余需求,如果满足则进入第③步进行进一步分配,如果不满足则处于不安全序列,判定为可能会发生死锁,结束;

③将剩余可分配资源分配给上述进程,等待该进程释放资源,重新计算剩余可分配资源,如果所有进程均被满足最大剩余需求则结束,否则进入第②步。

2.4.4 死锁的检查与解除

1.死锁检查算法:首先判断不阻塞进程,然后消除其已请求到(保持中)和正在请求的资源,查看最后是否能完全将资源回退给系统。配合资源分配图查看。

2.死锁解除策略:

①直接将会发生死锁的某一进程剔除,挂到外存中;

②直接切断所有发生死锁的进程,简单粗暴但是会造成进程之前的执行被浪费;

③将发生死锁的某进程回退到之前某个状态,这个过程可以释放部分资源以缓解死锁的局面。一般来说通过进程的存在时间、优先级、资源占有率、进程是否直接与用户交互等判断回退哪个进程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值