主要内容:死锁和进程通信

死锁问题

一组阻塞的进程持有一种资源等待获取另一个进程所占有的一个资源

系统模型

通常使用资源分配图表示

死锁特征

死锁的必要非充分条件

  • 互斥: 在一个时间只能有一个进程使用资源
  • 持有并等待: 进程保持至少一个资源正在等待获取其他进程持有的额外资源
  • 无抢占: 一个资源只能被进程资源释放,进程已经完成了它的任务之后
  • 循环等待: 存在等待进程集合{P0,P1,…,Pn},P0正在等待P1所占用的资源,P1正在等待P2占用的资源…Pn-1在等待Pn的资源,Pn正在等待P0所占用的资源

死锁处理方法

常见方法

  • 确保系统永远不会进入死锁状态
  • 运行系统进入死锁状态,然后恢复.
  • 忽略这个问题,假装系统中从来没有发生死锁,用于大多数操作系统,包括UNIX

死锁预防

打破死锁的必要条件

  • 互斥 - 共享资源不是必须的,必须占用非共享资源
  • 占用并等待 - 必须保证当一个进程请求的资源,它不持有任何其他资源
    • 需要进程请求并分配其所有资源,它开始执行之前或允许进程请求资源仅当进程没有资源
    • 资源利用率低,可能发生饥饿
  • 无抢占
    • 如果进程占有某些资源,并请求其他不能被立即分配的资源,则释放当前正占有的资源
    • 被抢占资源添加到资源列表中
    • 只有当它能够获得旧的资源以及它请求新的资源,进程可以得到执行
  • 循环等待 - 对所有资源类型进行排序,并要求每个进程按照资源的顺序进行申请

死锁避免

预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得 较满意的系统性能。由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法

死锁检测

周期性检查系统中是否存在死锁,与死锁恢复配合使用,当系统中存在死锁,则进行死锁恢复

死锁恢复

当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:

剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;

撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。

IPC(进程间通信)

直接通信

进程必须正确的命名对方:

  • send(P, message) - 发送消息到进程P
  • receive(Q, message) - 从进程Q接收信息

通信链路的属性

  • 自动建立链路
  • 一条链路恰好对应一对通信进程
  • 每对进程之间只有一个链路存在
  • 链路可以是单向的,但通常是双向的

间接通信

定向从消息队列接收消息

  • 每个消息对垒都有一个唯一的ID
  • 只有它们共享了一个消息队列,进程才能够通信

通信链路的属性

  • 只有进程共享一个共同的消息队列,才建立链路
  • 链接可以与许多进程相关联
  • 每对进程可以共享多个通信链路
  • 链接可以是单向或者双向

操作

  • 创建一个新的消息队列
  • 通过消息队列发送和接收消息
  • 销毁消息队列

原语的定义如下:

  • send(A, message)

  • receive(A, message)

  • 通信链路缓冲

    通信链路缓存大小:

    1. 0容量 - 0 message : 发送方必须等待接收方
    2. 有限容量 - n messages的有限长度 : 发送方必须等待,如果队列满
    3. 无限容量 - 无限长度 : 发送方不需要等待

信号

信号Signal

  • 软件中断通知事件处理
  • Examples: SIGFPE, SIGKILL, SIGUSRI, SIGSTOP, SIGCONT

接收到信号时会发生什么?

  • catch: 指定信号处理函数被调用
  • ignore: 依靠操作系统的默认操作(abort, memory dump, suspend or resume process)
  • mask: 闭塞信号因此不会传送(可能是暂时的,当处理同样类型的信号)

不足:

  • 不能传输要交换的任何数

管道

数据交换

子进程从父进程继承文件描述符(0 stdin, 1 stdout, 2 stderr)

进程不知道(或不关心)从键盘,文件,程序读取或写入到终端,文件,程序.

例如: $ ls | more (两个进程, 管道是缓存,对于ls来说是stdout,对于more来说是stdin)

消息队列

消息队列按FIFO来管理消息

  • message: 作为一个字节序列存储
  • message queues: 消息数组
  • FIFO & FILO configuration

共享内存

进程

  • 每个进程都有私有地址空间
  • 在每个地址空间内,明确地设置了共享内存段

优点

  • 快速,方便地共享数据
  • 最快的方法
  • 一个进程写另一个进程立即可见
  • 没有系统调用干预
  • 没有数据复制

不足

  • 必须同步数据访问

套接字通信

