进程通信常见方式

news2024/11/16 21:44:48

目录

通信通信概述

通信的主要方式

进程同步机制--低级进程通信

高级通信工具

共享存储器系统(Shared-Memory System)

管道(pipe)通信系统

客户机-服务器系统(Client-Server system)---套接字(Socket)

客户机-服务器系统(Client-Server system)---远程过程调用(RPC) 

消息传递机制

直接消息传递系统实例 


通信通信概述

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

通信的主要方式

在操作系统中,进程之间需要进行通信以实现协作和数据共享。以下是几种常见的进程通信方式:1)管道(Pipe):管道是一种半双工的通信方式,它可以在两个进程之间传递数据。管道的特点是数据只能单向流动,而且通常只用于具有亲缘关系的进程之间进行通信,例如父子进程之间。

2)命名管道(Named Pipe):命名管道与管道类似,但是它可以在不具有亲缘关系的进程之间进行通信。与管道不同的是,命名管道具有一个唯一的名称,可以在文件系统中进行访问。

3)信号(Signal):信号是一种异步通信方式,它允许一个进程向另一个进程发送一个信号。信号通常用于处理异步事件,例如键盘中断、终端关闭等。

4)共享内存(Shared Memory):共享内存是一种高效的进程通信方式,它允许多个进程访问同一块物理内存,从而实现数据共享。共享内存的优点是速度快,但是需要处理并发访问和同步问题。

5)信号量(Semaphore):信号量是一种进程间同步和互斥的机制,它可以用于控制进程对共享资源的访问。信号量通常用于进程之间的同步和互斥,例如保护共享内存中的数据。

6)消息队列(Message Queue):消息队列是一种进程间通信方式,它允许进程之间传递消息。消息队列通常用于进程之间传递结构化的数据,例如进程之间传递命令和数据等。

7)套接字(Socket):套接字是一种进程间通信方式,它可以在不同的计算机之间进行通信。套接字通常用于实现分布式系统和网络通信。

进程同步机制--低级进程通信

由于进程的互斥与同步,需要在进程间交换一定的信息,故不少学者将它们也归为进程通信,但只能把它们称为低级进程通信。以信号量机制为例,说明之所以成为低级进程通信的原因:① 效率低,生产者每次只能向缓冲池投放一个产品(消息),消费者每次只能从缓冲区中取得一个消息;② 通信对用户不透明,OS只为进程之间的通信提供了共享存储器。

高级通信工具

进程之间要传送大量数据时,应当利用OS提供的高级通信工具,该工具最主要的特点是:
(1) 使用方便。OS隐藏了实现进程通信的具体细节,向用户提供了一组用于实现高级通信的命令(原语),用户可方便地直接利用它实现进程之间的通信。或者说,通信过程对用户是透明的。这样就大大减少了通信程序编制上的复杂性。
(2) 高效地传送大量数据。用户可直接利用高级通信命令(原语)高效地传送大量的数据。

ps: 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不
到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户
空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通
信。linux系统输入命令:ipcs 

共享存储器系统(Shared-Memory System)

在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。据此,又可把它们分成以下两种类型:
(1) 基于共享数据结构的通信方式。
(2) 基于共享存储区的通信方式。

管道(pipe)通信系统

所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。
向管道(共享文件)提供输入的发送进程(即写进程)以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程)则从管道中接收(读)数据。由于发送进程和接收进程是利用管道进行通信的,故又称为管道通信。这种方式首创于UNIX系统,由于它能有效地传送大量数据,因而又被引入到许多其它操作系统中。

为了协调双方的通信,管道机制必须提供以下三方面的协调能力:
① 互斥,即当一个进程正在对pipe执行读/写操作时,其它(另一)进程必须等待。
② 同步,指当写(输入)进程把一定数量(如4 KB)的数据写入pipe,便去睡眠等待,直到读(输出)进程取走数据后再把它唤醒。当读进程读一空pipe时,也应睡眠等待,直至写进程将数据写入管道后才将之唤醒。
③ 确定对方是否存在,只有确定了对方已存在时才能进行通信。

客户机-服务器系统(Client-Server system)---套接字(Socket)

