Linux传统跨进程通信原理

news2025/6/20 14:51:05

文章目录

  • 前言
  • 一、进程隔离
  • 二、进程空间划分:用户空间(User Space)/内核空间(Kernel Space)
  • 三、系统调用:用户态与内核态
  • 四、Linux下传统IPC跨进程通信原理
    • 1、发送进程通过系统调用,将需要发送的数据拷贝到Linux进程的内核空间中的缓存区(数据拷贝1次,通过copy_from_user())
    • 2、内核服务程序唤醒接收进程的接收线程,通过系统调用将数据发送到接收进程的用户空间中,最终完成数据发送(数据拷贝2次,通过copy_to_user()),最终实现进程间的用户空间的数据交互
    • 3、缺点

前言

Linux中跨进程通信涉及到一些基本概念:

  • 进程隔离
  • 进程空间划分:用户空间(User Space)/内核空间(Kernel Space)
  • 系统调用:用户态/内核态

一、进程隔离

操作系统中,进程与进程间内存是不共享的。两个进程就像两个平行的世界,A 进程没法直接访问 B 进程的数据,这就是进程隔离的通俗解释。A 进程和 B 进程之间要进行数据交互就得采用特殊的通信机制:进程间通信(IPC)。

进程隔离为了保证 安全性 & 独立性,一个进程不能直接操作或者访问另一个进程,即Android的进程是相互独立、隔离的

二、进程空间划分:用户空间(User Space)/内核空间(Kernel Space)

现在操作系统都是采用的虚拟存储器,对于 32 位系统而言,它的寻址空间(虚拟存储空间)就是 2 的 32 次方,也就是 4GB。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也可以访问底层硬件设备的权限。为了保护用户进程不能直接操作内核,保证内核的安全,操作系统从逻辑上将虚拟空间划分为用户空间(User Space)和内核空间(Kernel Space)。针对 Linux 操作系统而言,将最高的 1GB 字节供内核使用,称为内核空间;较低的 3GB 字节供各进程使用,称为用户空间。

简单的说就是,内核空间(Kernel)是系统内核运行的空间,用户空间(User Space)是用户程序运行的空间。为了保证安全性,它们之间是隔离的。

一个进程空间分为 用户空间 & 内核空间(Kernel),即把进程内 用户 & 内核 隔离开来
1、进程间,用户空间的数据不可共享,所以用户空间 = 不可共享空间
2、进程间,内核空间的数据可共享,所以内核空间 = 可共享空间
所有进程共用1个内核空间

在这里插入图片描述

三、系统调用:用户态与内核态

虽然从逻辑上进行了用户空间和内核空间的划分,但不可避免的用户空间需要访问内核资源,比如文件操作、访问网络等等。为了突破隔离限制,就需要借助系统调用来实现。系统调用是用户空间访问内核空间的唯一方式,保证了所有的资源访问都是在内核的控制下进行的,避免了用户程序对系统资源的越权访问,提升了系统安全性和稳定性。

Linux 使用两级保护机制:0 级供系统内核使用,3 级供用户程序使用。

