当前位置: 首页 > news >正文

操作系统:管程与进程通信机制解析


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭
~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:操作系统

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

目录

管程

管程结构示意图

管程具有以下三个特性:

利用管程实现同步

管程结构示意图

进程通信

1.共享内存

2.消息传递

3.管道文件方式


管程

管程(Monitor)是功能更强的同步机制。

管程的定义是:一个管程定义一个数据结构和能为并发进程在其上执行的一组操作,这组操作能使进程互斥/同步,能改变管程中的数据。

一个管程由管程名称、局部于管程的共享数据的说明、对数据进行操作的一组过程和对该共享数据赋初值的语句四部分组成

管程结构示意图

管程具有以下三个特性

① 管程内部的局部数据变量只能被管程内定义的过程所访问,不能被管程外面声明的过程直接访问。

② 进程要想进入管程,必须调用管程内的某个过程。

③ 一次只能有一个进程在管程内执行,而其余调用该管程的进程都被挂起,等待该管程成为可用的。即管程能有效地实现互斥。

利用管程实现同步

定义两个条件变量xy:          

        condition x , y;

操作wait(x):挂起等待条件x的调用进程,释放相应的管程,以便供其他进程使用。

操作signal(x):恢复执行先前因在条件x上执行wait而挂起的那个进程。

管程的职责与信号量的职责不同(不能累积)

管程结构示意图

进程通信

进程通信是指进程间的信息交换。

上述进程的互斥和同步机构因交换的信息量少,被归结为低级进程通信。

高级进程通信方式有很多种,大致可归并为共享内存、消息传递管道文件三类。

1.共享内存

共享内存是在内存中分配一片空间作为共享存储区。需要进行通信的各个进程把共享存储区附加到自己的地址空间中,然后,就像正常操作一样对共享区中的数据进行读或写。

2.消息传递

消息传递系统的功能是允许进程彼此进行通信,而不必借助于共享数据。

既可实现进程的同步,又可实现在协作进程间交换信息。

消息传递系统有多种形式,通常都提供两个原语,即send和receive。

sendreceive的一般格式是:

  • send (destination, message)
  • receive (source, message)

设计消息传递系统涉及同步、寻址、格式和排队等多项问题

3.管道文件方式

管道文件也称管道线,它是连接两个命令的一个打开文件

例如  who | wc -l

一个命令向该文件中写入数据,称做写者;

另一个命令从该文件中读出数据。

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

相关文章:

操作系统:管程与进程通信机制解析

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...

inno setup 卸载程序 删除整个安装目录

业务场景:有次客户反馈说,卸载应用程序没有卸载干净,安装目录下残留很多文件,特别是一些配置文件和数据库文件,涉及到一些数据安全机密。卸载程序应该把安装目录都要清除。操作如下: 卸载应用程序&#xf…...

【Vue3源码学习】— CH2.5 reactiveEffect.ts:Vue 3响应式系统的核心

reactiveEffect.ts:Vue 3响应式系统的核心 1. 什么是 reactiveEffect?2. 核心机制2.1 依赖收集(Track)2.2 触发更新(Trigger)2.3 效果范围(effectScope) 3. 源码解析 —— track3.1 …...

K8S的mountPath和subPath

1 mountPath mountPath是容器内部文件系统的挂载点,它定义了容器内部将外部存储卷(如 PersistentVolume、ConfigMap、Secret 等)挂载到哪个路径下。通过 mountPath,容器可以访问这些挂载的数据或配置。 2 subPath subPath 是 m…...

notepad++里安装32位和64位的16进制编辑器Hex-Editor

这个16进制编辑器确实是个好东西,平时工作种会经常用到, 这是hex-editor的官网。这个里边只能下载32位的(64位的看最下边),选一个合适的版本,我当时选的是最新的版本 https://sourceforge.net/projects/npp-plugins/files/Hex%20E…...

Python类的基本结构

当我们在Python中定义类时,我们实际上是在创建一种新的数据类型。类允许我们定义对象的属性和方法,从而构建更复杂的程序。让我们深入探讨一下关于类的一些重要概念。 定义类:基本结构 一个类的基本结构包括以下部分: 类名&…...

利用HIVE的窗口函数进行SQL查询中出现的问题记录

