进程互斥的实现方法

news2024/12/21 6:29:30

文章目录

  • 进程互斥的软件实现方法
      • 单标志法
      • 双标志先检查法
      • 双标志后检查法
      • Peterson算法
        • img
  • 硬件实现进程互斥
      • 中断屏蔽方法
      • TestAndSet指令
      • Swap指令

进程互斥的软件实现方法

  • 软件实现方法的思想:在进入区设置并检查一些标志 来标明是否有进程在临界区中,若已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。

单标志法

在这里插入图片描述

  • 思想就是两个进程再访问临界区后会把使用临界区的权限转交给另一个进程 用turn来记录当前能进入临界区的进程号
  • 缺点
    • 在这里插入图片描述
      • 因为一个进程进入临界区的权限是由其他进程给予的,所以肯定会按照顺序区访问临界区,这种轮流访问访问带来的问题违背的就是空闲让进的原则

双标志先检查法

在这里插入图片描述

  • 思想:设置一个布尔型型数组flag,数组中的各个元素用来标记个进程想进入临界区的意愿,默认值都是false,如果一个进程想进入临界区,就先查看当前是否有别的进程想进入临界区 通过轮询实现
  • 但是因为进入区的检查和上锁不是原子操作,所以发生切换问题,会导致两个进程可能同时访问临界区,违法了忙则等待

双标志后检查法

img

  • 因为先检查,后上锁因为原子性问题会导致违法忙则等待,所以双标志后检查法将上锁放到前面,先上锁后检查
  • 但是可能会导致空闲让进和有限等待的问题 因为原子性,可能把把两个进程的标志都变成上锁状态

Peterson算法

img

  • 这个算法就是采用一种孔融让梨的思想,当我们一个进程想进入临界区的时候,先将自己的标志为改为true,然后将turn改为对方的进程号(表示如果两个进程都在争资源,就先让对方进入) 进入区的职能就是 1主动争取 2主动谦让 3检查对方是否想用和最后一次是否是自己主动谦让
  • 缺点:没有满足让权等待

硬件实现进程互斥

中断屏蔽方法

在这里插入图片描述

  • 中断屏蔽方法利用开/关中断指令实现(与原语实现思想相同),也就是某进程开始访问临界区到访问结束都不允许被中断,也就不能进行进程切换,因此也就不能发生同时访问临界区的情况
  • 缺点:
    • 这种方式是不适用于多处理机的操作系统,因为如果多个CPU同时访问一个临界资源,会导致破坏忙则等待的问题
    • 而且开/关中断这种操作是特权指令,只适用于操作系统内核进程,不适合用于用户进程

TestAndSet指令

在这里插入图片描述

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

  • 需要一个共享变量 lock,用来表示临界区是否被占有,true表示已加锁,false表示未加锁

  • TSL的内部逻辑是 每次进入 不管有没有加锁,都直接加锁,然后返回old值(原本lock的值)

    • 执行TSL指令时,它的内部运转逻辑:
    • 假设lock现在为false,代表临界资源A空闲,那么我就可以访问这个资源,同时将lock=true,提醒别的进程,这个临界资源A我正在使用,让他们等等
    • 假设lock为true,代表临界资源正在有人使用,所以我必须等待,并且将lock=true,并不影响什么,所以没关系,只是为了让lock为false时可以上锁,将上锁与检查在一个TSL指令完成。
  • TSL指令想上锁和检查的变成一气呵成的原子操作

  • 还是不满足让权等待的原则,因为暂时无法进入临界区的进程会占用CPU并循环执行TSL指令,而导致忙等

Swap指令

在这里插入图片描述

  • old是每个进程都要进行的一步,都必须将old=true
  • 分析一下这样做的原因:
  • 因为lock是某一特定临界资源的共享变量,当每一个进程准备访问这个特定的临界资源时,初始化old=true,然后进入while循环进行交换,如果当前lock是false,则交换后old=false,则当前进程可以跳出循环进入临界区代码段,同时因为交换,lock=old=true上锁,不让别的进程来打扰,别的进程会因为lock变为true,一直在while循环等待,当我使用完临界资源,则将lock=false,此时别的进程再交换old和lock就能判断old=false,可以跳出循环,使用临界资源。

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

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

