【王道考研 操作系统】【第二章】进程同步、进程互斥的实现方法 软件&硬件 优点&缺点 信号量机制

2023-10-27

第一章【王道考研 操作系统】【第一章】操作系统的概述、特征、发展、体系结构 中断与系统调用

第二章 1~5【王道考研 操作系统】【第二章】进程概念 进程控制 进程通信 线程概念和多线程模型

第二章 6~8【王道考研 操作系统】【第二章】处理机调度 进程调度算法

第二章

9. 进程同步、进程互斥

 进程具有 异步性 的特征,异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。

9.1 进程同步

 进程具有 异步性 的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进,因此并发操作的 先后顺序 是不确定的。

进程同步 即解决异步中进程先后顺序不确定的问题,让并发的进程按要求 有序地推进

image-20220302160743212

9.2 进程互斥

 进程的并发需要 共享 的支持。各个并发执行的进程不可避免的需要共享一些系统资源。

临界资源 指一个时间段内只允许一个进程使用的资源。对临界资源的访问,必须 互斥 地进行。
进程互斥 指当一个进程访问某临界资源时,另一个想要去访问该临界资源的进程必须等待;当前访问临界资源的进程访问结束、释放资源之后,另一个进程才能去访问。

9.2.1 实现过程

临界区 是进程中访问临界资源的代码段;进入区退出区 是负责实现互斥的代码段。

image-20220302161234210

9.2.2 实现互斥须遵循的 原则

  1. 空闲让进:临界区空闲时,允许一个请求进入临界区的进程立即进入临界区;
  2. 忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待;
  3. 有限等待:对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿);
  4. 让权等待:当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

