微核进程间通信

Linux——进程间通信 之前写的代码都是单进程的。是无法使用并发能力,并且无法实现多进程协同传输数据,同步执行流,消息通知等进程间通信不是目的,而是一种手段。进程间通信的技术背景进程是具有独立性的。虚拟地址空间+页表。保证进程运行的独立性(进程内核数据结构+进程的代码和数据)通信成本比较高。如何理解进程间通信?进程运行具有独立性!——进程想通信,难度比较大——进程间通信的本质:需要中间媒介,先让不同的进程看到同一份资源(内存空间)所谓的进程看到同一块“内存”,属于哪一个进程? 阅读详情


前言

微内核所做的是将原本运行在内核态的一些功能剥离出来,单独以系统服务的形式运行在用户态,比如内存管理,文件系统等。很多系统调用最终由系统服务处理,因而进程间通信性能是评价系统性能的重要指标。

一、IPC设计

几种通信设计

  • Mach 端口-消息,端口隔开进程其本质是个消息队列,采用发送监听机制,发送的消息中承载了接收者如何建立下一级端口。(建立通信连接:通过进程间通信来传递端口的思想被后来的大部分微内核继承)
  • L4 围绕进程间通信设计的微内核,内核只保留了基本功能,包含地址空间、线程、进程间通信等,尽量减少内核代码。

就L4系列的详细叙述

1. L4消息传递:数据传输性能

以减少数据拷贝为目的,L4按消息长度将消息分为长消息、短消息等;以消息传递某些信息,seL4以消息传递Capability。

  • 短消息使用寄存器传参,实现零拷贝。

发送进程将参数放置在寄存器中,进入内核态时,内核从发送者的上下文切换到接收者的上下文,但保留存放在寄存器中的参数。缺点是收到硬件的寄存器数量限制,可用寄存器数量也受系统调用ABI数量的影响。

  • 长消息通过内核辅助完成传递: 一般情况为两次拷贝,发送者用户态到内核态缓冲区,内核态缓冲区到接收者用户态

一次拷贝的优化:每个进程在其内核地址空间预留一段区域作为临时缓冲区,进程间并不共享内核段的临时缓冲区。如果将发送者进程的内核缓冲区的虚拟空间映射到接收者进程的用户态物理内存区域。拷贝一次就直接保存到了接收者进程。

避免上下文切换:消息传输接口层面,长消息可以在单词调用中指定多个缓冲区。引入的问题:拷贝本身在内核态,缺页异常时(发送者接收者都可能缺页)的页管理程序又在用户态,用户态页处理完成后内核需要重新建立原始的系统调用上下文。

一个演进方向是通信进程双方建立共享内存区,进程自己负责传输大量数据,避免内核参与。

2. L4控制流转移:控制流切换性能

调度的不确定性会影响IPC的时延

惰性调度:只刷新TCB中线程的状态,而不把线程从调度队列移除。
直接进程切换:将调度程序从控制流转移的关键路径中移除,直接完成从调用者到被调用者的切换。

3. L4权限检查:capability

直接通信场景,接收者进程负责检查请求者的权限很有可能会受到拒绝服务攻击DDOS。大多采用间接通信场景,该场景下,微内核组件可以使用capability权限机制解决鉴权问题。其中,capability时对内核对象(对内核的一切管理结构如IPC,TCB等的抽象)的索引+权限。

微内核在内核中为每个通信连接维护一个IPC内核对象,包括接收者,发送者,缓冲区等等信息。
当发送者进程要通信时,需要告诉内核一个特定的capability从而发起通信,内核检测capability的正确性及其权限,通过capability找到接收者。
这意味着:两个进程通信前,需要通过命名服务等方式获取到对应的capability。

二、LRPC迁移线程模型

Lightweight Remote Procedure Call 轻量级远程过程调用

  • 简化控制流切换,客户端线程执行服务端代码
  • 简化数据传输,共享参数栈和寄存器
  • 简化接口,减少序列化开销
  • 优化并发,避免共享的全局数据结构

1. 允许被调用者运行在调用者的上下文中

内核不阻塞调用者线程,让调用者执行被调用者代码,整个过程被调用者线程不涉及被唤醒,被调用者像代码的提供者。
内核不会完整的切换进程的上下文,只切换进程的地址空间以及系统的状态。这样就不会涉及线程切换、优先级切换,不用调度器参与,减少了内核调度的时间开销,简化了内核的IPC处理。

2. LRPC 同步的进程间通信设计

