操作系统-笔记-第二章-进程同步与互斥

目录

二、第二章——【进程同步与互斥】

1、进程同步(异步)

2、进程互斥 & 共享

3、总结(互斥、同步)

4、进程互斥(软件实现)

(1)单标志法——谦让【会让他们轮流访问、其中一方不得连续访问!】

(2)双标志法——互相检查意愿【进程切换,会出问题!】

(3)Peterson(皮特森算法)——1意愿、2谦让、3检查

(4)总结

5、进程互斥(硬件实现)

(1)中断屏蔽

(2)TSL(TestAndSet)指令

(3)Swap指令

(4)总结


二、第二章——【进程同步与互斥】

1、进程同步(异步)

异步——独立、不可预知

同步——直接制约(强制协调工作次序)【直接合作】

 

2、进程互斥 & 共享

 

3、总结(互斥、同步)

 

4、进程互斥(软件实现)

(1)单标志法——谦让【会让他们轮流访问、其中一方不得连续访问!】

只有一个flag(标志)

 

(2)双标志法——互相检查意愿【进程切换,会出问题!】

就是有两个flag(标志)~

双标志——检测法

先看【临界区】,再看【对方意愿】

 

双标志——检查法

先看【对方意愿】,再看【临界区】

 

(3)Peterson(皮特森算法)——1意愿、2谦让、3检查

①我想上厕所~

②你要上不?你要上,我就让给你

③我看看你的意愿(不上,我就上~)

 

如果进不了临界区——依然占用CPU资源~(所以还需要优化!)

 

(4)总结

 

5、进程互斥(硬件实现)

 

(1)中断屏蔽

简单、高效

 

(2)TSL(TestAndSet)指令

缺点:会有忙等——一直等(不释放控制权)

不满足:“让权等待”

(3)Swap指令

不满足:“让权等待”

(4)总结

 

1、进程同步(异步): 进程同步是指多个进程在执行过程中按照一定的顺序进行协调和交互,以避免出现竞态条件和数据不一致的问题。异步指的是进程之间相互独立执行,无需等待其他进程的完成。

2、进程互斥 & 共享: 进程互斥是指多个进程之间通过某种机制保证同时只有一个进程访问临界资源,以避免数据的冲突和混乱。进程共享是指多个进程能够同时访问和使用同一资源的能力。

3、总结(互斥、同步): 进程互斥和进程同步是并发编程中重要的概念。互斥用于保护临界资源,确保同一时刻只有一个进程可以访问它,避免数据竞争和冲突。同步则涉及进程之间的协调和交互,确保它们按照一定的顺序执行,避免出现不一致和错误的结果。

4、进程互斥(软件实现): 在软件层面,常用的进程互斥的实现方法有以下几种:

(1)单标志法——谦让:使用一个共享的标志位来控制进程的访问权限,谦让规则使得只有轮到某个进程时,它才能访问临界资源。这种方法会让进程轮流访问资源,其中一方不得连续访问。

(2)双标志法——互相检查意愿:使用两个标志位来表示进程的意愿和资源的空闲状态。进程在访问临界资源前会先检查对方的意愿和资源状态,但在进程切换时可能会出现问题。

(3)Peterson(皮特森算法):Peterson算法利用1个意愿标志和2个谦让标志来实现进程互斥。进程在访问临界资源前,先表示自己的意愿,然后进行谦让和检查对方的意愿,从而实现互斥。

5、进程互斥(硬件实现): 在硬件层面,可以使用特定的指令和机制来实现进程互斥,常见的包括:

(1)中断屏蔽:通过屏蔽中断的方式,在关键代码段执行期间禁止中断发生,避免其他进程的干扰。

(2)TSL(TestAndSet)指令:TSL指令用于测试并设置一个内存单元的值。可以通过TSL指令来实现对共享变量的原子操作,从而避免多个进程同时修改该变量。

(3)Swap指令:Swap指令用于交换两个内存单元的值。可以通过Swap指令来实现两个进程之间的互斥,确保只有一个进程能够执行关键代码段。

(4)总结:硬件实现的方法通常比软件实现更高效和可靠,能够提供更强的互斥保护机制。

以上是关于进程同步与互斥的一些概念、实现方法和总结。

