操作系统8-死锁和进程通信----(库函数scanf和printf是基于管道读写实现的!

2023-11-15

大纲:
死锁概念及死锁处理方法
银行家算法
死锁检测
进程通信方法:信号、管道、消息队列、共享内存

一、死锁

背景

  • 可重用资源:资源不能被删除且任何时刻只能有一个进程使用,进程释放资源后其他进程可重用,可能出现死锁

  • 消耗资源:资源创建和销毁,当进程间相互等待接收对方消息时也可能出现死锁
    =======》资源分配图:描述资源和进程间分配和占用关系的有向图

  • 出现死锁的必要条件:
    1)互斥:在一个事件只能由一个进程使用资源
    2)持有并等待资源:
    3)非抢占:资源只能在进程使用后自愿放弃
    4)循环等待:

死锁处理方法

  1. 死锁预防:确保系统永远不会出现进入死锁状态,将前述的四个必要条件中任意一个条件避免掉,但是这样往往影响很大效率很低
  2. 死锁避免:在使用前进行判断,只允许不会出现死锁的进程请求资源(有效的)
  3. 死锁检测和恢复:在检测到运行系统进入死锁状态后,进行恢复:
    由应用进程处理死锁,通常OS就忽略死锁的存在
死锁预防:使系统在任何时刻都不满足死锁的必要条件

1)互斥:把互斥的共享资源封装成可同时访问
2)持有并等待:进程请求资源时,要求它不持有任何其他资源(在进程开始时,就一次把所有资源都申请到),但资源利用率太低了
3)非抢占:如进程请求不能立即分配的资源,则释放已占有的资源
4)循环等待:对资源排序,要求进程按顺序请求资源(效率下降

死锁避免:利用额外的先验信息

在分配资源时判断是否会出现死锁,只在不会死锁时分配资源“
1)要求进程声明需要资源的最大数目
2)限定提供于分配的资源数目,确保满足进程的最大需求
3)动态检查资源分配状态,确保不会出现环形等待

银行家算法:一种死锁避免的方法

银行家算法以一银行借贷分配策略为基础,判断并保证系统处于安全状态:
1)客户在第一次申请贷款时,声明所需最大资金量,在满足所有贷款要求并完成项目时及时归还
2)在客户贷款数额不超过银行拥有的最大值时,银行家尽量满足客户需要

===> 银行家:os;资金:资源; 客户:申请资源的线程

  • 数据结构:总需求量,剩余空闲量,已分配量,未来需要量
    判断安全状态……(接下来需要的比现在剩余的小,就安全
死锁检测:允许系统进入死锁状态

维护系统的资源分配图,定期调用死锁检测算法来搜索图中是否存在死锁
检测方法:

  • 方法1: 将资源分配图转成等待图:将资源分配图中的资源都去掉只剩下进程,就变成等待图了,如果等待图中由环,则死锁发生
  • 方法2:用Available, allocation ,request三个变量构成一个死锁检测算法(数据结构, 开销很大

死锁恢复:

  1. 终止所有死锁i进程
  2. 依据某些原则一次只终止一个进程直到死锁消除:
    进程优先级,进程已运行时间及还需运行时间,进程已占用资源,进程完成需要的资源,终止进程数目,进程时交互还是批处理
    但是又可能某些个进程会一直被选做受害者,一直得不到执行,由此产生饥饿

二、进程通信

进程通信IPC(inter-process communication):是进程进行通信和同步的机制

  1. IPC提供两个基本操作:发送操作send(message) 和接受操作receive(message)
  2. 进程通信流程:在通信进程间建立通信链路,再通过send/receive交换消息
  3. 进程链路特征:物理链路(如,共享内存,硬件总线),逻辑链路(如,逻辑属性)
  4. 通信方式有两种:间接通信和直接通信
  • 间接通信:依赖OS kernel,进程将信息发送到内核的消息队列上,另一个进程从kernel消息队列中读出来,从而完成依赖于操作系统内核的一个间接通信。此时交互的两个进程的生命周期不必相同
    1)每个消息队列都有一个唯一的标识,(在内核中可能维护了多个消息队列,必须得直到要通信的对方是谁
    2)只有共享了相同消息队列的进程,才能够通信
    3)通信链路可以是单项的,也可以是双向的,
    4)消息队列可以与多个进程相关联

  • 直接通信:在两个进程之间建立一个共享信道,一个进程从共享信道发数据,另一个进程从共享信道读数据。这两个进程生命周期得相同
    1)直接通信的进程必须正确命名对方,send(P,message), receive(Q,message)
    2)通信链路必须满足:1自动建立链路 2一条链路恰好对应一对通信进程 3每对进程之间只有一个链接存在
    3)链接可以是单向的,可以是双向的