套接字(Socket)起源于20世纪70年代加州大学伯克利分校版本的UNIX(即BSD Unix),是UNIX 操作系统下的网络通信接口。一开始,套接字被设计用在同一台主机上多个应用程序之间的通信(即进程间的通信),主要是为了解决多对进程同时通信时端口和物理线路的多路复用问题。随着计算机网络技术的发展以及UNIX 操作系统的广泛使用,套接字已逐渐成为最流行的网络通信程序接口之一。

socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输层之间的一组接口。

在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

客户机-服务器系统(Client-Server system)---远程过程调用(RPC) 

远程过程(函数)调用RPC(Remote Procedure Call),是一个通信协议,用于通过网络连接的系统。该协议允许运行于一台主机(本地)系统上的进程调用另一台主机(远程)系统上的进程,而对程序员表现为常规的过程调用,无需额外地为此编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称做远程方法调用。

RPC是建立在Socket之上的。

远程过程调用的主要步骤是:
(1) 本地过程调用者以一般方式调用远程过程在本地关联的客户存根,传递相应的参数,然后将控制权转移给客户存根;
(2) 客户存根执行,完成包括过程名和调用参数等信息的消息建立,将控制权转移给本地客户进程;
(3) 本地客户进程完成与服务器的消息传递,将消息发送到远程服务器进程;
(4) 远程服务器进程接收消息后转入执行,并根据其中的远程过程名找到对应的服务器存根,将消息转给该存根;
(5) 该服务器存根接到消息后,由阻塞状态转入执行状态,拆开消息从中取出过程调用的参数,然后以一般方式调用服务器上关联的过程;
(6) 在服务器端的远程过程运行完毕后,将结果返回给与之关联的服务器存根;
(7) 该服务器存根获得控制权运行,将结果打包为消息,并将控制权转移给远程服务器进程;
(8) 远程服务器进程将消息发送回客户端;
(9) 本地客户进程接收到消息后,根据其中的过程名将消息存入关联的客户存根,再将控制权转移给客户存根;
(10) 客户存根从消息中取出结果,返回给本地调用者进程,并完成控制权的转移。 

消息传递机制

在该机制中,进程不必借助任何共享存储区或数据结构,而是以格式化的消息 (message)为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原语),在进程间进行消息传递,完成进程间的数据交换。基于消息传递系统的通信方式属于高级通信方式,因其实现方式的不同,可进一步分成两类:
(1) 直接通信方式
(2) 间接通信方式

直接消息传递系统

直接消息传递系统

在直接消息传递系统中采用直接通信方式,即发送进程利用OS所提供的发送命令(原语),直接把消息发送给目标进程。

1)直接通信原语
(1) 对称寻址方式。
(2) 非对称寻址方式 

2) 消息的格式
在消息传递系统中所传递的消息,必须具有一定的消息格式。在单机系统环境中,由于发送进程和接收进程处于同一台机器中,有着相同的环境,所以消息的格式比较简单,可采用比较短的定长消息格式,以减少对消息的处理和存储开销。该方式可用于办公自动化系统中,为用户提供快速的便笺式通信。但这种方式对于需要发送较长消息的用户是不方便的。为此,可采用变长的消息格式,即进程所发送消息的长度是可变的。对于变长消息,系统无论在处理方面还是存储方面,都可能会付出更多的开销,但其优点在于方便了用户。 

3) 进程的同步方式
在进程之间进行通信时,同样需要有进程同步机制,以使诸进程间能协调通信。不论是发送进程还是接收进程,在完成消息的发送或接收后,都存在两种可能性,即进程或者继续发送(或接收)或者阻塞 

4) 通信链路
为使在发送进程和接收进程之间能进行通信,必须在两者之间建立一条通信链路。有两种方式建立通信链路。第一种方式是:由发送进程在通信之前用显式的“建立连接”命令(原语)请求系统为之建立一条通信链路,在链路使用完后拆除链路。 

信箱通信

1) 信箱的结构
信箱定义为一种数据结构。在逻辑上,可以将其分为两个部分:
(1) 信箱头
(2) 信箱体

2) 信箱通信原语
系统为邮箱通信提供了若干条原语,分别用于:
(1) 邮箱的创建和撤消。
(2) 消息的发送和接收。 

