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

操作系统入门 -- 进程的通信方式

操作系统入门 – 进程的通信方式

1.什么是进程通信

1.1 定义

进程通信就是在不同进程之间交换信息。在之前文章中可以了解到,进程之间相互独立,一般不可能互相访问。因此进程之间若需要通信,则需要一个所有进程都认可的共享空间,而这个空间就是内存区以及系统空间。总的来说,进程通信就是一组编程接口,可以让开发人员协调不同进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。

1.2 进程通信的意义

有些复杂的程序需要多个进程协同完成某些具体任务,因此进程之间就需要互相通信实现数据的交换和访问。整个系统执行任务的最小粒度就是进程,这样可以提升系统性能以及安全性。此外在之前讲解进程也提过,多进程应用比多线程引用更加壮硕。


2.进程通信方式

在该节将会讲解进程之间的通信方式。

2.1 管道通信

2.1.1 管道通信的概念

管道通信中所谓管道就是一个用于连接读进程和写进程的数据缓冲区。写进程通过将数据以字节流的方式向管道中发送,而接收端使用读进程读取管道中的数据即可实现信息交换。为了协调双方的通信,管道需要提供 同步互斥确定对方存在 的协调能力,其目的是为了让进程同步。

2.1.2 管道通信的性质

在管道中数据读取是一次性的,即数据被读取后将会被删除,以释放管道空间。同时在某一时刻管道内的数据只能单向传输,即某一时刻只能读或只能写。目前,管道通信类似于生产者-消费者模型,即当管道内写入一定数据时,即可读出。而单向传输决定了进程之间的性质,只有亲缘关系的进程才会使用管道通信。

2.2 消息队列

2.2.1 消息队列概念

消息队列在发送数据时会按照一个个的消息体进行发送,每个消息体都规定了大小,收发双方约定好一种消息类型。相比于字节流的无格式方式,消息队列允许不同进程以消息队列的形式发送给 任意 进程,而进程之间的数据交换也是格式化的消息。若通信进程之间不存在可以直接访问的共享空间,则必须利用 操作系统 提供的消息传递方法实现通信,进程通过系统提供的发送消息和接收消息两个原语进行数据交换。

2.2.2 消息队列通信的性质

  • 直接通信方式:发送进程直接把数据发送至接收进程,并把数据挂到接收进程的消息队列中,接收进程从自己的消息队列中获得消息
  • 间接通信方式:发送进程把消息发送到实体中间件,接收进程再从中间件中获取。

2.3 共享内存

2.3.1 共享内存概念

在使用消息队列时如果数据量较大则数据的收发会产生一定的延迟,因此使用共享内存可以解决收发速度较慢的问题。
进程在运行时需要有自己的虚拟空间,而这些虚拟空间将会映射到不同的物理内存中。共享内存通过申请一块虚拟地址空间,让不同进程的虚拟地址空间映射到同一物理空间,即可实现数据的共享。

2.4 信号量

多进程使用共享内存,但若果所有进程读或写则会导致数据混乱,因此需要有一个约束,这就是之间进程同步与互斥中讲到的信号量。目的是为了防止读写冲突。信号量定义了两种操作,p操作和v操作,p操作为申请资源,会将数值减去M,表示这部分被他使用了,其他进程暂时不能用。v操作是归还资源操作,告知归还了资源可以用这部分。

2.5 套接字

与网络连接类似,基于socket连接的进程需要有一个专门负责监听的进程(服务进程)若进程之间想通信则调用监听进程,并开始TCP或UDP连接。当数据交换完成后结束通信,下次数据交换时则继续建立新的连接。

相关文章:

操作系统入门 -- 进程的通信方式

操作系统入门 – 进程的通信方式 1.什么是进程通信 1.1 定义 进程通信就是在不同进程之间交换信息。在之前文章中可以了解到,进程之间相互独立,一般不可能互相访问。因此进程之间若需要通信,则需要一个所有进程都认可的共享空间&#xff0…...

Python读取wps中的DISPIMG图片格式

需求: 读出excel的图片内容,这放在微软三件套是很容易的,但是由于wps的固有格式,会出现奇怪的问题,只能读出:类似于 DISPIMG(“ID_2B83F9717AE1XXXX920xxxx644C80DB1”,1) 【该DISPIMG函数只有wps才拥有】 …...

elasticsearch的入门与实践