进程通信又分为阻塞通信非阻塞通信:阻塞通信也称为同步通信,非阻塞通信为异步通信

通信链路缓冲

进程发送的消息在链路上可能有三种缓冲方式:

  1. 0容量:发送方必须等待接收方(就是没缓存嘛
  2. 有限容量:通信链路缓冲队列满时,发送方才必须等待
  3. 无限容量:发送方任何时候都可以发,发送的数据在链路上缓存,接收方任何时候都可以接受。(当然这不太可能

进程通信机制的具体实现——信号和管道,消息队列和共享内存

信号signal:进程间的软件中断通知和处理机制

进程在执行过程中有正常的执行流程,如果发生了意外的事件怎么处理呢?并且每一个进程有不同的处理的时候怎么办?

  • 信号的接受处理:
    1)捕获catch:执行进程指定的信号处理函数被调用
    2)忽略ignore:执行操作系统指定的缺省处理,如进程终止,进程挂起
    3)屏蔽mask:禁止进程接受和处理信号。(可能是暂时的,当处理同样类型的信号

  • 不足:只适合快速通信,因为这种通信机制仅仅只能传送信号的类型,传送的信息量小

  • 信号的实现:
    1)进程启动时,注册信号处理函数给os内核,以便有信号发送给os时,os可以知道去执行哪一个处理函数
    2)有进程或设备发送信号的时候,os kernel负责把这个信号送给指定的进程,并且启动响应的信号处理函数
    3)执行信号处理函数,比如杀掉进程或者忽视进程之类的

管道pipe:进程间基于内存文件的通信机制

两个数据想通信,于是在内存中建了临时文件,就将要通信的数据放到临时文件中,子进程从父进程继承通信描述符,缺省文件描述符(fd)有stdin,stdout,stderr

  • 与管道相关的系统调用:
    1)读管道:read(fd, buffer,nbytes),scanf()是基于这个实现的!!!!!!库函数scanf()就是基于管道的读实现的!
    2)写管道:write(fd, buffer,nbytes),printf()是基于写管道实现的!!!!
    3)创建管道:pipe(rgfd):rgfd是2个文件描述符组成的数组,rgfd[0]是读文件描述符,rgfd[1]是写文件描述符,继承父进程的通信描述符,一头读一头写就实现两者的通信了!!!bravo!!!

消息队列:由操作系统维护的以字节序列为基本单位的间接通信机制

