当前位置: 首页 > news >正文

操作系统2.4

一、死锁,饥饿,死循环

死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象

饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象,例如:短进程优先算法

死循环:某进程执行过程中一直跳不出某个循环的现象

二、死锁产生的必要条件

产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生。

  • 互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁
  • 不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放
  • 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放
  • 循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求

注意:发生死锁时一定循环等待,但发生循环等待时未必死锁。

三、什么时候会发生死锁

总之,对不可剥夺资源不合理分配,可能导致死锁。

四、死锁的处理策略

1.预防死锁

即破坏死锁产生的必要条件

2.避免死锁

安全序列:指如果系统按照这种序列分配资源,则每个进程都能顺利完成,只要能找出一个安全序列,系统就是安全状态

系统处于不安全状态未必死锁,但死锁时一定处于不安全状态。系统处于安全状态一定不会死锁。

(1)银行家算法

(2)银行家算法步骤

  1. 检查此次申请是否超过了之前声明的最大需求数
  2. 检查此时系统剩余的可用资源是否还能满足这次请求
  3. 试探着分配,更改各数据结构
  4. 安全性算法检查此次分配是否会导致系统进入不安全状态

(3)安全性算法步骤

检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可用,就把该进程加入安全序列,并把该进程持有的资源全部回收,不断重复上述过程,看最终是否能让所有进程都加入安全序列。

3.死锁的检测和解除

(1)概览

(2)死锁检测算法

(3)解决死锁的方法

五、小结

相关文章:

  • 虚拟环境下Python调用C++开发的dll如何联调?一文解答!(Python开发环境PyCharm,C++开发环境Visual Studio)
  • Python JSON的深度解析:从基础到应用
  • 【用deepseek实现快递查询】快递物流查询-快递查询-快递查询-快递物流查询-快递物流轨迹查询-快递物流查询接口-快递查询-快递物流查询
  • Flask实现高效日志记录模块
  • DeepSeek与ChatGPT:AI语言模型的全面技术解析与对比
  • linux进程间通信的posix消息队列应用记录
  • Go日期时间处理工具Carbon
  • python 如何获取文件的keys
  • 【C语言】C语言 哈夫曼编码传输(源码+数据文件)【独一无二】
  • 2025年人工智能与教育系统国际学术会议(ICAIES 2025)
  • postgres源码学习之简单sql查询
  • Java开发实习面试笔试题(含答案)
  • 【信息系统项目管理师】专业英语重点词汇大汇总
  • 数字电路中的焊接技术
  • MyBatis XML映射文件中的批量插入和更新
  • 模电知识点总结(2)
  • 信息安全管理体系认证:赋能组织应对数字时代的风险与挑战
  • 【含文档+PPT+源码】基于微信小程序的猎兔汽车保养维修美容服务平台的设计与实现
  • INA219电流、电压、功率测量芯片应用
  • Ollama 本地GUI客户端:为DeepSeek用户量身定制的智能模型管理与交互工具
  • 外交部:反对美方人士发表不负责任谬论
  • 以军向也门3个港口的居民发布撤离令
  • 乌总统:若与普京会谈,全面停火和交换战俘是主要议题
  • “典孝急乐批麻蚌赢”:互联网“八字真言”与当代赛博赢学
  • 夜读|尊重生命的棱角
  • 人民空军:网上出现的“运-20向外方运送物资”为不实消息