Linux-进程之间的通信

news2024/12/23 4:24:13


目录

​编辑

一.什么是进程之间的通信

二.进程之间的通信所访问的数据

三.进程之间的通信是如何做到的

四.基于内存文件级别的通信方式——管道

        1.什么是管道                

        2.管道的建立过程——匿名管道

                a.什么是匿名管道

                b.匿名管道特点:

                c.使用匿名管道的四种情况:

五.具有血缘关系的进程之间的通信的代码实现

六.使用匿名管道实现简易版本的进程池

七.匿名管道和我们之前在bash命令行中使用的 | 有什么关系

八.命名管道

九.使用命名管道通信并完成程序日志的打印

十.通过system V 共享内存实现的进程之间的通信

        1.什么是system V 共享内存

        2.从共享内存的申请到共享内存的使用

        3.共享内存的释放

        4.问题


一.什么是进程之间的通信

        定义:两个或多个进程之间实现数据层面的交互。

        进程之间的通信实现的成本是很高的,因为我们都知道在操作系统中,进程之间的是有独立性的。

二.进程之间的通信所访问的数据

        1.基本数据

        2.发送命令

        3.某种协议

        4.通知

三.进程之间的通信是如何做到的

        1.进程之间的通信必须让不同的进程之间看到同一份“资源”。

        2.这个“资源”是指特定形式的存储空间。

        3.这个特定形式的存储空间是谁来提供的:

                假设a:如果这个特定的存储空间是由进行通信的双方的其中一方提供的。

                                那么这个资源属于谁?    属于该进程独有的。

                                        那么此时我们在进行进程之间的通信那么势必会破会进程之间的独立性,这是个万万不可以的。

                假设b:如果这个特定的存储空间是又操作系统提供的。

                                在两个进程要发生进程之间的通信时,操作系统会为两者开辟一段第三方空间来满足进程通信的需要。

                                那么访问这个空间,进行通信,本质就是访问操作系统,进程代表的就是用户,“资源”从创建到使用到释放,这一系列过程都是由操作系统来提供系统级别的调用接口的。

                                从底层设计,从接口设计 都是要由操作系统独立设计的。

                                一般的操作系统都是有一个独立的通信模块-隶属于文件系统-----IPC通信模块

        4.关于进程通信是有标准的:system V (本机内部的通信)&& posix(网络之间的通信)。

四.基于内存文件级别的通信方式——管道

        1.什么是管道                

                管道是Linux由Unix那里继承过来的进程间的通信机制,它是Unix早期的一个重要通信机制。其思想是,在内存中创建一个共享文件,从而使通信双方利用这个共享文件来传递信息。由于这种方式具有单向传递数据的特点,所以这个作为传递消息的共享文件就叫做“管道”。

        2.管道的建立过程——匿名管道

                a.什么是匿名管道

        

                        这种使带有血缘关系的进程之间可以通信的管道称匿名管道。

                b.匿名管道特点:
                         只能用于具有共同祖先的进程(具有亲缘关系的进程)之间进行通信;通常,一个管道由一个进程创建,然后该进程调用fork,此后父、子进程之间就可应用该管道。
                        管道提供流式服务。
                        一般而言,进程退出,管道释放,所以管道的生命周期随进程。
                        一般而言,内核会对管道操作进行同步与互斥。
                                在读取管道的数据后,会将对应的数据变为可覆盖的数据。
                        管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道。

                c.使用匿名管道的四种情况:

                        读写端正常,管道如果为空,读端就会被阻塞。

                        读端慢,写端快

                                会一瞬间将管道文件写满,此时写端会被阻塞,然后读端在自己的用户级缓存区没满的前提下,有多少读多少。

                                管道文件的是有大小的:使用 ulimit -a 指令可以查看重要文件的规定。 

                        其中可以看到这个里面表明管道的大小是4kb,但是实际的管道大小是4kb吗?

                        我们将读端关闭,然后此时一直向管道写入一个字符:

                        我们发现:

                        此时管道文件的大小是64kb。不同的内核平台下这个大小不同

                        如何查看Linux的内核是什么版本:uname -r

                        那么我们上面查到的4kb是什么,实际上在我们进行读写时有一个大小是PIPE_BUF 这个大小是4kb,如果单次写入时写入的数据是小于PIPE_BUF的那么此时读写就是原子的,此时即使管道有数据,但是写端还没有写完,读端也不会从管道中读取数据。

                        读写端不正常

                              读正常,写不正常:

                                        此时读文件时文件中没有数据,read接口会识别到文件的结尾,所以什么都不会读到。

                              写端正常,但是读端关闭:

                                        此时写端在向管道文件中写入数据是没有意义的,而其操作系统也不会允许友这样的行为存在,此时操作系统会像进程发送型号,使进程退出。

