OS_同步与互斥

2024-07-04:操作系统同步与互斥学习笔记

第9节 同步与互斥

  • 9.1 同步互斥的基本概念
    • 9.1.1 同步关系
    • 9.1.2 互斥关系
    • 9.1.3 临界资源
    • 9.1.4 临界区
    • 9.1.5 同步机制应遵循规则
  • 9.2 软件同步机制
    • 9.2.1 单标志法
    • 9.2.2 双标志先检查法
    • 9.2.3 双标志后检查法
    • 9.2.4 peterson算法
  • 9.3 硬件同步机制
    • 9.3.1 关中断
      • (1) 关中断的定义
      • (2) 关中断的缺点
    • 9.3.2 Test-and-Set 指令(TS指令)
    • 9.3.3 Swap指令
  • 9.4 信号量机制
    • 9.4.1 整型信号量
    • 9.4.2 记录型信号量
      • (1) 利用信号量实现进程互斥
      • (2) 利用信号量实现进程同步


并发的进程或者程序在执行的时候会失去封闭性,也就是说如果有两个程序分别地区使用一个共享的资源,可能会导致每一次运行的结果都不一样
在这里插入图片描述
原因就是我们没有保护程序a和程序b都要去访问的这个共享资源x


9.1 同步互斥的基本概念

9.1.1 同步关系

相互制约的关系就是同步,同步通俗一点理解就是它们进程之间执行的时候要有一个次序
在这里插入图片描述


9.1.2 互斥关系

间接相互制约的关系就称为互斥关系,eg.打印机
在这里插入图片描述


9.1.3 临界资源

  • 在一段时间内只允许一个进程访问的资源,称为临界资源(或独占资源)
  • 对于临界资源的共享,各进程之间应该采用互斥方式

“生产者和消费者模型”
在这里插入图片描述counter+ +

首先把变量放到寄存器里面
register1 = counter;
接下来对寄存器进行一个自增
register1 = register1 + 1;
再把结果返回到counter里
counter = register1;

counter- -

首先把变量放到寄存器里面
register2 = counter;
接下来对寄存器进行一个自减
register2 = register2 - 1;
再把结果返回到counter里
counter = register2;

在这里插入图片描述

解决办法:把counter当做临界资源处理,令进程互斥地访问变量counter(后面会学到同步机制)


9.1.4 临界区

不管是硬件临界资源还是软件的临界资源,多个进程必须互斥地访问
在这里插入图片描述
这些区本质都是代码

  • 进入区
  • 临界区
  • 退出区
  • 剩余区

9.1.5 同步机制应遵循规则

  • 空闲让进

无进程处于临界区时,表明临界区资源空闲,应允许一个请求进入临界区的进程立即进入自己的临界区,有效利用资源。

  • 忙则等待

已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问

  • 有限等待

对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,避免陷入”等死“状态

  • 让权等待

进程不能进入自己的临界区时,应立即释放处理机(CPU),以免进程陷入”忙等“状态


9.2 软件同步机制

9.2.1 单标志法

  • 设置一公用整型变量来标明是否有进程在临界中,如果已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志
  • 单标志法设置一个公用整型变量turn,指示允许进入临界区的进程编号,turn=0时允许进程P0进入临界区
  • turn=1时允许进程P1进入临界区,退出临界区将临界区使用权赋予另一个进程(Pi推出临界区时,令turn=j)

在这里插入图片描述
在这里插入图片描述
两个进程必须交替进入临界区,若一个进程不再进入临界区,则另一个进程也无法进入临界区,违背了“空闲让进”准则


9.2.2 双标志先检查法

双标志先检查法设置一个布尔型数组flag[2],用来标记各个进程想进入临界区的意愿,flag[i]=true,表示Pi想进入临界区。

  • Pi进入临界区前,先检查对方是否进入临界区,若想,则等待
  • 否则,将flag[i]设置为true后,再进入临界区
  • 当Pi退出临界区时,将flag[i]设置为false

在这里插入图片描述

在这里插入图片描述

  • while循环相当于红绿灯机制
  • 设置对方的flag相当于改对方的红绿灯
  • 但由于两个进程都是先检查flag[先看红绿灯],初始时均为false[均为绿灯],所以可能两个进程同时通过红绿灯,一起进入临界区

9.2.3 双标志后检查法

双标志后检查法会检查对方的标志再设置自己的,这俩操作无法一气呵成,于是两个进程可能同时进入临界区;所以想出了后检查法,先设置自己的标志,再检查对方的标志,若对方标志位true则等待;否则进入临界区

在这里插入图片描述
在这里插入图片描述


9.2.4 peterson算法

peterson算法结合了单标志法双标志后检查法的思想,利用flag[]解决互斥访问问题,在利用turn解决饥饿问题。

