计算机操作系统 死锁问题

概念

  • 条件是基础,在一定的原因下,产生结果

死锁三胞胎

  • 死锁 僵持,消耗时间,双方都占用了部分资源,不释放
  • 活锁 双方互相谦让,都不占用资源
  • 饥饿 谦让的一方一直等待,无法占有资源,导致饥饿问题

死锁的原因以及必要的条件

应用程序 信号量使用不当 

  • 信号量的初始值设置错误,设为0,两个进程都卡死;
  • 解决办法 :代码开发人员 和 代码测试人员
semaphore s1 = 0;
semaphore s2 = 0;
A(){while(1){p(s1);吃饭;v(s2);}
}B(){while (1){p(s2);喝茶;v(s2);}}

OS内核程序  不可剥夺的软硬件资源

  • 多进程对不可剥夺资源的竞争
  • 进程申请资源的顺序不合理

死锁的必要条件

死锁产生了,一定会产生如下四个条件;但是具有这四个条件不一定会造成死锁

  • 互斥条件          临界资源
  • 不可剥夺条件  进程之间不可以互相剥夺彼此的资源
  • 请求保持条件  占有资源不主动释放
  • 循环等待条件  

预防死锁

破坏死锁的必要条件

  • 互斥条件          临界资源   几乎行不通,比如更改临界资源
  • 不可剥夺条件  进程之间不可以互相剥夺彼此的资源  需要付出代价,也有,比如cpu的切换;但是如果是打印机,会造成彼此文件交叉融合
  • 请求保持条件  占有资源不主动释放   一次性申请完临界资源 
  • 循环等待条件  递增编号,按照顺序申请资源。比如一个资源切成两份,第一份资源叫1,第二份资源叫2,A申请资源1,B在申请的时候看到1号资源已经被占用,就需要等待,A继续申请2号资源,当A使用完资源,释放之后。B开始申请,按照资源的序号进行资源的申请

避免死锁

  • 银行家算法  计算安全序列
  • 规划合理的资源申请顺序,提高资金的流转速度
  • 安全序列 找到 无死锁 可以避免;找不到 必死锁 无法避免
  • 因此将1000万借给万达,收回3000万借给万科或者恒大都可以 
  • 访问顺序 万达 万科 恒大;万达 恒大 万科

例1

例2 

死锁的检测与解除

死锁定理和资源分配图

  • 化简 如果可以化简到最简则无死锁
  • 不能化简到最简模式则检测到死锁,进行下一步解除死锁,1,资源剥夺法;2,报销进程法;3,进程回退法

资源分配图

  • 圆圈代表进程
  • 长方形代表一类资源的容器
  • 长方形中的圆圈,代表该类资源,数量代表资源的数目
  • 边 :从长方形指向圆圈,代表已分配边;圆圈指向长方形,代表申请边,请求边

  • 寻找圆圈进程,依次尝试,判断p1的申请边(从圆圈指出的边)是否都可以得到满足,满足则删除,不满足则寻找下一个圆圈进程

死锁的解除

  • 资源剥夺法 
  • 撤销进程法 进程停止运行
  • 进程回退法 进行由运行80%出现死锁,进程回退到70%等待,继续执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

武忠祥.高等数学.基础课-第一章函数 极限 连续P10

sin(1/x) 详细解析网址 1.图像 2.极限 x–>0时,函数极限不存在 sin2x 详细作图网址 1.图像 2.周期为Π f(x)周期为T,f(axb)周期为T/|a| 所以sinx周期为2Π,sin2x周期为2Π/2Π |sinx| 详细讲解网址 1.图像 2.周期:Π 3.绝对值 (1)y|sinx|的图…

算法章节 递归、排序、⼆分查找

递归 概念与特性函数调⽤函数⾃身的编程⽅式叫做递归,调⽤为”递“,返回为”归“三个条件1. ⼀个问题的解可以分解为多个⼦问题的解; 2. 分解之后的⼦问题,除了数据规模不同,求解思路跟原问题相同; 3. 存在…

codeforces 50A-C语言解题报告

50A题目网址 解题报告-others 题目解析 1.输入n x m大小的木板,使用21大小的多米诺去填满,求最多的多米诺数目 2.通过分析把木板分为奇数和偶数的情况 1)有一边是偶数的情况: 使用2去填满 2)两个边都是奇数 奇数-1偶数 还是让木板的(奇数-1)边去和2平行,再加上 (m-1)/2(n/1)…

Java命令:jps — 查看进程信息

文章目录一、简介二、常用命令1、jps2、jps -l3、jps -q4、jps -m5、jps -v6、jps失效一、简介 JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。 功能: 显示当前所有java进程pid的命令,我们可以通过这个命令来查看到底启…

操作系统概述 记录操作系统相关知识

操作系统 现代计算机系统由一个或多个处理器、主存、打印机、键盘、鼠标、显示器、网络接口以及各种输入/输出设备构成。上面提到的这些东西都属于硬件资源,用户不会直接和硬件进行交互,计算机安装了一层软件,这层软件能够通过响应用户输入的…