五.具有血缘关系的进程之间的通信的代码实现

        Linux-模拟实现基于内存级文件的单向进程通信-CSDN博客

六.使用匿名管道实现简易版本的进程池

        Linux-使用管道实现简易版本的进程池-CSDN博客

七.匿名管道和我们之前在bash命令行中使用的 | 有什么关系

        eg:cat test.txt | head -10 | tail -5

                此时这里使用的管道就是匿名管道,这三个指令在启动为进程后,都有同样的父进程bash。

八.命名管道

        1.什么是命名管道

                命名管道就是创建在当前工作目录的一个系统级文件。

                命名管道是用于没有血缘关系的进程之间的通信,也是单向通信。

        2.如何定义命名管道

                使用mkfifo 加管道名称就可以创建一个命名管道。                

        命名管道和匿名管道除了适用对象不同其他的基本相同。

九.使用命名管道通信并完成程序日志的打印

        Linux-实现小型日志系统-CSDN博客

          

十.通过system V 共享内存实现的进程之间的通信

        1.什么是system V 共享内存

                共享内存就是由操作系统为进程之间想要通信在物理内存上所开辟的一段存储空间。

                

 

        2.从共享内存的申请到共享内存的使用

                a.进程向操作系统发出请求,希望操作系统为它开辟一段共享内存,以满足它通信的需求。

                b.操作系统接收进程发来的请求完成对共享内存的开辟。

                c.操作系统将在物理内存中开辟好的共享内存通过页表和发出请求的进程的进程地址空间进行建立链接。

                d.为了使发出请求的进程可以使用操作系统开辟好的共享内存,在建立关联时操作系统还会将共享内存在进程地址空间中的启始虚拟地址返回给进程。 

        3.共享内存的释放

                首先因该先去关联,然后在使用系统调用接口来释放共享内存。

         

        4.问题

                a.从共享内存的创建到共享内存的管理,都是又操作系统来完成的,为什么不能是进程自己完成。

                        因为共享内存如果是由进程之间创建的话,因为进程有独立性的原因,其他的进程是没有办法去访问它的空间的,此时就没有办法实现进程间的通信了。

                b.系统中会开辟很多的共享内存来实现不同进程之间的通信的需要,所以操作系统会将它们管理起来。  先描述在组织。

        5.代码实现通过system v共享内存实现的进程间的通信

                Linux-代码实现通过system v共享内存实现的进程间的通信-CSDN博客

        

        6.共享内存的特点

                a.共享内存没有同步和互斥的特点。

                b.共享内存是所有的进程之间通信速度最快的。

                c.共享内存中的数据由用户自己管理。

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

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

相关文章

IDEA中配置Git

Git 在IDEA中使用Git1 在IDEA中配置Git2 在IDEA中使用Git2.1在IDEA中创建工程并将工程添加至Git2.2 将文件添加到暂存区2.3 提交文件2.4 将代码推送到远程仓库2.5 从远程仓库克隆工程到本地2.6 从远程拉取代码2.7 版本对比2.8 创建分支2.9 切换分支2.10 分支合并 3 使用IDEA进行…

【开源】基于Vue.js的二手车交易系统

文末获取源码,项目编号: S 084 。 \color{red}{文末获取源码,项目编号:S084。} 文末获取源码,项目编号:S084。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块…

教程篇(7.2) 01. 介绍和初始访问 ❀ FortiAnalyzer分析师 ❀ Fortinet 网络安全专家 NSE5

在本课中,你将了解FortiAnalyzer的关键功能和概念,以及如何最初访问FortiAnalyzer。 FortiAnalyzer将日志记录、分析和报告集成到一个系统中,因此你可以快速识别和响应。 在本课中,你将探索上图显示的主题。 通过展示FortiAnalyze…

算能 MilkV Duo开发板实战——opencv-mobile (迷你版opencv库)的移植和应用