操作系统笔记(十一)相关推荐

  1. Apache Nutch 1.3 学习笔记十一(页面评分机制 OPIC)

    1. Nutch 1.3 的页面评分机制 Nutch1.3目前默认还是使用OPIC作为其网页分数算法,但其之后,已经引入了PageRank-like算法,以弥补OPIC算法的不足,目前OPIC算法还是 ...

  2. 操作系统存储器管理实验报告_献上膝盖!华为工程师抛出一份堪称“举世无双”操作系统笔记...

    写在前面 操作系统在计算机行业中是一门最基础的技术,无论是在开发项目还是在算法岗,我们都是基于计算机上进行的,我们对操作系统的了解体现我们从事计算机相关岗位的资深素质,因此,接下来,这篇文章给大家介绍 ...

  3. 吴恩达《机器学习》学习笔记十一——应用机器学习的建议

    吴恩达<机器学习>学习笔记十一--应用机器学习的建议 一.训练完模型后下一步要做什么 二.评估算法与模型选择 1.训练集与测试集 2.训练/测试步骤 3.模型选择 4.数据集新的划分--验 ...

  4. 吴恩达《机器学习》学习笔记十一——神经网络代码

    吴恩达<机器学习>学习笔记十一--神经网络代码 数据准备 神经网络结构与代价函数· 初始化设置 反向传播算法 训练网络与验证 课程链接:https://www.bilibili.com/v ...

  5. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

  6. 《C++游戏开发》笔记十一 平滑动画:不再颤抖的小雪花

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9430645 作者:七十一雾央 新浪微博:http:// ...

  7. Apache Nutch 1.3 学习笔记十一(页面评分机制 LinkRank 介绍)

    下面是Google翻译的http://wiki.apache.org/nutch/NewScoring内容,是关于Nutch 新的链接分数算法的说明,有点类似于Google的PageRank,这里有其 ...

  8. 操作系统笔记整理12——磁盘存储器的管理

    点此链接可跳转到:操作系统笔记整理--目录索引页 参考书籍:<计算机操作系统>第四版 汤小丹等编著 文章目录 点此链接可跳转到:操作系统笔记整理--目录索引页 外存的组织方式 连续组织方式 ...

  9. 【王道考研】操作系统 笔记 第一章

    特此鸣谢王道考研 本文参考王道考研的相关课程 若有侵权请联系,立删 其余笔记链接: [王道考研]操作系统笔记 第一章_才疏学浅743的博客-CSDN博客 [王道考研]操作系统 笔记 第二章上 进程调度 ...

  10. 操作系统笔记 第二章

    操作系统笔记 第二章 1.有两个程序:A程序按顺序使用CPU10秒.设备甲5秒.CPU5秒.设备乙10秒.CPU10秒:B程序按顺序使用设备甲10秒.CPU 10秒.CPU5秒.设备乙5秒.CPU 5 ...

最新文章

  1. 探秘新一代音视频技术融合通信平台全接触
  2. python通过tkinter界面库实现三角形成立的测试
  3. arm linux 开机电路_【技术角度看问题之一】ARM到底是个啥?
  4. IIS 启动不了(服务没有及时响应启动或控制请求)解决
  5. 记录——《C Primer Plus (第五版)》第九章编程练习第九题
  6. 建议0 不要让main函数返回void
  7. Hugging Face Course-Diving in 抱抱脸 Tokenizers library (WordPiece tokenization Unigram tokenization)
  8. mse 反编译_专业Delphi反编译工具(DeDeDark)
  9. 数学建模方法 — 【01】模糊数学
  10. UE4 使用蓝图进行编辑器扩展
  11. 【项目管理工具】SVN 项目版本管理工具
  12. 【随笔】Linux drop_caches
  13. HDU 3533 简单bfs 主要是MLE问题
  14. Multimodal Fusion(多模态融合)
  15. E3000Y影像二维扫描枪(配YoKo引擎开发板)的串口调试
  16. 安装pyinstaller报错----Fatal error in launcher:
  17. 【已解决】将CentOS7系统安装至U盘(一):系统安装与使用
  18. 用ArcMap打开MXD文件报One or more layers failed to draw错误!
  19. C++ bind2nd用法
  20. 春节祝福短信怎么发?付详细文案

热门文章

  1. 电子协会 C语言 1级 35 、银行利息
  2. framework是什么东西?
  3. springboot笔记08——整合swagger2
  4. 四级单词打卡------第一天(2021/1/22)
  5. java 文本框只读_[Java教程]javascript脚本设置输入框只读的问题
  6. box-shadow实现四周阴影
  7. 【C#】【报错解决】分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。...
  8. 追剪西门子Smart200 追剪程序送对应维纶屏监控程序 这算法是无级调速
  9. 2020linux运维工程师前景,为什么学Linux发展前景好?linux运维工程师
  10. java基础巩固-宇宙第一AiYWM:为了维持生计,做项目经验之~【多用户关注共同的参数的统计功能】开发总结、再来个独立访客(Unique Visitor,简称UV)统计番外篇~整起