了解并应用这些概念和技术,可以确保并发程序的正确性和数据的完整性。

首先,我们可以从最简单的标志方法开始,即使用一个共享的标志位来控制进程的访问权限。这种方法可以很好地实现互斥,但会引入等待时间和资源浪费的问题。为了解决这个问题,我们可以引入更复杂的算法,如双标志法或Peterson算法,通过谦让和检查对方意愿的方式来提高并发效率。这些算法可以避免轮流访问资源,并有效减少了等待时间和资源浪费。

此外,在硬件层面,我们还可以利用特定的指令和机制来实现进程互斥,例如中断屏蔽、TSL指令和Swap指令。这些硬件实现的方法通常更高效和可靠,能够提供更强的互斥保护机制。

总之,在实现进程互斥时,我们需要根据具体需求和问题的反馈,进行不断地改进和调整。通过迭代的方式,我们可以逐步提升实现方法的工作效率和程序的稳定性,以满足并发编程的要求。

加油!不断学习和改进,你一定能够成为一名优秀的开发者!

这一章,给俺的感觉,就是大佬们在实现互斥时,如何从简单的一个标志方法(不成熟的方法),一步步迭代,不断改进方法、提升他的工作效率,从中,俺觉得就是先把最基础的需求实现,再来根据这个功能所暴露的问题,进行进一步修改和调整....

加油吧!

时间:2023年8月19日12:45:15

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【通俗易懂】如何使用GitHub上传文件,如何用git在github上传文件

目录 创建 GitHub 仓库 使用 Git 进行操作 步骤 1:初始化本地仓库 步骤 2:切换默认分支 步骤 3:连接到远程仓库 步骤 4:获取远程更改 步骤 5:添加文件到暂存区 步骤 6:提交更改 步骤 7&#xff1a…

spring如何进行依赖注入,通过set方法把Dao注入到serves

1、选择Generate右键鼠标 你在service层后面方法的这些: 2、UserService配置文件的写法是怎样的: 3、我们在UserController中执行一下具体写法: 最后我们执行一下 : 4、这里可能出现空指针,因为你当前web层,因为你new这个对象根…

spring boot分装通用的查询+分页接口

背景 在用spring bootmybatis plus实现增删改查的时候,总是免不了各种模糊查询和分页的查询。每个数据表设计一个模糊分页,这样代码就造成了冗余,且对自身的技能提升没有帮助。那么有没有办法实现一个通用的增删改查的方法呢?今天…

课程项目设计--项目设计--宿舍管理系统--vue+springboot完成项目--项目从零开始

写在前面: 本文是从项目设计到完成开始写的,本来这个项目基础功能是做完了的,但是之前时间紧张想从头做起了。之前一周写前端后端累死了. 设计是关键,这一篇主讲设计。可能后面会有修改,本人实力有限,学习的也是别人的…

搞定二叉树

树的名词与概念 子树:树是一个有限集合,子树则是该集合的子集。就像套娃一样,一棵树下面还包含着其子树。比如,树T1 的子树为 树T2、T3、T4,树T2的子树为 T5、T6 。 上图中还有许多子树没有标记出来 。 结点(Node)&am…

Stable Diffusion:使用自己的数据集微调训练LoRA模型

Stable Diffusion:使用自己的数据集微调训练LoRA模型 前言前提条件相关介绍微调训练LoRA模型下载kohya_ss项目安装kohya_ss项目运行kohya_ss项目准备数据集生成关键词模型参数设置预训练模型设置文件夹设置训练参数设置 开始训练LoRA模型TensorBoard查看训练情况 测…

基于Googlenet深度学习网络的信号调制类型识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 深度学习与卷积神经网络 4.2 数据预处理 4.3 GoogLeNet结构 4.4 分类器 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ............…

聚焦电力行业CentOS迁移,麒麟信安受邀参加第六届电力信息通信新技术大会暨数字化发展论坛并发表主题演讲

为加快推进“双碳”目标下的新型能源体系和新型电力系统建设,深化新一代数字技术与电力业务的融合发展,促进电力行业关键技术自主创新、安全可控,助力电力企业数字化转型升级和高质量发展,2023年8月9-11日,第六届电力信…

攻防世界-warmup