若双方都争着进入临界区,则可让进程将进入临界区的机会让给对方。
每个进程进入临界区之前,设置自己的flag标志,在设置允许进入turn标志,之后,再同时检测对方的flag和turn,以保证双方同时要求进⼊临界区时,只允许⼀个进程进入
在这里插入图片描述
没有做到让权等待
在这里插入图片描述


9.3 硬件同步机制

软件解决各个进程互斥进入临界区的问题有难度,而且有很大的局限性,所以计算机提供一些特殊的硬件指令来解决问题

9.3.1 关中断

(1) 关中断的定义

  • 关中断在计算机组成原理里面接触过,它指的是去修改CPU中PSW这个寄存器里面的一位,这一位会去控制现在CPU会不会去相应中断,这个中断只能挡住可屏蔽中断,不可屏蔽中断挡不住
  • 操作系统里面进程的调度都是依赖中断去实现的,比如时钟中断
  • 有进程再临界区执行期间,计算机系统关中断,从而不会引发调度,也就不会有进程或线程切换

(2) 关中断的缺点

  • 滥用终端会导致严重后果
  • 关中断时间过长,会影响系统效率
  • 关中断方法不适用于多CPU系统,在一个处理器上关中断不能防止进程在其他处理器上执行相同临界代码

9.3.2 Test-and-Set 指令(TS指令)

在这里插入图片描述

TS指令可以看作一个执行过程不可分割的函数过程(原语)

  • lock有两种状态:
    • *lock=FALSE表示资源空闲
    • *lock=TRUE表示资源正被使用

使用TS管理临界区,要为每个临界资源设置一个lock

  • 初值为FALSE,表示临界资源空闲
  • 进程进入临界区之前,先用TS测试lock,如果是FALSE,则可以进入,并将TRUE值赋给lock,关闭了临界资源

9.3.3 Swap指令

在这里插入图片描述
称为对换指令,用于交换两个字的内容

  • 为每个临界资源设置一个全局布尔变量lock,初值FALSE
  • 利用上面的硬件指令完成进程互斥
  • 但是这种方法也会造成访问进程不断进行测试,处于“忙等”状态,不符合“让权等待”原则

9.4 信号量机制

9.4.1 整型信号量

被定义为一个用于表示资源数目的整型量S,对于这个整型信号量的操作只有三种:初始化(赋初值)、wait(自减)、signal(自增)
在这里插入图片描述

  • wait和signal均为原子操作,执行时不可中断
  • 当一个进程在修改某信号量时,没有其他进程可以同时对该信号量进行修改

9.4.2 记录型信号量

不存在“忙等”现象的进程同步机制

  • 除了一个用于代表资源数目的整型变量value外
  • 还需要增加一个进程链表L,用于链接所有等待该资源的进程

在这里插入图片描述

  • wait操作等价于P操作
  • signal操作等价于V操作
  • 只是两种不同的称呼,功能完全一致
  • wait(A) = P(A)
  • signal(B) = V(A)

(1) 利用信号量实现进程互斥

设置一个互斥信号量mutex=1,然后把各进程访问临界资源的临界区放在wait(mutex)和signal(mutex)之间
在这里插入图片描述


(2) 利用信号量实现进程同步

设置一个同步信号量S=0,让需要先执行的语句signal(S),后执行的wait(S)
在这里插入图片描述

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

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

相关文章

jstat命令介绍

jstat:查看JVM统计信息 一 基本情况二 基本语法2.1 option参数1. 类装载相关的:2. 垃圾回收相关的-gc:显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。-gccapacity:显示…

【C++】C++-机房收费管理系统(源码+注释)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

LeetCode之最长回文子串

1.题目链接 5. 最长回文子串 - 力扣(LeetCode)https://leetcode.cn/problems/longest-palindromic-substring/description/ 2.题目解析 对于这道题目我们可以使用动态规划的思路来求解,具体思路是,对于一个长度大于2的子串&…

生成式信息检索(问答系统与信息检索的进步)

文章目录 什么是问答系统(Question Answering Systems)检索系统的演变经典检索系统“Term” 文档搜素的最小单位倒排索引词嵌入的出现预训练语言模型 用于问答的语言模型设计方案选择:封闭式与开放式问答系统对比方案A:封闭式生成…

【干货】一文带你看懂什么是渠道分销?如何管理渠道分销

