死锁预防是指在任何系统操作前(例如分配资源、调度进程等),事先评估系统的可能 情况,严格采取措施使得死锁的四个必要条件不成立。

―、死锁预防的概念

死锁预防的基本思想是防范于未然。

操作系统在系统设计时事先确定资源分配的算法,限制进程对资源的申请,从而保证不发生死锁。具体的做法是破坏产生死锁的四个必要条件之一。

在本章第一节第三部分中讨论了产生死锁的四个必要条件。如果设法使四个条件中的一个不能成立,那么就破坏了死锁产生的必要条件,从而可以预防死锁的发生。其中,打破四个必要条件中的2、3和4是一种保证系统不进人死锁状态的静态分配策略。这将在本章第 二节第二部分中进行介绍。

对于条件1,我们要区别对待不同的资源情况。若某些资源是由于资源数量不足而造成 的,可以通过增加资源数量的方法来进行预防。例如对于第一节第二部分中的【例5. 2】, 内存是可重用资源,进程在使用有限的内存时一般通过分时交替使用来实现资源共享。若系 统能提供足够多的内存,使得各个进程均可以独享自己的内存空间,那么也就不需要互斥使 用内存了,也就打破了死锁的四个必要条件之一。但是这种死锁预防的方法代价高昂。另一 类资源的数量有限和互斥使用是资源的固有特性,例如系统中的共享写数据,各种信号量 等,这些资源不能通过增加资源数量来解决,所以这种情况下通过破坏互斥条件来预防死锁不现实。

二、资源的静态分配策略

在预防死锁的静态分配策略中,资源分配的原则如下。

一个进程在申请新资源的要求不能立即得到满足时,便处于等待状态。而一个处于等待状态的进程的全部资源可以被剥夺。就是说,这些资源隐式地释放了,被剥夺的资源重新加 入到资源表中。仅当该进程重新获得它原有的资源以及得到新申请的资源时,才能重新启动 执行。这种方法破坏了不可剥夺条件。

具体实施方法如下。

(1)若一个进程已占用了某些资源,又要申请一个新的资源,在申请新的资源时,不能立即得到满足,在变为等待状态之前,该进程必须释放已占有的所有资源,即阻塞前释放资源

(2)若一个进程申请某些资源,首先系统应检查这些资源是否可用,如果可用,就分配给该进程。否则,系统检查这些资源是否分配给另外某个等待进程。若是,则系统将剥夺所需资源,分配给这个进程。如果资源没有被等待进程占有,那么,该进程必须等待。在其等待过程中,其资源也有可能被剥夺

破坏不可剥夺条件以预防死锁的方法适用于这样一些资源,它们的状态是容易保存和恢复的,例如处理器、内存等。

这种策略实现起来较复杂,而且代价太大。因为,一个资源在使用一段时间后被强行剥夺,会造成前阶段工作失效。而且,在极端情况下,可能出现某个进程反复申请和释放资源,使进程执行无限推迟;增加了系统开销,延长了进程的周转时间,降低系统的吞吐量和性能。

在预防死锁的静态分配策略中,还可以采用以下方法,该方法破坏了请求和保持条件。

(3)每个进程必须在开始执行前就申请它所需要的全部资源,仅当系统能满足进程的资 源申请要求且把资源一次性分配给进程后,该进程才能开始执行

采用该方法后,进程在执行过程中不再申请资源,故不可能出现占有了某些资源再等待其他资源的情况,即“请求和保持”的条件不成立,从而预防死锁的发生。

这种方法的优点是简单、安全、容易实施;但其缺点是严重浪费系统资源,会造成一些资源在很长时间内得不到使用,降低资源利用率。另外,因为当进程获得其所需全部资源后方能开始运行,但由于有些进程长期占用资源,致使进程推迟,甚至得不到运行。

实现这种静态分配资源策略还有一个问题是大部分进程在运行开始时不能确定所需要的 全部资源,那么就按以下方法处理。

(4)当进程没有占a资源时才允许它去申请资源,如果进程已经占用了某些资源而又要再申请资源,则它应先归还所占的资源后再申请新资源

这种资源分配策略仍会使进程处于等待状态,这是因为进程所申请的资源可能已被其他 进程占用,只能等占用者归还资源后才可分配给申请者,但是,申请者是在归还资源后才申请新资源的,故不会出现占有了部分资源再等待其他资源的现象。这种方法也存在着资源利用率低的缺点。

三、资源的有序分配法

釆用资源有序分配策略,其基本思想是将系统中所有资源顺序编号。一般原则是,较为紧缺、稀少的资源的编号较大。进程申请资源时,必须严格按照资源编号的顺序进行,否则 系统不予分配。即一个进程只有得到编号小的资源,才能申请编号较大的资源,释放资源 时,应按编号递减的次序进行

例如,设扫描仪(输入设备)、打印机(输出设备)、绘图机(输出设备)的编号依次 为1、2、3。这样,所有进程对资源的申请,严格地按编号递增的次序提出。这种申请方式 不会出现第一节第二部分中【例5.1】的情况,P2申请的输出设备不会先于输人设备,也 就不会出现死锁的现象。