JDK工具使用大全

文章目录一、简介一、简介 在JDK的bin目录下有很多命令行工具: 常用工具使用详解如下: Java命令:jps — 查看进程信息 Java命令:jstack — 获取线程dump信息 Java命令:jmap — 打印指定进程的共享对象内存映射或…

Linux进程 excel族函数的用法

介绍 使用fork创建一个进程之后,经常会在新进程中调用exec函数执行别的程序当前进程调用exec函数之后,这个进程会被完全替代换成新的程序,即便如此仍然是同一个进程,进程ID不变函数族 execl execlp execle execvp execvpe头文件 …

C++primer 12章 动态内存和智能指针

C引入智能指针的目的 使用智能指针来管理动态分配的对象,当一个对象应该被释放的时候,指向他的智能指针确保自动释放它 内存分配 静态内存:局部static对象、类static数据成员、定义在任何函数之外的变量栈内存:定义在函数内的非…

Mac下iTerm2的安装与配置

目录一、iTerm2简介二、下载以及安装三、iTerm2主题配置四、配置Oh My Zsh1、安装方式(1)一键安装(2)手动安装3、切换zsh4、修改主题五、配置Meslo字体六、声明高亮七、自动建议填充八、iTerm2快速隐藏和显示九、iTerm2隐藏用户名…

Java命令:jinfo — 查看进程参数

目录一、简介二、常用命令1、jinfo -flags pid : 打印当前指定java进程中已经设定的所有JVM参数信息2、jinfo -flag pid : 打印指定名称的参数3、jinfo -flag [|-] pid : 打开或关闭参数4、jinfo -sysprops pid : 打印当前java进程中设定的系统环境参数一、简介 jinfo 是 JDK …

C++primer第八章 IO库 8.1 IO类

IO库设施 istream (输入流)类型,提供输入操作。ostream (输出流)类型,提供输出操作。cin,—个 istream对象,从标准输入读取数据。cout, 一个ostream对象,向标准输出写入数据。cerr…

2014年英语一作文partB漫画作文

题目 Write an essay of 160-200 words based on the following drawing.In your essay you should describe the drawing brieflyexplain its intended meaning,give your comments 做题点 1.使用三段式,第一段:图片内容;第二段:图片暗示;第三段:写自己的评论 2.描述图片…

Spring Cloud 系列之 Nacos 配置中心

目录一、Nacos简介二、Nacos安装及配置1、环境准备2、安装包下载(1)源码方式(2)发行包方式3、启动Nacos服务4、Nacos数据库配置(1)MySQL数据源(2)初始化 MySQL 数据库(3&…

C++primer第八章 IO库 8.2 文件输入输出

8.2文件输入输出 头文件fstream定义了三个类型来支持文件IO:ifstream从一个给定文件读取数据,ofstream向一个给定文件写入数据,以及fstream可以读写给定文件。在17.5.3节中(第676页)我们将介绍如何对同一个文件流既读…

SpringBoot 集成 Nacos

目录一、前言二、Nacos集成1、引入Nacos依赖2、设置Nacos配置3、加载Nacos配置中心配置项4、Nacos集成验证5、Nacos配置中心配置项动态生效Nacos安装详见:Spring Cloud 系列之 Nacos 配置中心 一、前言 上一篇已经讲解了怎样安装安装、启动、配置 Nacos&#xff0c…

C++primer第八章 IO库 8.3string流

8.3string流 sstream头文件定义了三个类型来支持内存IO,这些类型可以向string写入数据,从string读取数据,就像string是一个IO流一样。istringstream从string读取数据,ostringstream向string写入数据,而头文件stringstream既可从string读数据…

英语口语海报演讲--东软

海报 海报上的内容 Nuclear waste water 1.Damage the devastating impact of nuclear radiation on the world 2.Marine life genetically mutated or dead 3.water resources polluted water resources 4.the future of humanity genetic damage/food and environment destr…

C++primer第九章 顺序容器 9.1 顺序容器概述 9.2容器库概览

一个容器就是一些特定类型对象的集合。顺序容器(sequentialcontainer)为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。与之相对的,我们将在第11章介绍的有序和无序关联容器,则根据…

C++primer第九章 顺序容器 9.3 顺序容器操作

9.3顺序容器操作 顺序容器和关联容器的不同之处在于两者组织元素的方式。这些不同之处直接关系到了元素如何存储、访问、添加以及删除。上一节介绍了所有容器都支持的操作(罗列于表9.2(第295页))。本章剩余部分将介绍顺序容器所特…

C++primer第九章 顺序容器 9.4 vector对象是如何增长的

为了支持快速随机访问,vector将元素连续存储,每个元素紧挨着前一个元素存储。通常情况下,我们不必关心一个标准库类型是如何实现的,而只需关心它如何使用。然而,对于vector和string,其部分实现渗透到了接口中。假定容器…