3) 信箱的类型
邮箱可由操作系统创建,也可由用户进程创建,创建者是邮箱的拥有者。据此,可把
邮箱分为以下三类:
(1) 私用邮箱。
(2) 公用邮箱。
(3) 共享邮箱。 

直接消息传递系统实例 

消息缓冲队列通信机制首先由美国的Hansan提出,并在RC 4000系统上实现,后来被广泛应用于本地进程之间的通信中。在这种通信机制中,发送进程利用Send原语将消息直接发送给接收进程;接收进程则利用Receive原语接收消息。

1. 消息缓冲队列通信机制中的数据结构
(1) 消息缓冲区。
(2) PCB中有关通信的数据项。

2. 发送原语
发送进程在利用发送原语发送消息之前,应先在自己的内存空间设置一发送区a,如图所示,把待发送的消息正文、发送进程标识符、消息长度等信息填入其中,然后调用发送原语,把消息发送给目标(接收)进程。发送原语首先根据发送区a中所设置的消息长度a.size来申请一缓冲区i,接着,把发送区a中的信息复制到缓冲区i中。为了能将i挂在接收进程的消息队列mq上,应先获得接收进程的内部标识符j,然后将i挂在j.mq上。由于该队列属于临界资源,故在执行insert操作的前后都要执行wait和signal操作。 

3. 接收原语
接收进程调用接收原语receive(b),从自己的消息缓冲队列mq中摘下第一个消息
缓冲区i,并将其中的数据复制到以b为首址的指定消息接收区内。 

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

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

相关文章

数字孪生技术的实用性究竟有多高?

数字孪生是将实际物理世界与数字虚拟世界相结合的创新方法,它为我们提供了一个全新的视角,带来了许多令人兴奋的前景。那么,数字孪生的实用性究竟有多高呢? 首先,数字孪生在工业领域展现出了巨大的实用潜力。通过在虚…

Oracle-创建PDB

Oracle-创建PDB 创建PDB的方式 从PDB$SEED新建PDB克隆已存在的PDB 本地PDB克隆到同一个CDB中将远程PDB克隆到CDB中将非CDB插入或克隆到CDB中通过插拔的方式创建PDB sql 命令语法 条件 CDB必须open并且read write模式连接CDB$ROOT 用户并且具有CREATEPLUGGABLEDATABASE系统权…

树状结构数据,筛选指定数据

问题描述: 应用场景和需求:对一个树状结构的数据,进行CRUD 时,想筛选出 树状结构数据中存在变动的部分。 操作步骤 准备需要的数据: 1.先拿到 你原来的树状结构数据 2.再筛选出 需要保留的数据集合id,也…

机器学习基础之《特征工程(4)—特征降维》

一、什么是特征降维 降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程 1、降维 降低维度 ndarry 维数:嵌套的层数 0维:标量,具体的数0 1 2 3... …

用了回不去的卷王机械键盘,看这些就够了

前几天出了一期不同价位鼠标推荐:外设圈彻底开卷,2023 下半年无脑入鼠标推荐表来了! 结果不少小伙伴儿留言,鼠标是有了,还缺一把趁手好用且高性价比的机械键盘,并强烈要求咱再出一期。 话不多说&#xff0…

Markdown格式说明

一、基本语法 1.1 标题 大标题 中标题 -----# 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 1.2 文本样式 *强调文本* _强调文本_**加粗文本** __加粗文本__标记文本~~删除文本~~> 引用文本H~2~O is是液体。2^10^ 运算结果是 1024。…

使用Python发送HTML格式的邮件

使用Python发送HTML格式的邮件 😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦!😄 …

业务中如何过滤敏感词

在我们访问网站的时候,如果发现我们发布的内容有色情暴力的东西等等,会屏蔽掉,这种行为就是过滤敏感词。 从技术层面实现起来,其实比较简单,因为我们输入的内容就是一个大型的字符串,我们要调用某些api来判…

【Vue3】Teleport 传送组件

Teleport 组件是 Vue.js 3 中引入的特性之一&#xff0c;它允许将组件的内容传送&#xff08;teleport&#xff09;到当前组件之外的目标位置&#xff0c;这在处理复杂的布局、模态框等方案时非常有用。 A.vue <template><div class"dialog"><heade…

