随笔 - 12  文章 - 0  评论 - 0  阅读 - 2125

操作系统(8)---死锁

一、死锁

死锁:由于竞争资源或者通信关系,两个或多个进程在执行中出现永远互相等待有其他进程引发的事件。例如,在上文的生产者和消费者问题中,若是s1和s2的初值同时设为0,则会出现生产者等待消费者消费,消费者等待生产者生产,出现了永远互相等待,即死锁。

 

二、资源分类与分配

资源可分为:

  • 可重用资源
    • 资源不能被删除且在任何时刻只能有一个进程使用
    • 进程释放资源后可被重用
    • 可能出现死锁(每个进程占用一部分资源并请求其他资源)
  • 消耗资源
    • 资源被创建和销毁
    • 可能出现死锁(进程互相等待对方的消息,消息即消耗资源)

资源分配实例:

P1:等待R1,占用R2的一个实例,需要等待P2释放R1

P2:等待R3,占用R1和R2的另一个实例,需要等待P3释放R3

P3:等待R2,占用R3,需要等待P1或者P2释放R2的一个实例,但P1需要等待P2

不难看出,P2和P3在互相等待,出现死锁

P1:等待R1,占用R2的一个实例,需要等待P2或P3释放R1

P2:占用R1,无需等待

P3:等待R2,占用R1的一个实例,需要等待P1或P4释放R2

P4:占用R2,无需等待

可以看出,只要P2/P4释放资源后,P1/P3就可以占用R1/R2资源进行执行,有循环等待,但没有所死

 

三、死锁的出现条件与处理方法

以上资源分配的例子可以看出,死锁出现的四个必要条件:

  • 互斥
  • 持有并等待(占有资源且等待资源)
  • 非抢占(资源只能由进程使用完后自主释放)
  • 循环等待(e.g p0等待p1,p1等待p2,p2等待p0)

死锁处理方法:

  • 预防限制并发进程对资源的请求,是系统在任何时刻都不满足死锁的必要条件。(比如,把互斥的共享资源封装为可同时访问;进程不持有资源,开始执行时直接请求到所有资源等)该处理方法的问题是,会破坏很多进程管理的原有机制,如进程互斥访问共享资源的机制。
  • 避免(再分配资源先判断是否会出现死锁)——>银行家算法
    • 要求进程声明需要资源的最大数目(单次借款最大数)
    • 限制提供与分配的资源数量,只确保满足进程的最大需求(借款限额度)
    • 动态检查资源分配状态,确保不会出现循环等待
  • 检测和恢复(在检测到锁死之后进行恢复,但通常操作系统选择忽略,需要使用者自己杀死进程)

四、系统资源分配的安全状态与银行家算法

系统资源分配的安全状态:

 

posted on   小光翎  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示