『 Linux 』 进程间通信概述

news2024/11/28 22:31:11

文章目录

    • 什么是进程间通信
    • 为什么要有进程间通信
    • 如何进行进程间通信


什么是进程间通信

请添加图片描述

进程间通信(IPC)指的是在操作系统重,允许两个或者多个进程之间传递信息或者数据的机制;

进程是操作系统重独立运行的实体,即进程间具有独立性,存在自己的地址空间;

因此进程间默认无法直接访问彼此的内存空间,其通信成本会较高;

IPC提供一种方式使得互相独立的进程能够交换数据并进行通信和数据共享;


为什么要有进程间通信

请添加图片描述

  • 基本数据交换

    进程间通信允许不同的进程交换基本的数据信息,例如用户输入,计算结果等;

  • 发送命令

    通过IPC,一个进程可以向另一个进程发送命令或请求知道其执行特定操作;

  • 某种协同

    多个进程通过IPC机制协同工作可以完成独立进程无法完成的复杂工作;

  • 数据传输

    IPC提供了一种机制使得进程可以安全有效的进行数据传输;

  • 资源共享

    多个进程可能需要访问和修改同一份资源;

  • 通知事件

    进程间通信允许进程相互通知重要的事件发生,如系统错误,任务完成等;

  • 进程控制

    IPC机制可以用于控制其他进程的行为,例如启动或停止某个进程或者调整其执行的优先级;


如何进行进程间通信

请添加图片描述

  • 进程间通信的本质

    进程间通信的本质是必须让不同的进程看到同一份"资源";

    这里的"资源"通常指数据或者信息,在操作系统中,数据和信息的存储和交换的媒介一般是内存空间;

    而这个内存空间不一定是直接的物理内存访问;

    IPC机制通过多种形式使得进程间可以共享和传递信息,这包括但不限于直接的内存共享;

进程间通信的内存空间的提供者必须是操作系统而不能是进程,原因主要为以下几点:

  • 安全性

    进程通常在操作系统分配的隔离环境中运行,可以防止一个进程访问或修改另一个进程的代码数据;

  • 隔离性

    操作系统为每个进程提供了一个独立的地址空间,以保证进程间的独立性和稳定性;

    如果进程间通信的内存空间由进程自身提供则可能打破这种隔离性;

  • 资源管理

    操作系统负责管理所有的软硬件资源,拥有全局的视角和控制权;

    而单个进程并不具备这种特性,操作系统数据进程的上级所以操作系统能观察到所有的进程的当前状态但进程无法观察到操作系统的状态;

  • 独立性

    进程间是相互独立的,每个进程存在自己独有的进程地址空间;

    如果这块公共区域是由进程自行提供,那么将会破坏进程间的独立性;

操作系统所提供的资源的媒介(空间)可以被视作一种"第三方空间";

而这种第三方空间是由操作系统提供的,当进程要对这个"第三方空间"进行写入或是读取数据时本质上是在访问操作系统;

进程为用户层的结构,为了保证安全,用户无法直接访问操作系统,即进程无法直接访问操作系统;

故操作系统必须提供一种机制即系统调用(System Calls)来允许用户层的进程与"第三方空间"中的资源进行安全互动;

即进程对这个媒介的 创建 - 使用(一般情况下) - 释放 都是利用系统调用接口;

  • 资源的管理

    当存在大量进程且进程与进程间都需要通信时将会存在大量这样的 “第三方空间” ;

    操作系统将会对这些资源进行管理 —— “先描述,再组织” ;

在操作系统中进程间通信(IPC)被作为一个独立的通信模块并挂接在文件系统当中;

  • 进程间通信的标准

    进程间通信作为一种模块同样也存在标准;

    常用的标准有:

    • POSIX IPC标准
    • System V IPC标准
    • 文件系统IPC标准

操作系统提供了多种IPC机制,包括但不限于:

  • 管道(Pipes)

    允许一个进程与另一个进程直接通信,数据流是单向的;

  • 消息队列(Message Queues)

    允许不同的进程发送和接收消息,是一种异步通信方式;

  • 信号(Signals)

    一种用于通知接收进程某个事件已经发生的简单方式;

  • 共享内存(Shared Memory)

    通过映射一段能被多个进程访问的内存区域以时间线进程间的数据共享;

  • 套字节(Sockets)

    主要用于不同主机上的进程间通信,支持TCP/IP等网络协议;

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

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

相关文章

多模块开发

简介 Git 通过子模块来解决复用模块的问题。 submodule允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。而subtree可以将子模块合并到主模块由主模块完全管理。 git subModule Git地址&#…

MySQL----利用Mycat配置读写分离

首先确保主从复制是正常的,具体步骤在MySQL----配置主从复制。MySQL----配置主从复制 环境 master(CtenOS7):192.168.200.131 ----ifconfig查看->ens33->inetslave(win10):192.168.207.52 ----ipconfig查看->无线局域网适配器 WLA…

RabbitMQ 开发指南

连接RabbitMQ 连接方式一: 也可以选择使用URI的方式来实现 连接方式二: Connection接口被用来创建一个Channel,在创建之后,Channel可以用来发送或者接收消息。 Channel channel conn.createChannel();使用交换器和队列 声明…

React 中的服务器渲染组件

在前后分离架构以前,所有的 Html 业务都是后端渲染,返回前前端显示,后端渲染把前后端逻辑耦合在一起,增大系统的复杂度,不易于扩展。React 中的 Server组件,准确的说是服务器进行渲染,无论是什么…