student_info部分数据 score_info部分数据 course_info 1、问题复现 --完整SQL selectsti.stu_id,sti.stu_name,concat_ws(",",collect_set(ci.course_name)) over(partition by sti.stu_id) fromstudent_info sti left joinscore_info sci onsti.stu_idsci.stu_id l…...

更改chatglm认知

ChatGLM-Efficient-Tuning 下载源代码 下载ChatGLM-Efficient-Tuning 解压 创建虚拟环境 conda create --prefixD:\CondaEnvs\chatglm6btrain python3.10 cd D:\ChatGLM-Efficient-Tuning-main conda activate D:\CondaEnvs\chatglm6btrain安装所需要的包 pip install -r…...

WPF 界面命令绑定(MVVM结构)

1.创建模型数据类&#xff08;M&#xff09; /// <summary>/// 数据模型/// </summary>public class LoginDataModel{// 用户名private string _userName;public string UserName{get { return _userName; }set{_userName value;}}// 密码private string _passWor…...

常见手撕项目C++

常见手撕项目C 设计模式单例模式饿汉模式懒汉模式 策略模式策略接口实现具体的策略&#xff08;虚函数重写&#xff09;定义上下文用户调用 设计模式 单例模式 单例模式是一种常用的软件设计模式&#xff0c;其目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来…...

创建一个批处理作业来处理大量数据,例如从数据库中读取数据并进行处理

创建一个批处理作业来处理大量数据&#xff0c;例如从数据库中读取数据并进行处理 要创建一个批处理作业来处理大量数据&#xff0c;您可以使用Spring Batch。Spring Batch是一个用于大规模批处理的框架&#xff0c;它提供了丰富的功能来处理复杂的批处理任务&#xff0c;如读…...

LeetCode 2.两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …...

如何利用ChatGPT提升学术论文写作效率

ChatGPT无限次数:点击直达 如何利用ChatGPT提升学术论文写作效率 ChatGPT 是一种基于大规模预训练模型的自然语言处理工具&#xff0c;可以在各种文本生成任务中发挥作用&#xff0c;包括学术论文写作。利用ChatGPT&#xff0c;可以提高学术论文写作的速度和质量&#xff0c;帮…...

LLMs之Mistral:Mistral 7B v0.2的简介、安装和使用方法、案例应用之详细攻略

LLMs之Mistral&#xff1a;Mistral 7B v0.2的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;Mistral AI首个7B模型发布于2023年9月&#xff0c;在基准测试中超越Llama 2 13B&#xff0c;一下子声名大振。Mistral 7B v0.2对应的指令调优版本Mistral-7B-Instruct-v0…...

深入解析Oracle数据库中的WITH AS(CTE)原理

Oracle数据库中的WITH AS子句&#xff08;也称为公用表表达式CTE(Common Table Expression)&#xff09;是一种高级查询构造工具&#xff0c;它允许在一条SQL语句的开始部分定义临时的结果集&#xff08;或称子查询&#xff09;&#xff0c;这个结果集可以被随后的查询主体多次…...

Linux 环境安装 Elasticsearch 8.X

安装前说明 首先确定操作系统&#xff0c;在Linux发行版上执行uname -a查看具体系统。我是Ubuntu系统&#xff0c;可以用直接用apt-get安装&#xff0c;也可以下载tar.gz包手动安装。使用apt-get安装更方便快速&#xff0c;但不同的文件会被安装到不同的目录&#xff0c;不方便…...

Java零基础-集合:函数式接口

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…...

Redis Scan指令解析与使用示例

Redis Scan指令解析与使用示例 概念 想要从redis key列表中找到某个key&#xff0c;redis提供了一个简单粗暴的指令keys用来列出满足查询条件的所有key。 keys redis* keys redis*keykey指令非常简单&#xff0c;只要提供一个简单的正则表达式即可&#xff0c;但是有两个明显的…...

Qt+OpenGL入门教程(三)——绘制三角形

通过前两篇文章的学习&#xff0c;我想大家应该有了基本的理解&#xff0c;我们接下来实操一下。 创建Qt OpenGL窗口 QOpenGLWidget QGLWidget是传统QtOpenGL模块的一部分&#xff0c;与其他QGL类一样&#xff0c;应该在新的应用程序中避免使用。相反&#xff0c;从Qt5.4开始…...