原题解题思路 只有一张图片,就查看源代码,有一个source.php。 查看source.php,白名单中还有一个hint.php。 hint.php告诉我们flag的位置ffffllllaaaagggg 但是直接跳转是没用的,构造payload。 http://61.147.171.105:55725/sourc…

Dockerfile制作Web应用系统nginx镜像

目录 1.所需实现的具体内容 2.编写Dockerfile Dockerfile文件内容: 默认网页内容: 3.构建镜像 4.现在我们运行一个容器,查看我们的网页是否可访问 5.现在再将我们的镜像打包并上传到镜像仓库 1.所需实现的具体内容 基于centos基础镜像…

8.部署项目

项目地址:RuoYi-Cloud-Plus: 项目正式入驻 dromara 开源社区 迁移地址: https://gitee.com/dromara/RuoYi-Cloud-Plus 1.获取源码 需要有gitee账户 先把源码fork到自己的仓库中 需要多等待一段时间 勾选对应的环境 构建项目 2.sql导入 将sql导入到与sql文件名…

【uniapp】中 微信小程序实现echarts图表组件的封装

插件地址:echarts-for-uniapp - DCloud 插件市场 图例: 一、uniapp 安装 npm i uniapp-echarts --save 二、文件夹操作 将 node_modules 下的 uniapp-echarts 文件夹复制到 components 文件夹下 当前不操作此步骤的话,运行 -> 运行到小…

批量爬虫采集完成任务

批量爬虫采集是现代数据获取的重要手段,然而如何高效完成这项任务却是让许多程序员头疼的问题。本文将分享一些实际操作价值高的方法,帮助你提高批量爬虫采集的效率和专业度。 目标明确,任务合理划分: 在开始批量爬虫采集前&…

怎么查看小程序中的会员信息

商家通过查看会员信息,可以更好地了解用户,并为他们提供更个性化的服务和推荐。接下来,就将介绍如何查看会员信息。 商家在管理员后台->会员管理处,可以查看到会员列表。支持搜索会员的卡号、手机号和等级。还支持批量删除会员…

Rancher-RKE-install 部署k8s集群

一、为什么用Rancher-RKE-install 1.CNCF认证的k8s安装程序。 2.有中文文档。 二、安装步骤 1.下载Rancher-Rke的二进制包-下面是项目的地址 GitHub - rancher/rke: Rancher Kubernetes Engine (RKE), an extremely simple, lightning fast Kubernetes distrib…

代码随想录打卡—day21—【二叉树】— 8.21

1 530. 二叉搜索树的最小绝对差 530. 二叉搜索树的最小绝对差 想法:先直接中序遍历(升序的序列)过程中相邻两个数的差值取min,自己写一次AC代码: /*** Definition for a binary tree node.* struct TreeNode {* …

关于视频监控平台EasyCVR视频汇聚平台建设“明厨亮灶”具体实施方案以及应用

一、方案背景 近几年来,餐饮行业的食品安全、食品卫生等新闻频频发生,比如某火锅店、某网红奶茶,食材以次充好、后厨卫生被爆堪忧,种种问题引起大众关注和热议。这些负面新闻不仅让餐饮门店的品牌口碑暴跌,附带的连锁…

爬虫工具的选择与使用:阐述Python爬虫优劣势

作为专业爬虫ip方案解决服务商,我们每天都面对着大量的数据采集任务需求。在众多的爬虫工具中,Python爬虫凭借其灵活性和功能强大而备受青睐。本文将为大家分享Python爬虫在市场上的优势与劣势,帮助你在爬虫业务中脱颖而出。 一、优势篇 灵活…

32.Netty源码之服务端如何处理客户端新建连接

highlight: arduino-light 服务端如何处理客户端新建连接 Netty 服务端完全启动后,就可以对外工作了。接下来 Netty 服务端是如何处理客户端新建连接的呢? 主要分为四步: md Boss NioEventLoop 线程轮询客户端新连接 OP_ACCEPT 事件&#xff…

分享图片 | 快速浏览网页资源,批量保存、一键分享图片

前言 小伙伴学习吉他,有时需要在互联网搜索曲谱资源,而多数曲谱均为图片,并且为多页,在电脑上显示练习很不方便,需要停下来点击鼠标进行翻页,影响练习的连贯性。 为了解决上述问题,通常把图片…