物联网边缘网关在物联网应用中有哪些优势?天拓四方

随着物联网技术的快速发展,越来越多的设备接入网络,数据交互日益频繁,对数据处理和传输的要求也越来越高。在这样的背景下,物联网边缘网关应运而生,以其低延迟、减少带宽消耗、提高数据质量和安全性等优势,…

小林图解系统-三、操作系统结构

Linux 内核 vs Windows 内核 内核 作为应用连接硬件设备的桥梁,保证应用程序只需要关心与内核交互,不需要关心硬件的细节 内核具备四个基本能力: 管理进程、线程,决定哪个进程、线程使用CPU,也就是进程调度的能力&a…

ArcGIS查找相同图斑、删除重复图斑

​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 这次是上次 今天分享一下,很重要却被大家忽略的两个工具 这两个工具不仅可以找出属性…

【总线】AXI4第二课时:深入AXI4总线的基础事务

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣,那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者,AXI4以其高性能和高度可扩展性,成为了现代电子系统中不可或缺的通信桥梁…

PHP转Go系列 | 条件循环的使用姿势

大家好,我是码农先森。 条件 在 PHP 语言中条件控制语句,主要有 if、elseif、else 和 switch 语句 // if、elseif、else 语句 $word "a"; if ($word "a") {echo "a"; } elseif ($word "b") {echo "b&…

【论文笔记】LoRA LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

题目:LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 来源: ICLR 2022 模型名称: LoRA 论文链接: https://arxiv.org/abs/2106.09685 项目链接: https://github.com/microsoft/LoRA 文章目录 摘要引言问题定义现有方法的问题方法将 LORA 应用于 Transformer 实…

无源编缆测尺助力料场实现自动化堆取料作业

随着工业4.0时代的到来,智能化、无人化成为现代工业发展的重要趋势。在港口码头、钢铁冶金、焦化等高耗能行业中,如何实现物料的精准测量与无人化操作,成为企业提高生产效率、降低人工成本的关键。武汉市微深节能科技有限公司凭借其先进的分段…

【面试干货】抽象类与接口的区别

【面试干货】抽象类与接口的区别 💖The Begin💖点点关注,收藏不迷路💖 在Java编程中,抽象类和接口是两个非常重要的概念,它们都为代码的可扩展性和复用性提供了基础。但是,它们之间也有一些明显…

class的流光效果

效果图&#xff1a; 代码示例 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&g…

React路由笔记(函数组件,自用)

配置 npm i react-router-dom基本使用 目录结构 在src中创建page文件夹放置各页面组件&#xff0c;router中放置路由 1、router中配置路由 在/router/index.js中&#xff0c;使用createBrowserRouter配置路由。 import { createBrowserRouter } from "react-router…

[Python人工智能] 四十六.PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解合如何利用keras和tensorflow构建基于注意力机制的CNN-BiLSTM-ATT-CRF模型,并实现中文实体识别研究。这篇文章将介绍PyTorch入门知识。前面我们的Python人工智能主要以TensorFlow和Keras为主,…

Flutter第十四弹 抽屉菜单效果

目标&#xff1a; 1.怎么构建抽屉菜单效果&#xff1f; 2.抽屉菜单怎么定制&#xff1f; 一、抽屉菜单 侧滑抽屉菜单效果 1.1 抽屉菜单入口 Flutter 的脚手架Scaffold&#xff0c;默认提供了抽屉菜单效果入口。 主页面采用一个简单的页面&#xff0c;侧滑菜单首先使用一个I…

三星与SK海力士:以混合键合技术引领3D DRAM革新之路

在高速缓存内存&#xff08;HBM&#xff09;领域持续领跑的三星与SK海力士&#xff0c;正以混合键合技术为突破口&#xff0c;开启3D DRAM技术的新纪元。这一战略转型不仅预示着存储技术的深度革新&#xff0c;更体现了两大半导体巨头在提高集成度、优化性能与成本上的不懈追求…

【计算机网络篇】数据链路层(11)在数据链路层扩展以太网

文章目录 &#x1f354;使用网桥在数据链路层扩展以太网&#x1f95a;网桥的主要结构和基本工作原理&#x1f388;网桥的主要结构&#x1f50e;网桥转发帧的例子&#x1f50e;网桥丢弃帧的例子&#x1f50e;网桥转发广播帧的例子 &#x1f95a;透明网桥&#x1f50e;透明网桥的…

图论——代码随想录打卡

1 DFS深度搜索算法 深度优先搜索算法是从一个方向去进行搜索&#xff0c;直到遇到走不下去的终点&#xff0c;再进行回溯更换方向&#xff0c;重新进行搜索。因此有回溯也就意味着存在递归&#xff1a; void dfs(参数&#xff09;{处理节点dfs(图&#xff0c;选择的节点)回溯…

Hi3861 OpenHarmony嵌入式应用入门--0.96寸液晶屏 iic驱动ssd1306

使用iic驱动ssd1306&#xff0c;代码来源hihope\hispark_pegasus\demo\12_ssd1306 本样例提供了一个HarmonyOS IoT硬件接口的SSD1306 OLED屏驱动库&#xff0c;其功能如下&#xff1a; 内置了128*64 bit的内存缓冲区&#xff0c;支持全屏刷新;优化了屏幕刷新速率&#xff0c;…