相关文章

MyBatis

最近新开了个项目&#xff0c;记录第一次新开项目做得一些步骤&#xff0c;整合mybatis就是重要的一步&#xff0c;这里我演示了依赖的添加&#xff0c;逆向文件的生成。 1.整合mybatis 1.1基础配置 先添加依赖&#xff0c;再增加配置文件 dependencies <!--Spring Boot …

Java 开发工具 Eclipse

目录 一、Eclipse 概述 二、Eclipse 安装与汉化 三、创建 Java 项目 四、创建 Java 类 五、运行 Java 程序 六、Eclipse 调试程序 &#xff08;方法一&#xff09; 七、Eclipse 调试程序 &#xff08;方法二&#xff09; 工欲善其事&#xff0c;必先利…

Linux文件查找find

目录 前言 查找命令 命令演示 1.which&#xff1a;命令查找 2.locate命令 3.find命令&#xff08;主要使用这个命令进行查找文件&#xff09; 1&#xff09;语法 2&#xff09;find的用法介绍 按文件名查找 手动写入指定大小数据到文件内&#xff0c;介绍一下dd命令。…

【兄弟反目成仇系列】:我只是写了一个爆炸信息窗口脚本,好兄弟追了我几条街~

文章目录✨ 真的来咯~&#x1f4a5;爆炸信息窗口&#x1f4a1;设计思路&#x1f511;模块准备⚠️删除好友警告⚠️源代码❓这时你可能会问&#x1f440; 批量获取表情包&#x1f6c0;结束语专栏Python零基础入门篇&#x1f525;Python网络蜘蛛&#x1f525;Python数据分析Djan…

高德地图 API,点击地图标记获取自定义标记 (Marker) 中的信息

高德地图 API&#xff0c;点击地图标记获取自定义标记 (Marker) 中的信息 通过 高德地图 JS Web 添加自定义图标&#xff0c;自定义窗口标记 已经能在地图中正常添加自定义标记了 这篇文章讲讲点击标记时&#xff0c;如何从自定义标记中获取你需要的信息&#xff0c;如何预置一…

计算机网络【IP协议与以太网】

计算机网络【IP协议与核心协议】&#x1f34e;一.IP协议&#x1f352;1.1IPv4协议格式&#x1f352;1.2 IP协议地址&#x1f352;1.3IPv4协议的解决方案&#x1f352;1.4路由选择(了解)&#x1f34e;二.以太网协议&#x1f352;2.1以太网协议格式&#x1f352;2.2认识MTU(了解)…

聊一聊JAVA中的缓存规范 —— 虽迟但到的JCache API与天生不俗的Spring Cache

为何需要规范 上一章中构建的最简化版本的缓存框架&#xff0c;虽然可以使用&#xff0c;但是也存在一个问题&#xff0c;就是它对外提供的实现接口都是框架根据自己的需要而自定义的。这样一来&#xff0c;项目集成了此缓存框架&#xff0c;后续如果想要更换缓存框架的时候&a…

哈希的应用

文章目录前言一、位图1.1位图概念1.2位图的实现1.3 位图的应用二、 布隆过滤器2.1 布隆过滤器提出2.2 布隆过滤器概念2.3 布隆过滤器的插入2.4 布隆过滤器的哈希函数2.5 布隆过滤器的查找2.6 布隆过滤器删除2.7 布隆过滤器的优点2.8 布隆过滤器的缺陷2.9 布隆过滤器的应用场景前…

散射辐射变送器的优势体现在哪些方面?

散射辐射是经过大气分子、水蒸气、灰尘等质点的散射&#xff0c;改变了方向的太阳辐射&#xff0c;也称天空散射辐射。太阳散射辐射强弱程度与太阳辐射的入射角、大气条件&#xff08;云量、水汽、砂粒、烟尘等粒子的多少&#xff09;和地面反射率有关。当天空的浑浊程度加大&a…

链路状态路由协议 OSPF (三)

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.OSPF领接关系的建立 1.OSPF领接关系的建立概述 &#xff0…