9.2.3 软件实现方法

  • 单标志法

    两个进程再访问完临界区后会把使用临界区的权限转交给另一个进程,即 每个进程进入临界区的权限只能被另一个进程赋予。(设置 当前允许进入临界区的进程号
    image-20220302162336077

  • 双标志先检查

    设置一个布尔型数组 flag[],数组中各个元素用来 标记各个进程想进入临界区的意愿

    进程在进入临界区之前先检查当前有没有别的进程想进入临界区,若没有,则把flag[i]设为true,之后开始访问临界区。(先检查 后上锁
    image-20220302163133917

  • 双标志后检查

    先上锁 后检查
    image-20220302163417046

  • Peterson 算法

    如果双方都争着想进入临界区,可以让进程 主动让对方先使用临界区。谁进入临界区取决于谁 最后谦让临界区的使用权。

  • 总结
    image-20220302164529779

9.2.4 硬件实现方法

  • 中断屏蔽方法

    利用 开/关中断 指令 实现。与原语的实现思想相同,即在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换。
    image-20220302195341146

  • TestAndSet(TS指令 )TestAndSetLock指令( TSL指令)

    TSL指令 是用硬件实现的,执行的过程不允许被中断,只能一气呵成。

    以下用C语言描述 TSL的逻辑:
    image-20220302195724788

  • Swap指令(也叫 Exchange指令 / XCHG指令)

    Swap指令 是用硬件实现的,执行的过程不允许被中断,只能一气呵成。

    以下用C语言描述 TSL的逻辑:
    image-20220302200234951

  • 总结
    image-20220302200352189

10. 信号量机制

信息量 就是一个变量 (可以是一个整数,也可以是更复杂的记录型变量),可以用来表示 系统中某种资源的数量

用户进程可以通过使用操作系统提供的 一对原语 来对 信号量 进行操作,从而实现进程互斥、同步。原语 是一种特殊的程序段,其执行只能一气呵成,不可被中断,由 关中断/开中断指令 实现。

一对原语wait(S) 原语 和 signal(S) 原语,常简称为 P、V 操作,S为信号量。这对原语可用于实现系统资源的 申请释放

10.1 整型信号量

 用一个 整数型变量 做为信号量,用来表示某种资源的数量。

 对信号量的操作有 初始化、P操作、V操作。wait 和先检查后上锁逻辑相同,但由于原语不会被中断。
  image-20220302201818357

10.2 记录型信号量

 整型信号量的缺陷是存在 “忙等” 问题,因此提出了 “记录型信号量”——用记录型数据结构表示。
  image-20220302202417048

 当一次P(S)操作后,S.value<0表示该类资源已分配完毕,进程调用 block原语 进行自我阻塞,主动放弃处理机,并插入等待队列S.L中。该机制遵循了 让权等待 原则,不会出现 “忙等” 现象。

 当一次V(S)操作后,S.value<=0表示依然有进程在等待该类资源,进程调用 wakeup原语 唤醒等待队列中的第一个进程。

  • 总结
    image-20220302203409692

10.3 用信号量机制实现进程互斥

image-20220302203918110

10.4 用信号量机制实现进程同步

10.5 用信号量机制实现前驱关系

image-20220302204950126

  • 总结

    image-20220302205135146

11. 经典进程互斥同步问题

  image-20220302225755602
 PV操作 题目分析步骤:
  image-20220302225907368
 两个进程同时写入缓冲区,有可能导致 数据覆盖 的问题。因此无论缓冲区大小,任何时刻应该只有一个进程访问缓冲区!

11.1 生产者-消费者问题

  • 问题描述

     系统中有一组生产者进程和一组消费者进程。生产者进程 每次生产一个产品放入缓冲区,消费者进程 每次从缓冲区中取出一个产品并使用。

     生产者、消费者共享一个初始为空、大小为n的 缓冲区,缓冲区是 临界资源,各进程必须 互斥 地访问。

     只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待;只有缓冲区不空时,消费者才能从中取出产品,否则必须等待。(同步,产品数量~空闲缓冲区的数量)

  • 实现
    image-20220302230244872
    实现互斥的P操作一定要在实现同步的P操作之后!否则,可能会发生 死锁

    V操作不会导致进程阻塞,因此两个V操作顺序可以交换。

11.2 多生产者-多消费者

  • 问题描述
    image-20220302231000792

  • 分析过程
    image-20220302231110386

  • 实现
    image-20220302231241153
    可以省去mutex互斥量,也不会出现多个进程同时访问盘子的情况。(除非盘子容量大于1)

11.3 读者-写者问题

  • 问题描述
    image-20220302232054896

  • 分析过程

     核心思想在于设置了一个 计数器count 用来记录当前正在访问共享文件的读进程数,根据count的值来判断当前进入的进程是否是第一个/最后一个读进程,从而做出不同的处理。

     另外,对count变量的检查和赋值不能一气呵成导致了一些错误,因此需要用互斥信号量来保证其不被中断。
    image-20220302232450825

  • 实现
    image-20220302233105502
    解决 “写进程饥饿” 问题。
    image-20220302233519704

11.4 哲学家问题

  • 问题描述
    image-20220302233944966

  • 分析过程
    image-20220302234125948
    image-20220302234552598

    ③ 仅当一个哲学家左右两只筷子可用时才允许他抓起筷子。

  • 实现
    image-20220302235302558

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

【王道考研 操作系统】【第二章】进程同步、进程互斥的实现方法 软件&硬件 优点&缺点 信号量机制 的相关文章

  • 文件管理系统(操作系统)——9张思维导图

    文件管理系统 1 文件管理 1 1 一个文件的逻辑结构 比如一个文本txt文件 又或者Excel文件 在我们用户看来 它是长什么样的 这个就是逻辑结构 几个概念 逻辑结构 就是指在用户看来 单个文件内部的数据应该是如何组织起来的 物理结构
  • 小白学协程笔记2-c语言实现协程-2021-2-10

    文章目录 前言 一 c语言中协程切换方式 二 使用setjmp 和 longjmp实现协程切换 1 setjmp和longjmp函数简介 2 协程实现 三 使用switch case实现协程切换 1 switch case小技巧 2 协程实
  • 虚拟内存的最大容量与实际容量区别

    虚拟内存的最大容量与实际容量区别 1 概念介绍 虚拟内存的最大容量是计算机的地址结构 CPU寻址范围决定的 虚拟内存的实际容量是内存与外存之和 CPU寻址范围 两者的最小值 2 例题介绍 某计算机的地址结构是64位 按字节编址 内存大小51
  • [转载]搜索引擎技术介绍

    转载声明 http backend blog 163 com blog static 202294126201252872124208 引言 早些时候分享过一份关于搜索引擎技术的PPT 这篇文章基本上是基于原来框架 在内容上做了一些改进和扩
  • 设备管理过程

    复杂度2 5 机密度2 5 最后更新2021 04 19 AIX中对设备会有如下五个操作 define aix下能看到设备的定义 但驱动程序并没有加载或初始化 该设备不可用 lsdev看到设备时defined 很多逻辑设备 vg lv等 只
  • gpuz怎么看显存颗粒

    gpuz可以帮助一些用户查看电脑的一切显卡参数 对于想要了解显卡的网友来说使用起来是非常方便的 不过有些网友是刚开始使用 还不知道gpuz怎么看显存颗粒 下面小编就教下大家gpuz查看显存颗粒的方法 首先 显存颗粒是显存的物理存储组成单元
  • 虚拟机管理程序、虚拟化和云: 深入剖析 PowerVM 虚拟机管理程序

    预备知识 Power 是没有限制的虚拟化 一些企业打算依靠 PowerVM 虚拟化将多个工作负载整合到较少系统上 从而提高服务器利用率 降低成本 Power VM 为基于 Power Systems 平台的高级 RAS 功能和领先性能为 A
  • Linux使用nvida-smi查看GPU类型

    nvida smi提供一个查看GPU信息的方法 然而这种方式不能查看GPU型号 型号被省略成了GeForce RTX 208 如果我们需要查看GPU的型号 只需要运行nvidia smi L即可 mrfive ubuntu nvidia s
  • CF、SF、OF、ZF标志位

    没学汇编 这种题我真是做一道错一道 OF overflow flag 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出 对于无符号整数运算 OF没有意义 对于有符号数的溢出判断方式有 1 采用一位符号位 思想为 或 则为溢
  • LWIP在STM32上的移植

    本文做记录摘抄 加上自己的体会 文章标题 STM32使用LWIP实现DHCP客户端 http www cnblogs com dengxiaojun p 4379545 html 该文章介绍了几点 LWIP源码的内容 关键点 1 inclu
  • 《一个操作系统的实现》读书笔记-- 第一章--最小的“操作系统”

    一 最简单的 操作系统 最最简单的 操作系统 就是一个最最简单的引导扇区 Boot Sector 虽然它不具有任何功能 但是它却能够直接在裸机上运行 不依赖其他软件 一个引导扇区是512个字节 并且以0xAA55为结束标识的扇区 下面就是那
  • Elasticsearch 日志

    下载并安装 Filebeat 首次使用 Filebeat 请参阅入门指南 复制代码片段 curl L O https artifacts elastic co downloads beats filebeat filebeat 7 2 0
  • [架构之路-185]-《软考-系统分析师》-3-操作系统基本原理 - 文件索引表

    目录 一 文件的索引块 二 索引分配表 三 索引表的链接方案 四 多层索引 五 混合索引分配 一 文件的索引块 存放在目录中的文件 并非是文件的真实内容 目录中记录了文件的索引块是几号磁盘块 文件对应的索引表是存放在指定的磁盘块中的 二 索
  • 系统架构设计师-计算机网络

    目录 一 计算机网络技术概述 1 网络概述 2 网络有关指标 3 网络分类 4 5G技术 二 组网技术 1 交换技术 2 基本交换原理 三 TCP IP协议簇 1 DHCP 2 DNS 四 网络规划与设计 一 计算机网络技术概述 1 网络概
  • 由于回车符引起的shell错误

    今天弟弟写shell时出现一个错误 源代码如下 zip r 1 2 执行时出现错误 我也写了相同的语句 发现是可以执行的 把两个文件对比一看 差别在于 出错shell 正确shell 在linux下的回车是 n 在win下面的回车是 r n
  • 操作系统常见面试题

    1 什么是进程 Process 和线程 Thread 有何区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 进程是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能
  • 地址映射与共享

    跟踪地址映射过程 1 通过命令 dbg asm启动调试器 在linux 0 11运行test c文件 使其进入死循环 我们的任务就是找到i的地址并将其修改为0使test c程序退出循环 2 在命令行输入crit c使Boch暂停 一般会显示
  • Java架构师系统架构高可用维度分析

    目录 1 导语 2 可用性介绍 3 本地高可用 集群 分布式 4 本地高可用 数据逻辑保护 5 异地容灾 双活 两地三中心 6 异地容灾 DRP规划 BCP业务连续性 7 多活和妥协方案 8 高可用流程 9 总结 想学习架构师构建流程
  • 八股文打卡day20——操作系统(3)

    面试题 线程同步的方式有哪些 我的回答 多线程同时访问和修改某个数据的话 会造成数据的不一致和冲突问题 所以就需要线程同步 线程同步的方式有 1 互斥锁 互斥锁就是 当一个资源被访问和操作时 会对这个资源加锁 把这个资源锁定 其他线程不能对
  • 如何设计一个高并发系统?

    所谓高并发系统 是指能同时处理大量并发请求 并及时响应 从而保证系统的高性能和高可用 那么我们在设计一个高并发系统时 应该考虑哪些方面呢 1 搭建集群 如果你只部署一个应用 只部署一台服务器 那抗住的流量请求是非常有限的 并且 单体的应用

随机推荐

  • Keil N01:的软件逻辑分析仪( logic analyzer)使用

    在keil MDK中软件逻辑分析仪很强的功能 可以分析数字信号 模拟化的信号 CPU的总线 UART IIC等一切有输出的管脚 提供调试函数机制 用于产生自定义的信号 如Sin 三角波 澡声信号等 这些都可以定义 以keil里自带的stm3
  • 3.网络爬虫——Requests模块get请求与实战

    Requests模块get请求与实战 requests简介 检查数据 请求数据 保存数据 前言 前两章我们介绍了爬虫和HTML的组成 方便我们后续爬虫学习 今天就教大家怎么去爬取一个网站的源代码 后面学习中就能从源码中找到我们想要的数据 此
  • 中级软件设计师考试(软考中级)考试简介与考试内容分布

    原文链接 中级软件设计师考试 软考中级 考试简介与考试内容分布 文章目录 一 考试简介 1 1 软件设计师考试是什么 1 2 通过软件设计师考试应该具备的技术能力 1 3 软件设计师 中级 资格简介 1 4 什么是评什么是聘 1 5 什么是
  • java 栈----java.util.Stack

    Stack类简介 Stack 类表示后进先出 LIFO 的对象堆栈 它通过五个操作对类 Vector 进行了扩展 Stack类继承自Vector类 允许将向量视为堆栈 它提供了通常的 push 和 pop 操作 以及取堆栈顶点的 peek
  • 软件测试-外国语言和易用性测试

    1 外国语言测试 1 1 使用文字图片有意义 开发软件时 考虑用户的国家和地理位置 使软件适应特定地域特征 照顾到语言 方言 地区习俗和文化的过程称为本地化 测试此类软件称为本地化测试 1 2 翻译问题 文本扩展 将英语翻译成其他语言时 通
  • spring框架整合shiro

    shiro框架 定义 Shiro是apache旗下一个开源框架 它将实现用户身份认证 权限授权 加密 会话管理等功能 组成了一个通用的安全认证框架 既然shiro将安全认证相关的功能抽取出来组成一个框架 使用shiro就可以非常快速的完成认
  • 使用frp工具实现内网穿透以及配置多个ssh和web服务

    frp简介 FRP 项目地址 https github com fatedier frp blob master README zh md frp 是一个可用于内网穿透的高性能的反向代理应用 支持 tcp udp 协议 为 http 和 h
  • qt中的toUtf8, toLatin1, Local8bit, toUcs4

    1 首先说下字符集 gb18030字符集兼容了gbk字符集 以两个字节表示一个文字 windows系统可能使用的就是这两种的一种 unicode字符集以2个或以上的字节表示一个汉字 通用字符集 Universal Character Set
  • Windows操作系统安全加固基线检测脚本

    一 背景信息 在我们的安全运维工作中经常需要进行安全基线配置和检查 所谓的安全基线配置就是系统的最基础的安全配置 安全基线检查涉及操作系统 中间件 数据库 甚至是交换机等网络基础设备的检查 面对如此繁多的检查项 自动化的脚本可以帮助我们快速
  • 树的遍历(bfs+递归)

    题目描述 一个二叉树 树中每个节点的权值互不相同 现在给出它的后序遍历和中序遍历 请你输出它的层序遍历 输入描述 第一行包含整数 N 表示二叉树的节点数 第二行包含 N 个整数 表示二叉树的后序遍历 第三行包含 N个整数 表示二叉树的中序遍
  • Docker容器占用过多C盘空间问题解决方案

    Docker容器占用过多C盘空间问题解决方案 简介 Docker 是一个开源的容器化平台 它能够将应用程序及其依赖项打包成一个独立的 可移植的容器 然而 在使用 Docker 过程中 有时会遇到C盘空间不足的问题 这是因为默认情况下 Doc
  • cpu cache一致性和内存屏障机制

    1 cache 局部性原理 引入 Cache 的理论基础是程序局部性原理 包括时间局部性和空间局部性 即最近被CPU访问的数据 短期内CPU 还要访问 时间 被 CPU 访问的数据附近的数据 CPU 短期内还要访问 空间 因此如果将刚刚访问
  • Spring采用properties配置多个数据库

    在一个项目中有这样的需求 上海和武汉采用不同的系统 每个系统都有自己的数据库 但是在上海的系统需要访问武汉的数据库 这就要在项目中配置两个数据源 下面是我给的SSH采用properties配置数据源的方法 1 要有两个properties文
  • Faster R-CNN网络架构详解和TensorFlow Hub实现(附源码)

    文章目录 一 RPN网络 1 RPN网络简介 2 backbone网络简介 二 Faster R CNN网络架构 1 Faster R CNN网络简介 2 基于TensorFlow Hub实现Faster R CNN 前言 Faster R
  • 1089 狼人杀-简单版 (20 分)

    题目 题目链接 题解 思维 首先我们要明确这类问题不用计算机 我们会怎么去做 显然是推矛盾吧 就是假设哪些是狼人 哪些说了假话等等 根据每个人说的话推出矛盾就说明假设不合理 反之正确 既然要推出矛盾就需要找到一些条件 如果推的过程中发现与条
  • 使用UncaughtExceptionHandler捕获运行时异常

    前面我们知道Exceptions分为可检查异常 checked exceptions 和运行时异常 runtime exception 具体参照文章Java异常处理手册和最佳实践 对于可检查异常 我们必须对它进行处理 要么捕获要么在方法上使
  • 【Grub & Grub2】万能优盘启动盘 (WinPE、LinuxPE)-- 方法1 U盘三分区法(不推荐,供参考)

    由于工作需要 经常使用Windows和Linux双系统 系统使用过程中 个人涉及到的开发软件过多 光基于Eclipse的IDE就有好几个 经常过度安装软件 有时会越来越庞大 越来越不稳定 定期要重新安装配置 但是又不想重头安装 基本软件最好
  • Redis基础

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud SpringCloudAlibaba 黑马旅游 谷粒商城 目录 1 简介 1 1 环境准备 1 1 1 Redi
  • 使用nssm工具将ES、Kibana、Logstash或者其他.bat文件部署为Windows后台服务的方法

    使用NSSM工具安装bat文件为Windows服务 nssm是一个可以把bat批处理文件部署为Windows服务的小工具 例如很多 net项目可能还是在Windows服务器上面跑的 但是很多组件只提供了 bat文件 例如elk三件套 或者后
  • 【王道考研 操作系统】【第二章】进程同步、进程互斥的实现方法 软件&硬件 优点&缺点 信号量机制

    目录 第二章 9 进程同步 进程互斥 9 1 进程同步 9 2 进程互斥 9 2 1 实现过程 9 2 2 实现互斥须遵循的 原则 9 2 3 软件实现方法 9 2 4 硬件实现方法 10 信号量机制 10 1 整型信号量 10 2 记录型