当一个任务(进程)执行系统调用而陷入内核代码中执行时,称进程处于内核运行态(内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。

当进程在执行用户自己的代码的时候,我们称其处于用户运行态(用户态)。此时处理器在特权级最低的(3级)用户代码中运行。

系统调用主要通过如下两个函数来实现:

copy_from_user() //将数据从用户空间拷贝到内核空间
copy_to_user() //将数据从内核空间拷贝到用户空间

在这里插入图片描述

四、Linux下传统IPC跨进程通信原理

1、发送进程通过系统调用,将需要发送的数据拷贝到Linux进程的内核空间中的缓存区(数据拷贝1次,通过copy_from_user())

2、内核服务程序唤醒接收进程的接收线程,通过系统调用将数据发送到接收进程的用户空间中,最终完成数据发送(数据拷贝2次,通过copy_to_user()),最终实现进程间的用户空间的数据交互

在这里插入图片描述

3、缺点

  • 性能低下,一次数据传递需要经历:内存缓存区 --> 内核缓存区 --> 内存缓存区,需要 2 次数据拷贝;
  • 接受数据的缓存要由接收方提供,但接收方却不知道到底要多大的缓存才满足需求(一般解决方法:开辟尽可能大的空间 或者先调用API接收消息头获得消息体大小,再开辟适当的空间接收消息体。但前者浪费空间,后者浪费时间)

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

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

相关文章

百度智能云千帆大模型平台 2.0 产品技术解析

本文整理自 2023 年 9 月 5 日百度云智大会 - 智能计算&大模型技术分论坛,百度智能云 AI &大数据平台总经理忻舟的主题演讲《百度智能云千帆大模型平台 2.0 产品技术解析》。 这是关于技术主题的论坛,我首先问大家三个开发者的小问题。 第一个问…

tez作业运行慢

文章目录 问题现象:排查思路查看task运行概况查看map和reduce container的日志初步结论 继续排查container数量差异大分片计算异常 结论 问题现象: 每天调度的一个任务在某天突然运行时长多了好几倍,平时30m左右,那天运行了4个小…

Ubuntu 22.04‘Temporary failure resolving‘ 解决方案

终极解决方案 首先安装resolvconf sudo apt-get install resolvconf 使用 cd /etc/resolvconf/resolv.conf.d/ 进入文件夹,使用 ls 查看目录,会显示 base head tail 使用 sudo vim base 编辑base文件, 进入时为空,点击 i 添加 …

【架构艺术】(零) 环境搭建

写在前面 今天尝试了如systemC,Chisel,MyHDL等方式来进行功能仿真,并生成波形到Wavedrom格式,后来发现对于学习这些简单架构,还是脑子里面根据规则进行仿真或者是编写verilog代码进行仿真即可。 所以我们的环境依赖只有:安装waved…

【PostgreSQL启动,停止命令(重启)】

找到 /usr/lib/systemd/system文件夹路径看是否包含 postgresql服务 关闭服务: systemctl stop postgresql-12.service启动服务 systemctl start postgresql-12.service重启服务 systemctl restart postgresql-12查看状态 systemctl status postgresql-12.servi…

区分Cookie,Session,Token

Cookie 由于HTTP 协议是一个无状态协议,客户端向服务器发请求,服务器返回响应。并且你每次都要输入账号和密码进行登录,对于用户来说非常的麻烦!这种背景下,就产生了 Cookie cookie 存储在客户端: cookie…

Essential Steps in Natural Language Processing (NLP)

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

C语言 | 浮点数在内存中存储方式

浮点数其实在内存中也是以2进制的形式存储的,但是它不是以原码、反码、补码的形式存储的。 常见的浮点数: 3.14159 1E10【科学计数法1.0*10^10】 eg:1.2312.3*10^-10.123*10^1 浮点数家族包括:float、double、long double类型…

C语言水平测试题 过关斩将(3)辗转相除法,前n项求和,整数的正序分解,求最大公约数

我的个人主页:☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位 👍点赞 ⭐收藏 📝评论 我的专栏:C语言基础语法(超详细)_☆光之梦☆的博客-CSDN博客(这…

Linux 部署 GitLab idea 连接

概述 GitLab 是一个开源的代码管理平台,使用 Git 作为版本控制工具,提供了 Web 界面和多种功能,如 wiki、issue 跟踪、CI/CD 等。 GitLab 可以自托管或使用 SaaS 服务,支持多种操作系统和执行器。 GitLab 可以帮助软件开发团队…

有 AI,无障碍,AIoT 设备为视障人群提供便利

据世界卫生组织统计,全球共 22 亿人视力受损,包含 2.85 亿视障人群和 3,900 万全盲人群。而且,这一数字将随老龄化加剧不断增加。 虽然视障人群面临着诸多不便,但是针对视障人群的辅助设备却存在成本高、维护困难、操作复杂等问题…

小流域洪水分析模拟预报设计及代码实现

应用说明: 利用无人机、卫星等技术,获取小流域洪水模拟分析所需的数据,并将其与模型进行结合,提高模拟精度; 探索小流域洪水模拟分析与城市规划、土地利用等方面的关系; 小流域河流洪水模拟计算分析是一项…

Java编程第9讲——CountDownLatch、CyclicBarrier和Semaphore(万字详解)

在JDK的并发包(JUC)里提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier和Samaphore工具类提供了一种并发流程控制的手段,这同样也是面试和工作中的一个重要知识点,本文将从它们的定义、常用方法、代码示例及核心源…

STM32Cube高效开发教程<基础篇>(一)----概述

一、 STM32系列器件和开发工具发展历史 1.1 开发工具发展史 2014年HAL/LL库和STM32Cube是ST公司STM32Cube计划的产物,旨在提高开发效率。2019年4月,ST公司退出自己的IDE软件STM32CubeIDE,完善了STM32Cube生态系统。 1.2 STM32系列器件 1.3 器件驱动库 标准外设库( Standar…

Python Django 之连接 Mysql 数据库详解

文章目录 1 概述1.1 Mysql 下载和安装1.2 菜单目录 2 ORM 框架2.1 连接 Mysql 模块:mysqlclient2.2 创建数据库2.3 连接 Mysql2.4 创建表2.5 增删改查 3 扩展3.1 ERROR:2026, SSL connection error: unknown error number 1 概述 1.1 Mysql 下载和安装 …

windows安装nvm

源代码 下载 下一步一下步安装即可 检查是否安装成功 nvm出现上面的代码即可安装成功 常用命令 查看目前安装的node版本 nvm list [available]说明没有安装任何版本,下面进行安装 nvm install 18.14使用该版本 node use 18.14.2打开一个新的cmd输入node -…

Self-Instruct

本篇工作利用LLM的生成能力,来产生大量指令数据集(指令、输入、输出),无需人工标注数据。 其中,在对任务判别的时候,需要区分是输出优先还是输入优先: 输入优先没问题,符合人类直觉…

面试题:说说Java线程的状态及转换

文章目录 为何要了解Java线程状态Java线程状态转换图Java线程有哪些状态?关于wait()放在while循环的疑问BLOCKED 和 WAITING 状态的区别和联系 为何要了解Java线程状态 线程是 JVM 执行任务的最小单元,理解线程的状态转换是理解后续多线程问题的基础。 …

加持智慧医疗,美格智能5G数传+智能模组让就医触手可及

智慧医疗将云计算、物联网、大数据、AI等新兴技术融合赋能医疗健康领域,是提高医疗健康服务的资源利用效率,创造高质量健康医疗的新途径。《健康中国2030规划纲要》把医疗健康提升到了国家战略层面,之后《“十四五”全面医疗保障规划》等一系…

最新AI写作创作系统源码ChatGPT源码,支持AI绘画/支持OpenAI-GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统,支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…