在当今竞争激烈的市场环境中,企业想要扩大市场份额、提高产品或服务的可见度,有效的渠道分销策略是关键。 什么是渠道分销? 渠道分销,简而言之,是指企业利用中间商(如经销商、代理商、零售商等&#xff0…

springboot解压文件流zip压缩包

springboot解压文件流zip压缩包 原始文件存储的地方&#xff1a; 需要在当前目录下解压该文件&#xff0c;如下图&#xff1a; 代码示例&#xff1a; private Result<String> getLocationGuideLayerName(YbYstbtqTaskResolveParam params, String fishnetLayerName)…

华为od100问持续分享-1

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

入门PHP就来我这(高级)24 ~ Session判断用户登录

有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 上一篇我们介绍了Session管理部分的概念&#xff0c;本文通过session来改写一些用户登录&…

一致性Hash问题及解决方案

Hash算法的应用场景 请求的负载均衡 Nginx的ip_hash策略可以在客户端ip不发生变化的情况下&#xff0c;将其发出的请求始终路由到同一个目标服务器上&#xff0c;实现会话粘滞&#xff0c;避免处理session共享问题。 如果没有ip_hash策略&#xff0c;可以通过维护一张映射表的…

ts实现将相同类型的数据通过排序放在一起

看下效果&#xff0c;可以将相同表名称的字段放在一起 排序适用于中英文、数字 // 排序 function sortByType(items: any) {// 先按照类型进行排序items.sort((a: any, b: any) > {if (a.label < b.label) return -1;if (a.label > b.label) return 1;return 0;});r…

鸿蒙语言基础类库:【@ohos.application.testRunner (TestRunner)】 测试

TestRunner TestRunner模块提供了框架测试的能力。包括准备单元测试环境、运行测试用例。 如果您想实现自己的单元测试框架&#xff0c;您必须继承这个类并覆盖它的所有方法。 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-…

[氮化镓]Kevin J. Chen组新作—肖特基p-GaN HEMTs正栅ESD机理研究

这篇文章是发表在《IEEE Electron Device Letters》上的一篇关于Schottky型p-GaN栅极高电子迁移率晶体管&#xff08;HEMTs&#xff09;的正向栅极静电放电&#xff08;ESD&#xff09;机理研究的论文。文章由Jiahui Sun等人撰写&#xff0c;使用了基于碳化硅&#xff08;SiC&a…

8626 原子量计数

分析&#xff1a; 1. **读取输入**&#xff1a;首先&#xff0c;我们需要读取输入中的第一行&#xff0c;了解有多少个化学式需要处理。之后&#xff0c;对于每个化学式&#xff0c;我们逐行读取并进行处理。 2. **解析化学式**&#xff1a;对于每个化学式&#xff0c;我们需要…

8627 数独

为了判断数独解是否合法&#xff0c;我们需要遵循以下步骤&#xff1a; 1. **检查每一行**&#xff1a;确保1到9每个数字在每一行中只出现一次。 2. **检查每一列**&#xff1a;确保1到9每个数字在每一列中只出现一次。 3. **检查每个3x3的宫**&#xff1a;确保1到9每个数字在…

【视频】R语言广义加性模型GAMs非线性效应、比较分析草种耐寒性实验数据可视化

全文链接&#xff1a;https://tecdat.cn/?p36979 原文出处&#xff1a;拓端数据部落公众号 广义加法模型&#xff08;Generalized Additive Models, GAMs&#xff09;作为一种高度灵活的统计工具&#xff0c;显著扩展了广义线性模型&#xff08;Generalized Linear Models, …

数字信号处理及MATLAB仿真(4)——量化的其他概念

上回书说到AD转换的两个步骤——量化与采样两个步骤。现在更加深入的去了解以下对应的概念。学无止境&#xff0c;要不断地努力才有好的收获。万丈高楼平地起&#xff0c;唯有打好基础&#xff0c;才能踏实前行。 不说了&#xff0c;今天咱们继续说说这两个步骤&#xff0c;首先…

每日刷题(二分图,二分查找,dfs搜索)

目录 1.P3853 [TJOI2007] 路标设置 2.P1129 [ZJOI2007] 矩阵游戏 3.P1330 封锁阳光大学 4.Trees 5.P1141 01迷宫 1.P3853 [TJOI2007] 路标设置 P3853 [TJOI2007] 路标设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先求出每个路标之间的距离&#xff0c;再二分查找每…

数据库系统原理练习 | 作业2-第2章关系数据库(附答案)

整理自博主本科《数据库系统原理》专业课完成的课后作业&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 *文中若存在书写不合理的地方&#xff0c;欢迎各位斧正。 专业课本&#xff1a; 目录 一、选择题 二、填空题 三、简答题 四、关系代数 1.课本p70页&…

虚拟机安装Linux CENTOS 07 部署NET8 踩坑大全

首先下载centos07镜像&#xff0c;建议使用阿里云推荐的地址&#xff1a; https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.59b5f5ad5Nfr0X 其实这里就已经出现第一个坑了 centos 07 /usr/lib64/ 的 libstdc.so只支持到19&#xff1b; GLI…

数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)

当前&#xff0c;业界流行的集中数据湖表格式 Hudi/Iceberg/DeltaLake&#xff0c;和最近出现并且在国内比较火的 Paimon。我们现在看到的很多是针对流处理场景的读写性能测试&#xff0c;那么本篇文章我们将回归到大数据最基础的场景&#xff0c;对海量数据的批处理查询。本文…