SQL server 异地备份数据库

异地备份数据库 1.备份服务器中设置共享文件夹 2.源服务器数据库中添加异地备份代理作业 EXEC sp_configure show advanced options, 1;RECONFIGURE; EXEC sp_configure xp_cmdshell, 1;RECONFIGURE; declare machine nvarchar(50) 192.168.11.10 --服务器IP declare pa…

设备固定资产管理系统

资产管理是企业经营和发展的基础&#xff0c;特别是设备资产管理。适当的设备资产管理可以有效地提升企业的经营效率&#xff0c;为提高核心竞争能力提供高效的前提。 固资及设备管理系统&#xff08;EAM&#xff09;它是一种有效的固定资产管理模式&#xff0c;可以帮助企业更…

分布式应用:Zabbix 自动发现与自动注册

目录 一、理论 1.Zabbix 自动发现 2.Zabbix 自动发现部署 3.Zabbix 自动注册 4.Zabbix 自动注册部署 二、实验 1.Zabbix 自动发现部署 2.Zabbix 自动注册部署 三、总结 一、理论 1.Zabbix 自动发现 &#xff08;1&#xff09;原理 zabbix 自动发现(对于 agent2 是被…

爱校对-校对软件的重要性:减少错别字和语法错误的尴尬

校对软件在减少错别字和语法错误方面发挥着重要的作用&#xff0c;帮助避免尴尬情况的发生。以下是校对软件的重要性所在&#xff1a; 1.提高专业形象&#xff1a;新闻稿件是传递信息和建立声誉的关键工具。若存在大量的错别字和语法错误&#xff0c;会严重影响读者对媒体机构或…

探究使用HTTP代理ip后无法访问网站的原因与解决方案

目录 访问网站的原理是什么 1. DNS解析 2. 建立TCP连接 3. 发送HTTP请求&#xff1a; 4. 服务器响应&#xff1a; 5. 浏览器渲染&#xff1a; 6. 页面展示&#xff1a; 使用代理IP后访问不了网站&#xff0c;有哪些方面的原因 1. 代理IP的可用性&#xff1a; 2. 代理…

webshell免杀项目-ByPassGodzilla(一)

哥斯拉WebShell免杀生成工具 项目地址&#xff1a; https://github.com/Tas9er/ByPassGodzilla ㊙️友情提示 如果您的网站被恶意插入此后门&#xff0c;说明了两个问题&#xff1a; 1.你的站被日麻了 2.我对您的Diao站没有任何兴趣&#xff0c;只是有的Diao毛用工具不改密…

用条件格式美化图表,同事赞叹你的高超技巧

在工作中&#xff0c;我们经常需要制作图表来展示数据和趋势&#xff0c;但普通的图表可能显得平淡无奇。然而&#xff0c;通过巧妙运用条件格式&#xff0c;我们可以为图表增添美感和可读性&#xff0c;让同事们对你的技巧赞叹不已。本文将为您介绍如何利用条件格式来美化图表…

使用ResponseBodyAdvice做分页处理

目录 父pom文件 pom文件 配置文件 MyResponseBodyAdvice ResponseDto MyBatisConfig UsersController UsersMapper UserMapper.xml 结果 父pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/PO…

【JAVA】七大排序算法(图解)

稳定性&#xff1a; 待排序的序列中若存在值相同的元素&#xff0c;经过排序之后&#xff0c;相等元素的先后顺序不发生改变&#xff0c;称为排序的稳定性。 思维导图&#xff1a; &#xff08;排序名称后面蓝色字体为时间复杂度和稳定性&#xff09; 1.直接插入排序 核心思…

E1. PermuTree (easy version) Codeforces Round 890 (Div. 2) E1

题目大意&#xff1a; 给出一个n个点的树&#xff0c;所有点权a[i]构成一个n的排列&#xff0c;点权可以任意分配给点&#xff0c;问最多有多少对u,v满足a[u]<lca(a[u],a[v])<a[v] 2<n<5000 思路&#xff1a;首先&#xff0c;如果两个点的lca是他俩其中之一&…

Elasticsearch之kibana相关命令

1.中文分词器相关命令 2.拼音分词器相关命令