Elasticsearch是一个基于Lucene构建的开源搜索引擎。它提供了一个分布式、多租户能力的全文搜索引擎,具有HTTP web接口和无模式的JSON文档。以下是Elasticsearch的入门与实践的基本步骤: 入门 安装Elasticsearch: 从Elasticsearch官网下载对…...

神经网络学习6-线性层

归一化用的较少 正则化用来解决过拟合,处理最优化问题,批量归一化加快速度 正则化(Regularization): 作用:正则化是一种用来防止过拟合的技术,通过向模型的损失函数中添加惩罚项,使…...

PHP框架详解 - CodeIgniter 框架

CodeIgniter 是一个成熟的轻量级 PHP 框架,专为小到中型的 Web 应用开发设计。它以其简洁、灵活和易于学习的特点而受到开发者的喜爱。 CodeIgniter 框架的特点包括: 轻量级:CodeIgniter 的核心非常小,加载速度快,适…...

奔驰EQS SUV升级原厂主动式氛围灯效果展示

以下是一篇关于奔驰 EQs 升级原厂主动氛围灯案例的宣传文案: 在汽车科技不断演进的今天,我们自豪地为您呈现奔驰 EQs 升级原厂主动氛围灯的精彩案例。 奔驰 EQs,作为豪华电动汽车的典范,其卓越品质与高端性能有目共睹。而此次升…...

echarts Y轴展示时间片段,series data数据 也是时间片段,鼠标放上去 提示框显示对应的时间片段