前言 OpenCV是一种开源的计算机视觉和机器学习软件库,旨在提供一组通用的计算机视觉工具。它用于图像处理、目标识别、人脸识别、机器学习等领域,广泛应用于计算机视觉任务。 OpenCV-Mobile是OpenCV库的轻量版本,专为移动平台(A…

基于ssm少儿编程管理系统源码和论文

idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 环境: jdk8 tomcat8.5 开发技术 ssm 基于ssm少儿编程管理系统源码和论文744 摘要 网络的广泛应用给生活带来了十分的便利。所以把少儿编程管理系统与现在网络相结合,利用java技术建设…

Kafka Connect :构建强大分布式数据集成方案

Kafka Connect 是 Apache Kafka 生态系统中的关键组件,专为构建可靠、高效的分布式数据集成解决方案而设计。本文将深入探讨 Kafka Connect 的核心架构、使用方法以及如何通过丰富的示例代码解决实际的数据集成挑战。 Kafka Connect 的核心架构 Kafka Connect 的核…

flex布局的flex为1到底是什么

参考博客:flex:1什么意思_公孙元二的博客-CSDN博客 flex:1即为flex-grow:1,经常用作自适应布局,将父容器的display:flex,侧边栏大小固定后,将内容区flex:1,内…

【Spring 源码】 贯穿 Bean 生命周期的核心类之 AbstractAutowireCapableBeanFactory

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

Liunx Centos 防火墙操作

liunx centos 防火墙 查看防火墙状态 systemctl status firewalld查看已经开放的端口 firewall-cmd --list-ports添加端口3306 firewall-cmd --zonepublic --add-port3306/tcp --permanent重启防火墙 firewall-cmd --reload数据库开放账号可以外网登陆 mysql -u root -p …

Matlab 用矩阵画图

文章目录 Part.I IntroductionChap.I 预备知识Chap.II 概要Chap.III 杂记 Part.II 用矩阵画图Chap.I 摸索过程Chap.II 绘制专业图Chap.III 矩阵转tiff Part.I Introduction 本文汇总了 Matlab 用矩阵画图的几种方式。 Chap.I 预备知识 关于 *.mat 文件 *.mat文件是 matlab 的…

Ribbon组件的负载均衡原理

原因背景 spring cloud的底层负载均衡是采用Ribbon组件,我们将user-service服务注册到eureka-server中,那么当我们在另一个服务的代码层面请求远程调用API接口http://user-service/users/5时,程序代码如何解析远程调用的user-service服务名转…

数据结构和算法-栈

数据结构和算法-栈 1. 栈的介绍 栈的介绍: 栈的英文为(stack)栈是一个先入后出的有序列表栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶,另一端为固…

从零开发短视频电商 在AWS SageMaker已创建的模型列表中进行部署

1.导航到 SageMaker 控制台。 2.在 SageMaker 控制台的左侧导航栏中,选择 “模型” 选项。 3.在模型列表中,找到您要部署的模型。选择该模型。 4.点击 “创建端点” 选项或者点击 “创建端点配置” 选项都可以进行部署。 选择创建端点进去后还是会进行…

【sgAutocomplete】自定义组件:基于elementUIel-autocomplete组件开发的自动补全下拉框组件(带输入建议的自动补全输入框)

特性&#xff1a; 1、支持本地保存选中过的记录 2、支持动态接口获取匹配下拉框内容 3、可以指定对应的显示label和字段组件key 4、自动生成速记符字段&#xff08;包含声母和全拼两种类型&#xff09;&#xff0c;增强搜索匹配效率 sgAutocomplete源码 <template><!…

机器学习模型评估指标

1.回归模型评估指标 (1).绝对误差 预测和实际之间误差的绝对值之和。 (2).均方误差 预测和实际之间距离之差平方和的均值 2.分类的评估准则 分类的评估标准很多&#xff0c;不同的评估标准侧重点不一样&#xff0c;我们不可能做到万事俱备&#xff0c;甚至有的指标是相互…

有效解决wordpress的502 Bad Gateway错误提示

摘要&#xff1a;最近有客户反映使用阿里云虚拟云主机&#xff0c;wordpress常提示502 Bad Gateway错误&#xff0c;网关错误是网站上遇到的常... wordpress的502 Bad Gateway错误如何修复&#xff1f; 第1步&#xff1a;偶发错误可尝试重新加载网站 偶尔出现流量突发爆增或是服…

【开源】基于JAVA语言的数字化社区网格管理系统

项目编号&#xff1a; S 042 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S042&#xff0c;文末获取源码。} 项目编号&#xff1a;S042&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、开发背景四、系统展示五、核心源码5…

电脑系统重装Win10专业版操作教程

用户想给自己的电脑重新安装上Win10专业版系统&#xff0c;但不知道具体的重装步骤。接下来小编将详细介绍Win10系统重新安装的步骤方法&#xff0c;帮助更多的用户完成Win10专业版的重装&#xff0c;重装后用户即可体验到Win10专业版系统带来的丰富功能。 准备工作 1. 一台正常…

刷题学习记录(文件上传)

[GXYCTF 2019]BabyUpload 知识点&#xff1a;文件上传.htaccessMIME绕过 题目直接给题目标签提示文件上传的类型 思路&#xff1a;先上传.htaccess文件&#xff0c;在上传木马文件&#xff0c;最后蚁剑连接 上传.htaccess文件 再上传一个没有<?的shell 但是要把image/pn…

【Proteus仿真】【51单片机】简易计算器

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使动态数码管、矩阵按键、蜂鸣器等。 主要功能&#xff1a; 系统运行后&#xff0c;数码管默认显示0&#xff0c;输入对应的操作数进行四则运算&#x…