(间接通信机制必然是由os维护的,所以标题重点就是:消息队列通信以字节序列为基本单位)
图片不想搞了,方便理解记忆消息队列就是进程们通过消息队列来进行通信,发送方将消息发到消息队列中,而接收方通过消息队列接收消息,其中相同标识的消息组成 按先进先出的顺序组成一个消息队列

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统8-死锁和进程通信----(库函数scanf和printf是基于管道读写实现的! 的相关文章

  • Java课程设计之学习成绩管理系统

    package System import java awt import java awt event import java io import javax swing import javax swing table Abstract
  • plsql更改用户登录密码

    ORACLE数据库系统是美国ORACLE公司 甲骨文 提供的以分布式数据库为核心的一组软件产品 是目前最流行的客户 服务器 CLIENT SERVER 或B S体系结构的数据库之一 比如SilverStream就是基于数据库的一种中间件 O
  • linux 如何创建卷组

    1 创建一个物理卷 Pvcreate dev sd1 dev sd2 dev sd3 dev sd4 2 用刚才创建的物理卷创建一个卷组 Vgcreate 卷组名 dev sd1 dev sd2 dev sd3 dev sd4 3 创建逻辑
  • CentOS 7 关闭网络限制

    1 安装CentOS 7 3操作系统mini版本即可 2 设置关闭Selinux 编辑 etc selinux config vi etc selinux config SELINUX disabled 重启机器 查看selinux状态 s
  • mapengpeng1999@163.com 操作系统4~处理机调度

    处理机调度 1 三级调度体系 1 处理机调度主要是对处理机运行时间进行分配 即 按照一定算法或策略 将处理机运行时间分配给各个并发进程 同时尽量提高处理机的使用效率 2 现代操作系统中 按调度所实现的功能分3种类型 高级调度 中级调度和低级
  • 操作系统学习(九)进程通信

    一 知识总览 二 定义 进程通信是指进程之间的信息交换 每个进程都拥有自己的内存空间 是相互独立的 这样在每个进程执行时 才不会被其他进程所干扰 三 进程通信的方式 1 共享存储 1 两个进程对共享区的访问必须是互斥的 即在同一时间内 只允
  • pycharm内存不足时如何修改设置?

    Help gt Find Action gt type VM Options gt Click Edit Custom VM Options Pycharm 2016 2 will open the appropriate vmoption
  • Client-Server问题

    1 实验内容与要求 需要创建客户Client和服务器Server两个进程 它们通过管道进行通信 Client进程派生3个生产者线程 一个管道线程 共享一个20个slots的缓冲区 每个生产者线程随机产生一个数据 打印出来自己的id 进程 线
  • Ubuntu 10.10下安装TFTP的步骤 tftp-hpa版本

    背景 由于想要在tq2440板子上用tftp下载kernel 所以要在自己的PC机的Ubuntu 10 10上安装tftp服务 所以就去网上找了些教程 但是很悲剧 按照那些教程去操作 结果还都是无法正常运行tftp服务 最后还是从一个外国人
  • 设备管理过程

    复杂度2 5 机密度2 5 最后更新2021 04 19 AIX中对设备会有如下五个操作 define aix下能看到设备的定义 但驱动程序并没有加载或初始化 该设备不可用 lsdev看到设备时defined 很多逻辑设备 vg lv等 只
  • 虚拟机管理程序、虚拟化和云: 深入剖析 PowerVM 虚拟机管理程序

    预备知识 Power 是没有限制的虚拟化 一些企业打算依靠 PowerVM 虚拟化将多个工作负载整合到较少系统上 从而提高服务器利用率 降低成本 Power VM 为基于 Power Systems 平台的高级 RAS 功能和领先性能为 A
  • CF、SF、OF、ZF标志位

    没学汇编 这种题我真是做一道错一道 OF overflow flag 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出 对于无符号整数运算 OF没有意义 对于有符号数的溢出判断方式有 1 采用一位符号位 思想为 或 则为溢
  • Linux系统编程:多线程交替打印ABC

    引言 分享关于线程的一道测试题 因为网上基本都是Java的解决方法 决定自己写一篇来记录一下线程的学习 问题描述 编写一个至少具有三个线程的程序 称之为线程 A B 和 C 其中线程 A 输出字符 A 线程 B 输出字符 B 线程 C 输出
  • Linux,Network manager 导致节点异常重启

    推断是Network manager 导致的 原因待查今天在VmWare的虚拟机上装了个测试RAC 又遇到了一个摸不到头绪的问题CRS装好后 一旦登陆图形界面 节点就重启 事情就有这么巧不登陆图形界面 观察了1个小时没问题 一旦登陆后 立刻
  • Linux系统如何看目录属于哪个磁盘分区

    Linux是先有目录 再有磁盘分区 df h 目录 例如 没有挂载磁盘的目录 显示在系统盘 root iZ2ze57v3n0zma46zqiq8nZ sh 1 5 5 df h alidata Filesystem Size Used Av
  • Elasticsearch 日志

    下载并安装 Filebeat 首次使用 Filebeat 请参阅入门指南 复制代码片段 curl L O https artifacts elastic co downloads beats filebeat filebeat 7 2 0
  • Windows驱动开发(一)第一个驱动程序

    首先我们需要了解 在操作系统中 是分两种权限的 一种是内核态 我们也称为0环 一种是用户态 称之为3环 而在我们的电脑中 驱动程序是运行在内核态的 这意味着和操作系统内核是在同一权限的 而普通的应用程序的权限是最低的 高权限谁不想拥有呢 因
  • OS——文件管理系统磁盘的结构之搞清盘面和柱面

    如上图 每个柱面有三个盘面 即就是3个磁道 柱面可以抽象的理解成是一个套一个的立体的同心圆柱体 例 2019年408真题 磁盘有300个柱面 每个柱面有10个磁道 每个磁道有200个扇区 扇区大小为512B 则磁盘容量 分析 每个柱面有10
  • 《OSPF和IS-IS详解》一1.7 独立且平等

    本节书摘来自异步社区 OSPF和IS IS详解 一书中的第1章 第1 7节 作者 美 Jeff Doyle 更多章节内容可以访问云栖社区 异步社区 公众号查看 1 7 独立且平等 OSPF和IS IS详解与TCP IP相比 OSI协议对各国
  • I/O设备模型

    I O设备模型 绝大部分的嵌入式系统都包括一些I O Input Outut 输入 输出 设备 例如仪器上的数据显示屏 工业设备上的串口通信 数据采集设备上用于保存数据的Flash或SD卡 以及网络设备的以太网接口等 I O设备模型框架 R

随机推荐

  • Linux基础命令---显示进程树pstree

    pstree pstree显示正在运行的进程的树形结构 树以PID为根 如果省略了pid则以init为根 如果指定了用户名 则显示根植于该用户拥有的进程的所有进程树 如果pstree被调用为pstree x11 那么它将提示行尾的用户按RE
  • 区块链技术通俗讲解_要了解区块链一定要清楚区块链技术的几点技术原理

    关注 区链数科 让你从入门到精通区块链 其实 区块链并不是一个新型的技术 更多的应该是传统技术上的一个融合 再通过一定的规则和机制去实现了区块链独特性质 我们前面主要普及一些关于区块链的基本概念以及市场概况 今天来讲讲区块链的技术原理 希望
  • 使用pandas groupby的一个案例

    mongodb中有下面一组数据 业务场景就不介绍了 看数据应该很好理解 id 606fdd0805f5710008a82223 brand id 1 brand name APPLE series id 11 series name iPh
  • jdbc连接Microsoft SQL Server 2014

    前言 多年不用Microsoft SQL Server 简单回顾一下并记录一下在java中连接SQL Server的过程和注意事项 首先 从下载Driver开始 Microsoft JDBC Drivers 官方的下载地址为 适用于 SQL
  • 一些方便记忆的小例子

    epoll和select的小例子 先看一下epoll和select的区别 对于select来说 所有文件描述符都是在用户态被加入其文件描述符集合的 每次调用都需要将整个集合拷贝到内核态 epoll则将整个文件描述符集合维护在内核态 每次添加
  • Zookeeper缩容5缩3操作记录(二)

    测试目标 测试5台缩3台zk 先shutdown 一台5 再将1 2 3配置修改为1 2 3 逐一重启 是否会发生脑裂 测试过程 准备1 2 3 4 5 五台 3为leader 将5 shutdown 1 将1配置修改为1 2 3 重启 结
  • R语言之 删除重复数据

    这篇主要介绍如何在R中识别和删除重复数据 主要用的到R base和dplyr函数 duplicated 用于识别重复的元素和 unique 用于提取唯一元素 distinct dplyr package 删除数据框中的重复行 x lt c
  • Java:Immutable Patterns

    版权所有 2022 涂聚文有限公司 许可信息查看 描述 不变模式 Immutable Patterns 历史版本 JDK 14 02 2022 09 12 创建者 geovindu 2022 09 12 添加 Lambda 2022 09
  • 四旋翼无人机Matlab建模

    本文主要分享一下四旋翼无人机的建模过程 然后在Matlab的simulink模块搭建起四旋翼无人机的模型 本篇文章主要参考了康日晖的 四旋翼无人机建模 与南京邮电大学周帆同学的硕士毕业论文 最后我会给出参考文章网址 有兴趣的同学可以看看 一
  • 8、2D建筑与3D模型的遮挡问题 URP Shader

    在我们的实际项目中根据实际情况 我们的建筑采用了2D面片的方式 但因为我们的英雄是3D模型 同时策划有需求 英雄可以在主城里面走动 这个时候就给我们提出了一个比较麻烦的问题 我们知道正常情况下渲染是谁的渲染队列高谁渲染在上面 我们这里英雄的
  • WPF 控件库Live Charts 动态折线图

    Live Charts库安装通过 1 PM gt Install Package LiveCharts Wpf 2 通过Nuget搜索添加LiveCharts Wpf安装 WPF页面xaml
  • oracle 去除oracle字段值得tab格

    大家都知道oracle中去掉左右空格用trim 函数 单独去左空格用ltrim 去右空格用rtrim 偶尔大家从excel中复制粘贴到数据空中的数据有可能左右会存在空格或者tab 此时可以用以下语句对所有存有字段的tab进行更新update
  • linux 下 systemd-udevd 服务解析

    最近在看linux下重定向的时候看到 的这个系统的服务 所以记下来备忘 描述 systemd udevd是监听内核发出的设备事件 并根据udev规则处理每个事件 选项 daemon 脱离控制台 并作为后台守程运行 debug 在标准错误上打
  • linux shell $0怎么输出,linux shell中$0,$?,$!等的特殊用法

    一 Shell脚本中 0 等的意义说明 1 Shell本身的PID ProcessID 即脚本运行的当前进程ID号 2 Shell最后运行的后台Process的PID 后台运行的最后一个进程的 进程ID号 3 最后运行的命令的结束代码 返回
  • 【IT项目管理】第八章课后作业

    1 制定的聘用的质量标准清单如下 标准编号 标准名称 标准内容 1 年龄 30岁以上 2 学历 博士学位 3 研究成果 至少在省级以上刊物发表文章 4 工作经验 具有2年以上教师从业经验 5 项目经历 至少主持或参与省级基金项目 2 制作E
  • 【网络原理篇2】TCP报头详解

    在这一篇文章当中 了解到TCP是属于传输层的协议 当数据从应用层向传输层发送的时候 如果使用的是TCP协议 那么就需要把应用层的数据加上TCP报头 初识网络 IP 端口 网络协议 TCP IP五层模型 革凡成圣211的博客 CSDN博客TC
  • Python 调用海康机器人工业相机

    一 前期准备 1 python环境搭建 2 安装MVS软件 3 网上博客参考 1 RTSP Runtime Stream Protocol 协议方向 很遗憾 此路不通 因为我们用的 海康机器人工业相机 MV CU060 10GM 这款相机
  • builtin descriptor types

    inspect getattr static obj attr default None Retrieve attributes without triggering dynamic lookup via the descriptor pr
  • 基于深度学习的微表情识别系统(Python代码+PyqtUI界面,可以实现图像识别和视频识别,有详细中文注释)

    1 效果视频 基于深度学习的微表情识别系统 Python代码 PyqtUI界面 可以实现图像识别和视频识别 有详细中文注释 哔哩哔哩 bilibili 2 数据集介绍 包括7种类别微表情 anger文件夹 3995张 disgust文件夹
  • 操作系统8-死锁和进程通信----(库函数scanf和printf是基于管道读写实现的!

    大纲 死锁概念及死锁处理方法 银行家算法 死锁检测 进程通信方法 信号 管道 消息队列 共享内存 一 死锁 背景 可重用资源 资源不能被删除且任何时刻只能有一个进程使用 进程释放资源后其他进程可重用 可能出现死锁 消耗资源 资源创建和销毁