操作系统笔记(四)进程间通信,竞争条件与解决方案

进程间通信(IPC)

如何在进程间传递信息?

如何防止两个进程冲突?

如何实现进程执行的先后顺序?

竞争条件(Race conditions)

竞争条件(Race conditions)

多个进程访问一个共享数据,而数据最后的值由进程访问的先后顺序决定。

竞争条件的例子

输出: 指向下一个待打印的文件

输入: 指向下一个空位,in =7.

(1): 进程 A 读 in 且将值 7 保存在一个局部变量.   进程A 切换到进程B.

(2): 进程B读in, 将文件名保存在空位 7 且更新in 的值为 8.

(3): 进程 A 将文件名保存到空位 7且更新 in 的值为 8.

空位 7 所保存的文件名不确定,取决于谁最后完成,这导致竞争条件发生。

临界区

  1. 临界资源:互斥共享变量所代表的资源,即一次只能被一个进程使用的资源;
  2. 临界区指并发程序中与互斥共享变量相关的程序段;
  3. 防止竞争条件的思想:禁止多个进程同时读和写共享数据,即同时进入临界区。

防止竞争条件的解决方案

好的解决方案满足的四个条件:

  1. 没有进程同时在临界区;
  2. 不假设CPU的速度和数量;
  3. 临界区外运行的进程不得阻塞其他进程;
  4. 不会导致有进程永远在临界区外面等待。

使用临界区的互斥

实现互斥

实现互斥- 屏蔽中断

只有发生中断的时候,CPU 才会切换进程。因此,如果屏蔽中断,就不会发生切换了。

这个不太好,一个进程关了中断之后不开怎么办?

实现互斥- 锁变量

Problem?

如果一个进程执行完while条件判断后突然发生了切换,lock = 1尚未执行, 则两个进程都会进入临界区。

实现互斥– 严格轮换法

问题:效率不高,有限制。

互斥实现– Peterson’s 解法

几乎完美,但是有忙等待现象!

硬件方案:  测试并加锁 (TSL) 指令

该硬件支持一种特殊指令 TSL, 其能够不可分割地完成两个任务:

(a)将一个内存值保存到CPU寄存器;

(b)将该内存值设置为1。

忙等待

忙等待

  • 一个进程一直占用CPU测试循环的条件,直到测试条件为真。
  • 浪费CPU;
  • 导致优先级反转问题

睡眠与唤醒

  • 从忙等待到阻塞...
  • 睡眠是一个系统调用,使得调用者阻塞自己直到另外的进程唤醒该进程。
  • 唤醒调用唤醒指定的进程。

习题:

设与某资源相关联的信号量初值为3,当前值为2,若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别为(D  )

下一个笔记的内容是信号量相关的,可以移步看一下~

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

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

相关文章

适配器模式:连接不兼容接口的桥梁

1. 引言 在软件开发中,我们常常会遇到不同系统之间需要互操作的情况。这些系统可能使用不同的接口和数据结构,如果我们不采取适当措施,它们将无法有效沟通。适配器模式(Adapter Pattern)正是为了解决这一问题而诞生的…

jmeter的基本使用

Jmeter基本使用 一、变量 1.用户定义变量 2.用户参数 二、函数 1.计数器${__counter(,)} 2.时间函数 3.加密函数${__digest(,,,,)} 4. 整数相加${__intSum(,,)} 5.属性函数,${__P(,)}、${__property(,,)}、${__setProperty(,,)} 6.V函数 三、获取响应数据…

Go语言基础教程:指针

在 Go 中,函数参数默认是按值传递的。若要改变变量的原始值,可以使用指针。本教程将通过示例代码来演示如何使用值传递和指针传递。 package mainimport "fmt"// 传值方式 - 函数内改变 ival 的值不会影响原始变量 func zeroval(ival int) {i…

2024年优秀的天气预测API

准确、可操作的天气预报对于许多组织的成功至关重要。 事实上,在整个行业中,天气条件会直接影响日常运营,包括航运、按需、能源和供应链(仅举几例)。 以公用事业为例。根据麦肯锡的数据,在 1.4 年的时间里…

HCIP-HarmonyOS Application Developer V1.0 笔记(二)

类Web开发范式自定义组件基本用法 自定义组件通过element引入到宿主页面。 Props自定义属性 自定义属性支持类型 String,Number,Boolean,Array,Object。 命名规范: 命名时禁止以on、、on:、grab:等保留关键字为开头…

天润融通突破AI客服局限,三大关键提升文本机器人问答效果

近期,AI客服再次登上热搜,引发网友集体吐槽,比如AI客服虽然态度客气,但听不懂客户诉求,回答问题驴唇不对马嘴,解决不了问题...... 更有网友将这些问题升级到,企业就是不想解决问题才交给AI客服…

aarch64-opencv341交叉编译,并在arm上部署helloopencv