[参数栈与寄存器] 内核为每一个LRPC分配好一个参数栈,同时映射到客户端进程和服务端进程的地址空间,在通信时客户端进程只需要将参数准备到参数栈即可,不需要内核做拷贝。整个过程与函数调用的参数准备相似,与L4的短消息类似,通信时不会切换通用寄存器,直接使用当前的通用寄存器。可见,寄存器+参数栈一起构成了,LRPC通信时的数据传递(寄存器不足时由参数栈补充)。

[通信连接的建立过程] 当client申请与server侧建立连接时,内核会分配参数栈和连接记录,并返回给客户端一个绑定对象,之后客户端通过该绑定对象发起通信。
其中,连接记录类似于函数的返回地址,当服务端执行完需要返回时,内核从连接记录中获取返回信息。

总结

以上内容多参考《现代操作系统:原理与实现》,仅供个人学习使用。

参考

陈海波老师《现代操作系统:原理与实现》 机械工业出版社

STM32MP157 异核通信 阅读详情

相关推荐

lrpc

介绍 lrpc是一种高性能,高可扩展性的Java RPC框架,RPC,即远程过程调用(远程过程调用),调用远程计算机上的服务,就像调用本地方法一样。RPC可以很好的解压缩系统,对于服务开发者而言,屏蔽了不断的网络通信细节,从而更专注于业务自身逻辑实现。 lrpc架构 此项目总体架构如下: 服务提供端服务器向注册中心注册服务,服务消费者客户通过注册中心拿到服务相关信息,然后再通过网络请求服务提供端服务器。 特性 注释广泛详细,并在注释中添加了一些知识点,适合阅读学习(实际项目上不建议写这么啰嗦的注释,代码表明自己用意就好。) 客户端使用TCP长连接(在多次调用共享连接) TCP心跳连接检测 支持多种网络传输方式(支持基于javaIO方式的双重样式传输,支持基于Netty的Reactor模型,推荐用外壳) 支持流控 初步调用,支持Future机制,使用CompletableFuture接受服

【亲测免费】 LRPC:轻量级远程过程调用框架,打造高效微服务架构

LRPC:轻量级远程过程调用框架,打造高效微服务架构 项目简介 LRPC 是一个简洁而强大的轻量级远程过程调用(Remote Procedure Call)框架,由 CCCLL 开发并维护。它旨在简化微服务间的通信,提高开发效率和系统的可扩展性。该项目在 上开源,欢迎开发者们参与到项目的贡献和使用中。 技术分析 1. 高效序列化与反序列化 LRPC 使用 JSON 格式进行数据传输,这使得它具有...

gitblog_00030的博客 946

微内核L4 Iguana资料汇总

微内核l4和iguana的资料,介绍,用户手册等。

SeL4 : 三 、内核内存分配与IPC

除了硬件专用的以外,内核本身不要求任何的资源限制(虚拟ASIDs的处理利用了固定数量的地址空间,这一限制将在后续的版本中移除),因此也就避免了很多通过消耗资源实施的拒绝服务攻击。创建新的内核对象时,新创建的能力将作为原始未分配内存对象的子能力插入到CDT中。目前所描述的模型足以让应用程序分配内核对象,在客戶应用程序之间分配权限,并获得由这些对象提供的各种不同的内核服务。撤销内核对象的最后一个能力将触发现在无人引用对象上的销毁操作,这只需清除它与其他对象及内核之间的任何内核依赖项。内核跟踪能力派生,即,由。

warmmingm的博客 1085

基于Autoware制作高精地图(一)

基于Autoware制作高精地图(一) ​开始进入正题,也是最近在忙的一件事,制作高精地图。 高精地图的制作大概分为以下四个流程(不一定完全正确): 1.构建点云地图; 2.点云地图标注; 3.制作OpenDrive地图; 4.地图存储索引。 这篇文章主要讲解如何构建点云地图。 首先我们要有一段自己录制的激光雷达点云数据,这里推荐大家采用Velodyne16线激光雷达,因为这里我们构建的点云底图是三维的,而采用Velodyne而不是速腾聚创(rslidar)等其他品牌的原因是Autoware里面有一个选项是

weixin_44570248的博客 7797

Python与CAD系列基础篇(十)图形复制、移动、删除

①通过pyautocad连接AutoCAD进行处理②通过ezdxf处理dxf格式文件。进行图形复制、移动、删除的方法。pyautocad方式。pyautocad方式。

weixin_43894929的博客 2210

操作系统微内核架构研究

微内核是操作系统内核的一种,在工控系统、嵌入式系统、实时系统等领域发挥着重要作用。本文较为全面地研究了微内核技术的各个方面,包括微内核的定义、微内核的体系架构、微内核的发展历史、微内核的特点、微内核的应用场景,以及麒麟软件所进行的部分研究工作。