采用资源有序分配策略,破坏了死锁四+必要条件中的循环等待条件

操作系统中怎么预防死锁呢?简单列举几种方法!相关推荐

  1. 设置读取plc时间_最简单的一种方法来step7 读取PLC时间日期

    step7 读取PLC时间日期最简单的一种方法 很多情况下我们都需要根据时间日期的变化来改变自动化系统的控制方式,这时候我们就需要将这些时间和日期的信息,从PLC中调出,下面我们就一起来学习,S7-3 ...

  2. js判断wifi_使用JS在浏览器中判断当前网络连接状态的几种方法

    使用JS在浏览器中判断当前网络状态的几种方法如下: 1. navigator.onLine 2. ajax请求 3. 获取网络资源 4. bind() 1. navigator.onLine 通过na ...

  3. 在Arcmap中加载互联网地图资源的4种方法

    在Arcmap中加载互联网地图资源的4种方法 前一段时间想在Arcmap中打开互联网地图中的地图数据,如影像数据.基础地图数据等,经过简单研究目前总结了四种方法,整理下与大家分享,有些内容可能理解有误 ...

  4. C语言中三个数比较大小详解——三种方法

    ​ C语言中三个数比较大小详解--三种方法 方法一:if-else法 方法二:函数法 方法三:三目运算符法 C语言中比较三个数的大小有很多方法,以下是我总结的三种方法: 首先我定义 int a = 1 ...

  5. 让生活变得简单的60种方法

    让生活变得简单的60种方法 60 Ways To Make Life Simple Again [zz]来自:http://www.marcandangel.com/2010/11/01/60-way ...

  6. android 自定义录像机,android 手机录屏,最简单的 3 种方法

    原标题:android 手机录屏,最简单的 3 种方法 公众号文章不支持插入外链,下面提到的所有工具,都可点击 阅读原文前往我的个人网站 kejiweixun.com 下载. 安卓手机录制屏幕有很多方 ...

  7. java中n次方怎么表示_n次方_word中输入N次方的符号的两种方法

    为了打编程题的题目,而题目里面有X²,但我不懂,只好去网上查了,经过我的多方查找,最后总结了一下几种方法.下面一起和学习啦小编来学习一下输入N次方的符号吧,希望对你有帮助! 输入N次方的符号方法一 1 ...

  8. linux下dd做优盘启动_Linux中制作U盘启动盘的三种方法,使用启动盘创建器/dd命令和Etcher...

    本文介绍在Linux系统中制作U盘启动盘的三种方法:使用启动盘创建器.dd命令和Etcher,以下以优麒麟Ubuntu Kylin 19.04为例,为你介绍这三种方法.如果要在Windows中制作U盘 ...

  9. Unity中ugui如何制作不规则按键的两种方法

    Unity中ugui如何制作不规则按键的两种方法 两种不同的方案 目前,关于这个问题如何,解决通过搜索引擎我们能找到两种不同的方案: 多边形碰撞器: 该方法是指给精灵(Sprite)添加一个多边形碰撞 ...

最新文章

  1. 2022-2028年中国塑料制品行业投资分析及前景预测报告(全卷)
  2. 主题模型(topic models)总结
  3. 使用ganymed-ssh2-build通过ssh获得远程服务器参数
  4. 一个关于native sql的程序
  5. 人工神经网络之激活函数 -softmax函数
  6. linux python开发环境_如何在Linux系统中搭建Python编程环境
  7. Bginfo软件在域的部署和应用
  8. 【LeetCode笔记】394. 字符串解码(Java、递归、栈)
  9. vue3中 使用 swiper 插件,自定义切换按钮, 将 前进后退 、左右切换 按钮放到容器外部
  10. 简单的beego分页功能代码
  11. Linux学习笔记:Linux常用命令操作
  12. linux上数据库导入与导出(mysql)
  13. 双色球机器人博客博客,双色球预测程序算法
  14. EAS 后台事务定时执行设置
  15. 2015-nature-deep learning-LeCun, Bengio and Hinton
  16. 骁龙865相当于什么处理器 骁龙865相当于麒麟的多少
  17. 使用Apache poi生成excel并绘制折线统计图,扇形统计图
  18. 2022中元节前后几天不出门?前三天后三天不能出门是真的吗?
  19. 【论文阅读】SyncPerf: Categorizing, Detecting, and Diagnosing Synchronization Performance Bugs
  20. 全链路压测那点事(一)

热门文章

  1. Hikari连接池——java.lang.Exception: Apparent connection leak detected
  2. 大疆激光雷达livox avia 在ubuntu18.04+ROS中基本使用方法
  3. Oracle11G数据库重演测试
  4. Linux如何测试驱动性能,掌握 Linux PC 性能之基准测试
  5. 有趣的海盗分金币问题
  6. VIPL Lab 9篇ACM MM 2019和IEEE TIP 论文精解
  7. Vue小demo—美团注册页面
  8. 关于Android开发的面试经验总结,妈妈再也不用担心我找工作了!
  9. OPENGL ES 2.0 知识串讲(2)――EGL详解
  10. 解决VMware安装后网络连接中没有VMnet虚拟网络适配器