背景 当需要在jetson xavier nx或者rk 3562等平台上开发关于视觉检测的工程时,由于arm板子资源不足或者不能联网等原因,通常在虚拟机上利用交叉编译器编译得到可执行程序,然后部署到arm板上。 aarch64-opencv341交叉编译 ubuntu虚拟机中先…

mysql中redolog、binlog

我们中说删库跑路,那么数据库删除后,里面的数据怎么恢复呢? 这里就涉及到了redolog和binlog了 一、什么是存储引擎和缓冲池 存储引擎是 MySQL 中直接与磁盘交互部分。也是存储引擎读写数据的最小单位,一个页里可以有一条或多条…

排序算法在最坏情况下的性能差异:深入分析

目录 1. 排序算法简介 2. 最坏情况示例分析 2.1 插入排序 2.2 归并排序 2.3 快速排序 2.4 堆排序 3. 性能差异与优化策略 4. 拓展知识:算法选择与优化 5. 结语 在软件工程中,排序算法是数据处理的基石。不同的排序算法在不同情况下表现出不同的…

【分布式技术】分布式事务深入理解

文章目录 概述产生原因关键点 分布式事务解决方案3PC3PC的三个阶段:3PC相比于2PC的改进:3PC的缺点: TCCTCC事务的三个阶段:TCC事务的设计原则:TCC事务的适用场景:TCC事务的优缺点:如何解决TCC模…

使用 Mermaid 语言描述 AGI 系统架构图

使用Mermaid语言描述AGI系统架构图 一、整体架构概述 以下是一个简化的AGI(Artificial General Intelligence,通用人工智能)系统架构的Mermaid描述。该系统主要包括数据收集与预处理、模型训练、推理与决策以及交互接口等模块,各…

字节青训-找出最长的神奇数列

问题描述 小F是一个好学的中学生,今天他学习了数列的概念。他在纸上写下了一个由 0 和 1 组成的正整数序列,长度为 n。这个序列中的 1 和 0 交替出现,且至少由 3 个连续的 0 和 1 组成的部分数列称为「神奇数列」。例如,10101 是一…

华为配置BFD状态与接口状态联动实验

组网图形 图1 配置BFD状态与接口状态联动组网图 BFD简介配置注意事项组网需求配置思路操作步骤配置文件 BFD简介 为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要能够尽快检测到与相邻设备间的通信故障,以便及时采取措施&…

解压缩工具详解:ZArchive对比解压专家

ZArchiver 和解压专家在手机版解压缩工具市场中都占据着重要地位,深受用户喜爱。 ZArchiver 是一款功能强大的解压缩文件应用程序。它支持创建多种格式的压缩文件,如 7z (7zip)、zip、bzip2 (bz2)、gzip (gz)、XZ、tar 等;同时支持解压众多格…

CPU算法分析LiteAIServer视频智能分析平台噪声检测功能在视频监控中的应用与优势

在视频监控系统中,噪声问题一直是影响视频画面清晰度和可用性的关键因素。这些噪声可能源于多种因素,如低光环境、摄像机传感器的高灵敏度或编码压缩过程中的失真等。为了应对这些挑战,CPU算法分析LiteAIServer引入了噪声检测功能&#xff0c…

MATLAB实现蝙蝠算法(BA)

MATLAB实现蝙蝠算法(BA) 1.算法介绍 蝙蝠算法(简称BA)是一种受微型蝙蝠回声定位机制启发的群体智能算法,由Xin-She Yang于2010年提出。这种算法模拟了微型蝙蝠通过向周围环境发出声音并监听回声来识别猎物、避开障碍物以及追踪巢穴的行为。…

git push到远程怎么回退

git push到远程服务器想继续修改,你必须要回退然后在此提交。而且需要保留本地的修改文件。 下面给你一些git命令,回退很简单。 按照下面的流程操作就行: 1.查看提交历史 首先,使用git log命令查看提交历史。可以使用以下命令显…

【Go】-基于Gin框架的博客项目

目录 项目分析 项目分层 初始化 用户模块 注册 登录 社区模块 所有社区 指定社区 帖子模块 顺序获取帖子 获取指定帖子 投票模块 发帖 投票 项目开发及部署 开发中使用air makefile的编写 docker 总结 项目分析 基于Gin框架的IM即时通讯小demo&#xff0c…

智能EDA小白从0开始 —— DAY30 冉谱微RFIC-GPT

在科技日新月异的今天,电子设计自动化(EDA)行业正以前所未有的速度推动着半导体产业的革新与发展,引领着全球电子产业迈向更加智能化、高效化的未来。作为EDA领域的佼佼者,冉谱公司始终站在技术创新的前沿,…

ai说ajax

var xhr new XMLHttpRequest();//创建 XMLHttpRequest 对象xhr.open(GET, https://api.example.com/data, true);//指定请求的类型和 URL:xhr.onreadystatechange function() {if (xhr.readyState 4 && xhr.status 200) {console.log(xhr.responseText);} }; //设置…