sillysunny的博客 9523

华为OD机试 - 机器人活动区域(Python/JS/C/C++ 双机位C卷 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可在网格间移动问题:求机器人可活动的最大范围对应的网格点数目。说明:1)网格左上角坐标为 (0, 0),右

学Java,找哪吒 1432

QNX IPC机制

文章目录QNX微内核介绍Synchronous message passingMessage copyingChannels and connectionsPulses优先级继承与消息Message-passing APIRobust implementations with Send/Receive/ReplyEventsSignalsPOSIX message queuesShared Mem...

weixin_44280688的博客 4052

微信小程序数据采集实战:抓包+接口分析+动态数据全流程

微信小程序爬虫虽然比普通网页爬虫复杂,但只要掌握了正确的方法,其实并没有想象中那么难。核心思路就是:先绕过证书校验抓包,然后反编译小程序找到加密逻辑,最后用Python模拟相同的加密和解密过程。需要特别提醒的是,本文仅供技术研究使用。请遵守《网络安全法》和相关法律法规,不要爬取他人的敏感数据,不要将爬虫技术用于非法用途。尊重他人的知识产权和数据安全,才能让技术发挥真正的价值。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1092

告别手动查文献!用Claude Haiku 4.5一键帮你检索+插入参考文献,科研效率直接翻倍(附实操演示+AI提示词)

以下是我的论文段落内容与参考文献列表。以下是我论文段落内容【粘贴论文段落】,请根据每个段落的主题自动检索近五年内的高相关学术文献(以真实DOI或可查询来源为准),要求:1)为每个段落匹配2–3条最相关的文献;另一种是你没有现成的文献列表,需要AI能够帮你检索,筛选输出合适的参考文献列表,并将其正确插入至段落中。选择完成后,先让它检索文献,我设计了一段AI提示词,让Haiku 4.5模型围绕研究主题,给我在各大数据库搜索近五年的文献,并以表格的形式输出文献的核心信息,确保DOI号能直接跳转到原文。

qq_64378896的博客 407

【Linux】进程间通信

目录 1. 进程间通信 1.1. 进程间通信的目的 1.2. 如何实现进程间通信 2. 管道通信 2.1. 匿名管道 2.1.1 创建匿名管道 2.1.2 . 深入理解匿名管道 2.2. 命名管道 2.2.1. 创建命名管道 3. system V 标准进程间通信 3.1. 共享内存 3.1.1. 实现原理 3.1.2. 代码实现 3.2. 消息队列(了解) 3.2.1 实现原理 3.3. 信号量(了解) 3.3.1. 实现原理 1. 进程间通信 1.1.

Edward_Asia的博客 1万+

PointNet++改进策略 :模块改进 | x-Conv | PointCNN, 结合局部结构与全局排列提升模型性能

这篇论文介绍了一种名为PointCNN的方法,旨在从点云(point cloud)数据中学习特征。传统卷积神经网络(CNN)在处理规则网格数据(如图像)时非常有效,但由于点云是无序且不规则的,直接在其上应用卷积操作会导致形状信息丢失,并对点的排列顺序敏感。为了解决这一问题,论文提出了一种X-Conv操作。该方法通过学习一种来重新排列点云中的点并加权输入特征。然后,将典型的卷积操作应用于转换后的特征。这种方法将传统的 CNN 扩展到点云特征学习,并命名为PointCNN。

u012901740的博客 2300

进程间通信(IPC)介绍

一.为什么需要进程间通信 1).数据传输 一个进程需要将它的数据发送给另一个进程。 2).资源共享 多个进程之间共享同样的资源。 3).通知事件 一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件。 4).进程控制 有些进程希望完全控制另一个进程的执行(如Debug进程),该控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变。 二.什么是进程间通信 首先了解几个名词: 1. 进程隔离 进程隔离是为保护操作系统中进程互不干扰而设计的一组不同硬...

weixin_42005898的博客 1万+

使用SSC添加大量的SDO条目

使用SSC添加大量的SDO条目 SSC用表格添加SDO,PDO部分必须指定到0x1600和0x1A00分配TxPdo和RxPdo映射,在0x1C12和0x1C13分别分配到SM2和SM3。在0x6000和0x7000未指定的entry就是SDO部分。

PI_sunyang的博客 3166

光伏微电网蓄电池储能控制系统设计及动态性能分析