springcloud基本使用(搭建eureka服务端)

创建springbootmaven项目 next next finish创建成功 删除项目下所有文件目录&#xff0c;只保留pox.xml文件 父项目中的依赖&#xff1a; springboot依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-s…...

智慧工地起重机吊钩检测数据集VOC+YOLO格式1138张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数)&#xff1a;1138标注数量(xml文件个数)&#xff1a;1138标注数量(txt文件个数)&#xff1a;1138标注类别…...

Kali+MSF 安全攻防实操|Windows 渗透完整流程教程

入侵电脑&#xff0c;并没有我们想象的那么难&#xff0c;今天我们的文章主要是给一些基础比较薄弱的小伙伴们准备的&#xff0c;如果你从来没有利用msf进入过对方计算机&#xff0c;就赶紧找个风和日丽的下午&#xff0c;跟着博主一起来试试吧~ 01 什么是msf 演示环境 02 …...

OptiSearch:浏览器扩展实现AI与搜索引擎的无缝集成

1. 项目概述&#xff1a;当搜索遇到AI&#xff0c;一次查询&#xff0c;双重答案作为一名长期在信息检索和效率工具领域折腾的开发者&#xff0c;我一直在思考一个问题&#xff1a;我们每天在搜索引擎和AI聊天机器人之间要切换多少次标签页&#xff1f;搜索一个技术问题&#x…...

开源状态监控工具openclaw-status:从原理到部署的完整实践指南

1. 项目概述&#xff1a;一个开源状态监控工具的诞生最近在折腾一个开源项目&#xff0c;叫openclaw-status&#xff0c;是vibe-with-me-tools组织下的一个子项目。简单来说&#xff0c;这是一个用于监控和展示各种服务、应用、设备状态的工具。听起来是不是有点像那些商业化的…...

Linux端口转发到外网完全教程:iptables DNAT+SNAT实现内网服务暴露

一、什么是外网端口转发Linux端口转发到外网&#xff0c;是指将Linux服务器上某个端口的流量&#xff0c;转发到外网&#xff08;公网&#xff09;的另一台服务器。这样做的典型场景是&#xff1a;你有一台内网服务器没有公网IP&#xff0c;但另一台海外服务器有公网IP&#xf…...

计算内存(CIM)技术解析与AI硬件加速实践

1. 计算内存&#xff08;CIM&#xff09;技术解析&#xff1a;突破传统架构的能效瓶颈 在AI硬件加速领域&#xff0c;计算内存&#xff08;Compute-in-Memory, CIM&#xff09;正引发一场架构革命。传统冯诺依曼架构中"内存墙"问题已成为制约AI计算效率的主要瓶颈——…...

Perplexity无法解析Springer LaTeX公式?2024.06最新MathJax兼容补丁+3类数学文献精准摘要生成术

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity解析Springer文献的底层机制与失效归因 Perplexity 作为衡量语言模型预测能力的关键指标&#xff0c;在学术文献解析场景中常被误用为“质量代理”&#xff0c;尤其在处理 Springer 出版集团…...

抖音图片怎么去水印?2026实测去水印方法全整理,免费工具一并推荐

抖音图片怎么去水印&#xff1f;2026实测去水印方法全整理&#xff0c;免费工具一并推荐 每次在抖音刷到一张好看的图&#xff0c;长按保存下来却发现角落盖着一行"昵称抖音"水印&#xff0c;这种体验相信不少人都经历过。水印不影响欣赏还好&#xff0c;但如果想把图…...

OpenClaw 如何实现任务恢复与失败重试?

网罗开发&#xff08;小红书、快手、视频号同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…...

这家头部智能家居品牌是如何让全渠道电商闭环运营落地?

在电商渠道愈发多元的当下&#xff0c;让很多企业陷入 “数据多却用不好” 的困境。这不是个别现象&#xff0c;而是绝大多数全渠道电商企业正在经历的“成长烦恼”。今天&#xff0c;我们用一个真实案例&#xff0c;带您看看如何用一套系统&#xff0c;彻底告别这些噩梦。这家…...