操作系统(Operating System)专题篇——死锁与饥饿

目录

0.前言

1.银行家算法

1.1 安全状态

1.2 不安全状态

2.哲学家就餐问题


0.前言

本系列文章旨在记录操作系统的知识点,可用于期末复习,笔者理解尚浅,文中不正之处静待批正。专题篇为大题常考题型,必须要重点把握。

1.银行家算法

安全序列:若按此序列分配资源,每个进程都能完成,此时系统为安全状态

若找不出任何一个安全序列,则系统为不安全状态

1.1 安全状态

safe sequence:P2,P1,P3,P4,最后每个进程都能执行

检验是否存在安全序列的方法:V向量表示还剩余的资源,则每一轮判断V是否满足C-A矩阵中的某一进程,若满足则分配给该进程所需资源,执行后释放资源,最终V = V + A。如果无论怎样的执行顺序都不能使V满足任何进程的需要,则发生死锁,系统处于不安全状态。

1.2 不安全状态

如果P2先执行,则现在这个序列是安全序列。但是如果在P2之前P1请求了额外的一个R1和一个R3,如果允许分配,则V变成{0,1,1},导致无法找到安全序列,系统处于不安全状态。

2.哲学家就餐问题

问题分析:哲学家就餐问题与之前的同步互斥最大的不太在于,每个进程需要持有两个临界区资源才能正确执行,而当有多个临界区时,可能会发生死锁

朴素的想法:

分析:最简单的想法是,哲学家先拿起左边的筷子,再拿起右边的筷子,然后吃完再依次放回,但这种方法没有实现互斥地访问临界区,可能出现每个进程都持有左边的筷子,都在等待右边的筷子。

正确解法一:

分析:第一种解法,让哲学家竞争进入吃饭房间的资格,每次只能有一个哲学家在房间中吃饭,吃完再离开。

正确解法二:

分析:方法二的思想是先测试,只有左右都有叉子才吃饭。哲学家先思考,如果想要吃饭,则先判断左边的邻居是否正在吃;如果正在吃,则等待,如果没有吃则拿起左边的叉子,右边的叉子进行同样的判断。吃完后,先检查左边邻居是否在等待叉子,如果没有等待,则放下左叉子;如果在等待,则直接给左邻居,右边进行同样的判断。这样的方式保证了,拿筷子和放筷子都在临界区内完成

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五倍子的代码空间

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

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

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

打赏作者

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

抵扣说明:

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

余额充值