彻底理解Java并发:乐观锁与CAS

本篇内容包括&#xff1a;悲观锁与乐观锁的概述、CAS&#xff08;Compare And Swap&#xff09;比较并交换的介绍、非阻塞算法与ABA问题&#xff0c;以及对 Java 中 CAS 的实现解读&#xff08;AtomicInteger 对 CAS 的实现&#xff0c;Unsafe 类简介&#xff09;。 一、悲观锁…

【树莓派不吃灰】Raspberry Pi上搭建NodeJS运行环境

目录1. 前言2. 安装NodeJS环境2.1 安装npm2.2 安装nodejs2.3 配置NPM国内镜像源3. 总结❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2022-10-28 ❤️❤️ 本篇更新记录 2022-10-28 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞…

嵌入式C语言编程中经验教训总结(八)变量、指针和指针数组的内存管理

目录嵌入式C语言编程中经验教训总结&#xff08;八&#xff09;变量、指针和指针数组的内存管理变量、指针和指针数组的内存占用指针、指针数组的空间验证指针数组的元素数据访问方法嵌入式C语言编程中经验教训总结&#xff08;八&#xff09;变量、指针和指针数组的内存管理 …

【趣学算法】第一章读书笔记

14天阅读挑战赛 *努力是为了不平庸~ 算法学习有些时候是枯燥的&#xff0c;这一次&#xff0c;让我们先人一步&#xff0c;趣学算法&#xff01; 文章目录1.1打开算法之门1.2 妙不可言——算法复杂性算法的特性好算法的标准时间复杂度和空间复杂度时间复杂度空间复杂度宕机1.4算…

62. 如何通过增强(Enhancement) 的方式给 SAP ABAP 标准程序增添新功能

文章目录 如何找到可以创建增强实现的增强点位置如何创建增强实现如何在 SE80 里找到增强实现本身如何调试 ABAP 增强实现总结ABAP 系统有比较完善的修改控制权限管控,比如笔者试图修改一个 SAP ABAP 系统里标准的函数,就会遇到如下的警告消息,然后修改的尝试会被阻止: You…

Winform和ASP.NET、Web API详解

Winform和ASP.NET、Web API 一、winform基础 1.1 基础学习 1、 winform应用程序是一种智能客户端技术&#xff0c;我们可以使用winform应用程序帮助我们获得信息或者传输信息等。 2、属性 Name:在后台要获得前台的控件对象&#xff0c;需要使用Name属性。 visible:指示一…

认识运营商机房

文章目录走线设备机房走线数据机房走线传输机房列头柜【供电】网络架构ONU设备OLT设备汇聚层交换机BARS设备核心路由器运营商网络架构【必看】铁塔基站核心机房ODF&#xff1a;光纤配线架MME光纤SGWPGWHSS交换机拓扑核心机房拓扑接入层基站&#xff08;BaseStation&#xff09;…

山西大同大学技术会,大同大学的家!

大家好&#xff0c;我是康来个程&#xff0c;山西大同大学技术会的创建者。 低谷时代 近几年校内的竞赛氛围越来越浓厚&#xff0c;随着自身参与并了解的赛事越来越多&#xff0c;随之而来的也是发现了我们学校竞赛方面的问题。疫情原因&#xff0c;我们的比赛取消的取消&…

Gitee在大数据中心的使用

在本地主机或者可以VSCode直接连接可视化的服务器上 1. 首先在gitee新建一个带有develop分支的仓库 2. 在自己的主机&#xff08;e.g., server 1~3&#xff09;上git clone下来&#xff0c;例如 git clone gitgitee.com:PeterBishop0/TransT-based.git 3. 切换成develop分支&…

深度学习入门(十) 模型选择、过拟合和欠拟合

深度学习入门&#xff08;十&#xff09; 模型选择、过拟合和欠拟合前言模型选择例子&#xff1a;预测谁会偿还贷款&#xff1f;训练误差和泛化误差验证数据集和测试数据集K-则交叉验证总结过拟合和欠拟合模型容量模型容量的影响估计模型容量VC维线性分类器的VC维VC维的用处数据…