本文构建了光伏微电网蓄电池储能控制系统的完整理论体系。在系统架构方面,提出了基于直流母线电压平衡的多时间尺度能量管理理论,建立了光伏发电单元的二阶物理模型和MPPT动态跟踪算法。针对蓄电池系统,设计了融合二阶RC等效电路与扩展卡尔曼滤波的SOC估计方法,误差控制在3%以内。双向DC-DC变换器采用状态空间平均建模方法,推导了小信号传递函数,为闭环控制提供理论基础。该体系实现了从瞬时功率平衡到长期能量调度的多层级协同控制,为微电网稳定运行提供了系统的解决方案。

AI的内部世界的博客 191

Linux:进程间通信

一篇带你完全掌握进程间通信

Makise的博客 2101

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux进程间通信

进程间通信(IPC)是指不同进程之间的数据交换和通信。在多进程环境下,不同的进程需要共享内存、文件等资源,但是每个进程都有自己独立的地址空间,因此需要通过进程间通信来实现进程之间的数据交换和共享。进程间通信使得进程间可以进行数据传输、资源共享、通知事件等。例如,一个进程需要将它的数据发送给另一个进程,或者多个进程之间共享同样的资源,或者一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件等。本节我们将为大家介绍进程间通信的相关知识!

ARMCSKGT的博客 2755

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Linux —— 进程间通信

进程间通信方式的介绍:管道通信、system V通信......

M的博客 6665

车载开发中A核与M核

摘要:A核(应用核)与M核(微控制器核)是现代汽车电子架构的核心组件。A核基于ARM Cortex-A系列,运行Linux等复杂系统,侧重高性能计算但功耗较高,适用于智能座舱等场景;M核基于Cortex-M系列,强调实时性与低功耗,运行RTOS或裸机程序,用于发动机控制等关键任务。两者通过异构计算协同工作,A核处理上层智能应用,M核确保底层实时控制,形成"AP+CP"混合架构,共同满足汽车智能化和安全性的双重需求。这种分工体现了性能与确定性平衡的设计哲学,是汽车电子集中化演进的技术基础。

weixin_42108533的博客 1325

【Linux进程间通信】Linux匿名管道详解:构建进程间通信的隐形桥梁

当提及Linux系统中的进程间通信(IPC),管道(Pipes)无疑是最基础且广泛使用的一种机制。作为匿名通信的典范,管道为进程间数据交换提供了一个简单而有效的途径。在这个信息飞速传递的时代,掌握Linux管道的使用不仅是理解操作系统底层通信原理的关键一步,也是提升软件开发效率、构建复杂应用系统的必备技能

EterNity_TiMe_的计算机学习之路 4088

进程间通信之管道

目录 前言 进程间通信的目的: 一.管道 1.1 匿名管道 1.1.1 匿名管道的使用场景 1.1.2 匿名管道实现通信的原理 1.1.3 怎么创建管道 1.1.4 怎么实现进程间通信 1.1.5 管道通信额四种情况 1.1.6 匿名管道的特征 1.2 命名管道 1.2.1 命名管道的原理 1.2.2 创...

weixin_57023347的博客 4301

进程间通信的8种方式

前言: 进程通信: 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。 进程间通信(IPC)介绍 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信...

是什么让你停止不前? 2万+

进程间通信(IPC)

什么是进程间通信 首先了解几个名词: 进程隔离 进程隔离是为保护操作系统中进程互不干扰而设计的一组不同硬件和软件的技术。这个技术是为了避免进程A写入进程B的情况发生。 进程的隔离实现,使用了虚拟地址空间。进程A的虚拟地址和进程B的虚拟地址不同,这样就防止进程A将数据信息写入进程B。 为什么需要进程间通信 1).数据传输 一个进程需要将它的数据发送给另一个进程。 2).资源共享 多个进程之间共享同样的资源。 3).通知事件 一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件。 4).进程

weixin_49001476的博客 8186

<Linux> 进程间通信

进程间通信,匿名管道、命名管道、共享内存、消息队列、信号量

prodigy623的博客 3484

进程间通信——管道

文章目录进程间通信介绍进程间通信目的进程间通信发展进程间通信分类管道什么是管道匿名管道实例代码用fork来共享管道原理站在文件描述符角度-深度理解管道站在内核角度-管道本质管道读写规则命令行中的 `|` 管道中,进程间是兄弟关系管道特点命名管道创建一个命名管道匿名管道与命名管道的区别命名管道的打开规则用命名管道实现server&client通信 进程间通信介绍 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个

aaaaaaaWoLan的博客 2873
上一篇: 矩阵运算
下一篇: ld链接器
under_maple
博客等级 码龄12年 15粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值