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

操作系统2.4

一、死锁,饥饿,死循环

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

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

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

二、死锁产生的必要条件

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

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

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

三、什么时候会发生死锁

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

四、死锁的处理策略

1.预防死锁

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

2.避免死锁

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

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

(1)银行家算法

(2)银行家算法步骤

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

(3)安全性算法步骤

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

3.死锁的检测和解除

(1)概览

(2)死锁检测算法

(3)解决死锁的方法

五、小结

http://www.dtcms.com/a/26055.html

相关文章:

  • 虚拟环境下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用户量身定制的智能模型管理与交互工具
  • 斐波那契数列模型:在动态规划的丝绸之路上追寻斐波那契的足迹(上)
  • 在VS-qt的程序中,后期增加PCH预编译功能,提高编译速度
  • 【练习】【二分】力扣热题100 34. 在排序数组中查找元素的第一个和最后一个位置
  • 蓝桥杯 Java B 组之设计 LRU 缓存
  • 【DeepSeek系列】04 DeepSeek-R1:带有冷启动的强化学习
  • 吊舱夜视与测距功能:核心技术、应用与未来展望
  • LC电路的作用是什么?
  • Conda 常用命令全解析
  • 大道至简 少字全意 易经的方式看 缓存 mybatis缓存 rendis缓存场景 案例
  • SV刷题小记2