功能要求 1、折线图,展示每天对应的一个时间片段 2、echarts Y轴展示时间片段,如:[00:00,03:00,05:15] 3、X轴展示日期,如:[xx年xx月xx日] 后端返回的数据结构,如 [{xAdate:"2024-06-15",data:…...

20. mediasoup服务器的布署与使用

Mediasoup Demo部署 架构服务分析 服务端提供3个服务: 1.www服务,浏览器通过访问服务器目录获取客户端代码,通过V8引擎,启动底层WebRTC 2.nodejs提供websocket服务和http服务,用于信令交互 3.Mediasoup C提供的流媒体…...

【leetcode--同构字符串】

要求:判断两个字符串的形式是不是一致,即是不是AABC或者ABBBCC这种。 trick:使用set()结合zip()。 set()用法:用于创建一个不包含重复元素的集合 zip&#…...

shell expr功能详解

expr命令可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。它还具个特殊功能,判断变量或参数是否为整数、是否为空、是否为0等。 1.字符串表达式 ------------------------- expr支持模式匹配和字符串操作。字符串表达式的优先…...

java继承Thead类和实现Runnable接口创建线程的区别

一、继承Thread类创建多线程 public class Demo{public static void main(String[] args) {MyThread thread new MyThread();thread.start();}} class MyThread extends Thread{Overridepublic void run() {//子线程执行的操作} }注意:开启子线程要调用start()方法…...

interface Ref<T = any> 这是什么写法?为什么写接口还需要加上<T = any>

问: export interface Ref<T any> { value: T [RefSymbol]: true } 这里既然是interface接口,为什么还有<T any>这是什么意思? 回答: <T any> 中的 <T> 表示这是一个泛型参数&#xff0c;它可以在接口中作为类型的占位符&#xff0c;在实际…...

深入探索 MongoDB GridFS:高效大文件存储与管理的全面指南

GridFS 是 MongoDB 的一个规范&#xff0c;用于存储和检索超过 BSON 文档大小限制&#xff08;16MB&#xff09;的文件。与传统的文件系统不同&#xff0c;GridFS 可以将一个大文件分割成多个小块&#xff0c;并存储在 MongoDB 的两个集合中&#xff1a;fs.files 和 fs.chunks。…...

基于CentOS Stream 9平台 安装/卸载 Redis7.0.15

已更正systemctl管理Redis服务问题 1. 官方下载地址 https://redis.io/downloads/#redis-downloads 1.1 下载或上传到/opt/coisini目录下&#xff1a; mkdir /opt/coisini cd /opt/coisini wget https://download.redis.io/releases/redis-7.0.15.tar.gz2. 解压 tar -zxvf re…...

激励-保健理论和公平理论

激励-保健理论 herzberg的激励-保健理论中&#xff0c;保健因素是context of a job&#xff0c;激励因素是content of a job。 context of a job是受组织控制的因素&#xff0c;比如工作条件&#xff0c;基本工资&#xff0c;公司政策等&#xff0c;个人无法支配。content of…...

深入探索 Spring Boot 自定义启动画面

目录 引言什么是 Spring Boot 启动画面Spring Boot 默认启动画面为什么要自定义启动画面如何自定义 Spring Boot 启动画面 修改配置文件使用 Banner 接口通过图片实现启动画面ASCII 艺术画的应用 进阶&#xff1a;基于环境变量的动态 Banner多模块项目中的启动画面Spring Boot…...

Redis实战—Redis分布式锁

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于Redis的分布式锁 Redis锁代码实现 修改业务代码 分布式锁误删问题 分布式锁原子性问题 Lua脚本 编写脚本 代码优化 总结 分布式锁介绍…...

联想Y7000P 2023款拆机教程及升级内存教程

0.电脑参数介绍 联想Y7000P 2023电脑&#xff0c;笔者电脑CPU为i7-13700H&#xff0c;14核20线程&#xff1b;标配内存为三星的DDR5-5600MHz-8GB*2&#xff0c;由于电脑CPU限制&#xff0c;实际内存跑的频率为5200MHz; 2个内存插槽&#xff0c;2个固态硬盘插槽。每个内存插槽最…...

开发常用依赖

目录 代理对象 Swagger Web 单元测试 MybatisPlus Lombok Mysql SpringBoot Jdk SpringCloud 数据库驱动包 hutool工具 配置仓库 通用库 maven插件 nacos注册中心 OpenFeign Spring AMQP JSON转换器 Redis 邮箱验证 Redisson分布式锁 客户端 代理对象 &l…...

【区分vue2和vue3下的element UI Empty 空状态组件,分别详细介绍属性,事件,方法如何使用,并举例】

在 Element UI&#xff08;为 Vue 2 设计&#xff09;和 Element Plus&#xff08;为 Vue 3 设计&#xff09;中&#xff0c;Empty&#xff08;空状态&#xff09;组件通常用于在数据为空或没有内容时向用户展示一种占位提示。然而&#xff0c;需要注意的是&#xff0c;Element…...

【AI作曲】毁掉音乐?早该来了!一个网易音乐人对于 AI 大模型音乐创作的思辨

引言&#xff1a;AI在创造还是毁掉音乐&#xff1f; 正如当初 midjourney 和 StableDiffusion 在绘画圈掀起的风波一样&#xff0c;suno 和 各大音乐大模型的来临&#xff0c;其实早该来了。 AI 在毁掉绘画&#xff1f;或者毁掉音乐&#xff1f; 没错&#xff0c;但也错了。…...

RabbitMQ实践——最大长度队列

大纲 抛弃消息创建最大长度队列绑定实验 转存死信创建死信队列创建可重写Routing key的最大长度队列创建绑定关系实验 在一些业务场景中&#xff0c;我们只需要保存最近的若干条消息&#xff0c;这个时候我们就可以使用“最大长度队列”来满足这个需求。该队列在收到消息后&…...

【pytorch02】手写数字问题引入

1.数据集 现实生活中遇到的问题 车牌识别身份证号码识别快递单的识别 都会涉及到数字识别 MNIST&#xff08;收集了很多人手写的0到9数字的图片&#xff09; 每个数字拥有7000个图像train/test splitting:60k vs 10k 图片大小28 28 数据集划分成训练集和测试集合的意义…...

【查看显卡信息】——Ubuntu和windows

1、VMware虚拟机 VMware虚拟机上不能使用CUDA/CUDNN&#xff0c;也安装不了显卡驱动 查看显卡信息&#xff1a; lspci | grep -i vga 不会显示显卡信息&#xff0c;只会输出VMware SVGA II Adapter&#xff0c;表示这是一个虚拟机&#xff0c;无法安装和使用显卡驱动 使用上…...

在 RK3568 上构建 Android 11 模块:深入解析 m、mm、mmm 编译命令

目录 Android 编译系统概述编译命令简介 环境准备使用 m、mm、mmm 编译模块编译整个源码树编译单个模块编译指定目录下的模块 高级应用并行编译清理编译结果编译特定配置 在 Android 开发中&#xff0c;特别是在 RK3568 这样的高性能平台上&#xff0c;有效地编译和管理模块是确…...

实战|YOLOv10 自定义目标检测

引言 YOLOv10[1] 概述和使用自定义数据训练模型 概述 由清华大学的研究团队基于 Ultralytics Python 包研发的 YOLOv10&#xff0c;通过优化模型结构并去除非极大值抑制&#xff08;NMS&#xff09;环节&#xff0c;提出了一种创新的实时目标检测技术。这些改进不仅实现了行业领…...

TTS前端原理学习 chatgpt生成答案

第一篇文章学习 小绿鲸阅读器 通篇使用chatgpt生成答案 文章&#xff1a; https://arxiv.org/pdf/2012.15404 1. 文章概述 本文提出了一种基于Distilled BERT模型的统一普通话文本到语音前端模块。该模型通过预训练的中文BERT作为文本编码器&#xff0c;并采用多任务学习技术…...

AI“音乐创作”横行给音乐家带来哪些隐忧

​​​​​​​近日&#xff0c;200多名国际乐坛知名音乐人联署公开信&#xff0c;呼吁AI开发者、科技公司、平台和数字音乐服务商停止使用人工智能(AI)来侵犯并贬低人类艺术家的权利&#xff0c;具体诉求包括&#xff0c;停止使用AI侵犯及贬低人类艺术家的权利&#xff0c;要求…...

SolidityFoundry 安全审计测试 Delegatecall漏洞2

名称&#xff1a; Delegatecall漏洞2 https://github.com/XuHugo/solidityproject/tree/master/vulnerable-defi 描述&#xff1a; 我们已经了解了delegatecall 一个基础的漏洞——所有者操纵漏洞&#xff0c;这里就不再重复之前的基础知识了&#xff0c;不了解或者遗忘的可…...

【字符串 状态机动态规划】1320. 二指输入的的最小距离

本文涉及知识点 动态规划汇总 字符串 状态机动态规划 LeetCode1320. 二指输入的的最小距离 二指输入法定制键盘在 X-Y 平面上的布局如上图所示&#xff0c;其中每个大写英文字母都位于某个坐标处。 例如字母 A 位于坐标 (0,0)&#xff0c;字母 B 位于坐标 (0,1)&#xff0…...

广州黄埔网站建设公司/搜盘网

OpenRemoved_Tina_Linux_安全_开发指南 1 概述 1.1 编写目的 介绍TinaLinux 下安全方案的功能。安全完整的方案基于normal 方案扩展&#xff0c;覆盖硬件安全、安全启动&#xff08;Secure Boot&#xff09;、安全系统&#xff08;Secure OS&#xff09;、安全存储&#xff…...

德国著名的外贸公司地址/福州百度网站排名优化

参考链接&#xff1a; 1、http://www.talkwithtrend.com/Question/123541?orderasc 解决方法&#xff1a; Doucker 提示&#xff1a;Your kernel does not support swap limit capabilities 这个默认官方给予解决方法了&#xff0c;地址是https://docs.docker.com/installat…...

更改wordpress网站的url/seo优化专家

笔记07 5. ArrayList类 功能&#xff1a;创建长度可变的数组。 导包&#xff1a;同样在java.util中 ArrayList中的是泛型。泛型只能是引用类型&#xff0c;不能是基本类型注意事项 对于ArrayList集合来说&#xff0c;直接打印得到的不是地址值&#xff0c;而是内容。如果内容…...

网站建设的电话客服/上海最近3天疫情情况

MySQL 最重要、最与众不同的特性是它的存储引擎架构&#xff0c;这种架构的设计将查询处理及其他系统任务和数据的存储/提取相分离。这种处理和存储分离的设计可以在使0用时根据性能、特性&#xff0c;以及其他需求来选择数据存储的方式。 MySQL 的逻辑架构 MySQL 逻辑架构图…...

建筑模板生产设备/莱阳seo排名

在上秦小麟老师的数据库实现技术的时候&#xff0c;老师提到了一个问题&#xff1a;如何在运行时获取一个变量的类型&#xff0c;这用C实现好像要大费周折。今天正好碰到一个问题想看看CSTL中的sort算法的实现&#xff0c;发现里面有个技巧可以很容易做到这一点。我就立刻自己做…...

做公众号封面图的网站/网站关键词快速排名软件

百度了一下。。有说将cmd字符编码用chcp命令改为65001(utf8字符编码)&#xff0c;可这样之后根本无法输入中文&#xff0c;查询出的中问结果依旧乱码 。其实&#xff0c;只要保证cmd客户端和MySQL两者编码一致即可。但现实是cmd默认的是gbk(cmd属性可以看到中文操作系统下面是g…...