在了解 Binder 跨进程通信原理之前, 我们先了解一下 Linux 传统的进程间通信的概念和基本原理, 这样有助于我们更好的理解 Binder 的通信原理. 这个部分基本都是理论, 基础不是很好的同学, 还是要耐着性子看完. 最起码,我看完后受益匪浅.

(如有侵权, 请联系删除)

1.基本概念

Linux 中跨进程通信有一些几个基本的概念

进程隔离

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

系统调用: 用户态 & 内核态

1.1 进程隔离

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

1.2 进程空间划分

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

1.3 系统调用: 用户态 & 内核态

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

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

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

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

copy_from_user() //将数据从用户空间 copy 到内核空间

copy_to_user() //将数据从内核空间 copy 到用户空间

2. 传统 IPC 通信的基本原理.

通常做法是将消息发送方要发送的数据放在内存缓存区中, 通过系统图调用进入内核态, 然后内核程序在内核空间分配内存, 开辟一块内核缓存区, 调用 copy_from_user() 函数将数据从用户空间的内存缓存区 copy 到内核空间的内核缓存区中. 同样的接收方进程在接收数据时在自己的用户空间开辟一块内存缓存去, 然后内核程序调用 copy_to_user() 函数将数据从内核缓存区 copy 到接收进程的内存缓存区. 这样数据发送方进程和数据接收方进程就完成了一次数据传输. 也就是完成了一次进程间通信.

image

传统的 IPC 通信方式有两个问题

性能低下, 一次数据传递需要经历: 内存缓存区(发送方) -> 内核缓存区 -> 内存缓存区(接收方). 两次的数据 copy

接收数据的缓存区由数据接收进程提供, 但是接收进程并不知道需要多大的空间来存放将要传递过来的数据, 因此只能开辟尽可能大的内存控件或者先调用 API 接收消息头来获取消息体的大小, 但是这两种做法不是浪费空间就是浪费时间.

ipc原理linux,传统的Linux中IPC通信原理相关推荐

  1. 地铁框架保护的原理_地铁直流系统中框架保护原理及处理程序

    摘要:分析城市轨道交通直流系统设置框架保护的原因及动作原理,阐述直流框架保护电流保护.电压保护及钢轨电位限制装置动作配合关系,了解直流系统框架保护应急处理程序. 关键词:直流框架保护 钢轨电位限制 处 ...

  2. 通信原理包络是什么意思_2021年通信原理考研题库

    原标题:2021年通信原理考研题库 考研真题精选 一.选择题 1十六进制数字信号的传码率是1200B,则传信率为( ):如果传信率不变,则八进制传码率为( ).[南京邮电大学2010.2009研] A ...

  3. 量子计算机原理 不确定,逃避量子物理学中的不确定性原理

    由阿尔托大学5月6日,不确定性原理最早由Werner Heisenberg于1920年代后期提出,它是量子力学的基本概念.在量子世界中,像电子一样的粒子为所有电子产品提供动力,它们的行为也像波一样.结 ...

  4. 图像处理中的通信原理——冈萨雷斯读书笔记(四)

    完美重建要求使用无限求和来内插,实践中,不得不寻求某种近似.在图像处理中,二维内插最普通的应用就是调整图像的大小.放大可看成是过取样,缩小是欠取样.无论是过取样还是欠取样,都需要内插,内插有最近邻.双 ...

  5. 图像处理中的通信原理——冈萨雷斯读书笔记(三)

    法国数学家傅里叶男爵在1822年出版的<热分析理论>一书中指出,任何周期函数都可以表示为不同频率的正弦和或余弦和(每个正弦项/余弦项乘不同的系数)的形式,这其实就是无穷级数的一种:傅里叶级 ...

  6. 图像处理中的通信原理——冈萨雷斯读书笔记(二)

    参考伯乐在线的一篇文章,做图像的傅里叶变换.在PyCharm中安装cv2时出错,如下图: 根据提示建议在命令行中执行命令pip install cv2也依然是No matching distribut ...

  7. 图像处理中的通信原理——冈萨雷斯读书笔记(一)

    信息的概念在信息论中很明确:用于衡量事件的不确定性.信息的传播形式或者所载体便是信号,比如说电信号.光信号.声音信号.那么信息的表现形式就是消息,可以是语言.文字.图像.所以说图像处理依然是信息与通信 ...

  8. SpringCloud 中 Feign 核心原理,简单易懂!

    目录 SpringCloud 中 Feign 核心原理 Feign远程调用的基本流程 Feign 远程调用的重要组件 Feigh 远程调用的执行流程 SpringCloud 中 Feign 核心原理 ...

  9. 【通信原理 入坑之路】—— 理解 4G,5G中的天王山:OFDM【学习笔记4】

    今天将要讨论的部分个人感觉非常绕,博主也是在阅读了大量相关书籍和文献之后才有所体悟.如有表述不当之处欢迎大家在评论区斧正! 在上一篇博文中,我们知道串并转换使得OFDM的符号速率降低了,可是总体符号传 ...

最新文章

  1. nginx的gzip压缩功能
  2. 杀死多余的ghost 的Android emulator-5554 offline 的方法总结
  3. 科技边框_智能手机窄边框喷射点胶机欧力克斯
  4. C语言求m中n个数字的组合
  5. php iso8601 gmt,如何使用PHP以iso 8601格式顯示日期
  6. linux系统构架ftp,用Linux系统构建高效FTP服务器
  7. a lt b lt c c语言描述,《数据结构与算法分析――c语言描述》读后笔记 4
  8. 中兴通讯发布《5G上行增强技术白皮书》:深化多频段协同能力
  9. 中给函数赋读权限_sql动态传参在springData中的应用(补充)
  10. 大数据学习之Hadoop任务输出到多个目录中
  11. 耳挂式蓝牙耳机原理_专为运动而生的DOSS T63无线蓝牙耳挂式运动耳机
  12. Tkinter教程(每天半小时,3天彻底掌握Tkinter)day2
  13. HCIE 数通资料下载 肖哥视频下载
  14. Windows的权限(用户、组和访问控制)
  15. Spring JMS CLIENT_ACKNOWLEDGE
  16. 计算多项式的值编程c语言,Newton插值多项式计算函数的近似值
  17. MySql简单入门_第四篇 高级使用(4)_触发器
  18. canal搭建(HA)
  19. Leetcode_53_Maximum Subarray
  20. pspice建立仿真模型元件库

热门文章

  1. 基于JAVA+SpringBoot+Mybatis+MYSQL的智慧水产养殖系统
  2. 基于JAVA+SpringMVC+Mybatis+MYSQL的学生考勤管理系统
  3. 基于JAVA+SpringMVC+Mybatis+MYSQL的高校后勤管理系统
  4. 基于JAVA+SpringMVC+Mybatis+MYSQL的高校运动会管理系统
  5. 基于JAVA+SpringBoot+Mybatis+MYSQL的个人博客系统
  6. linux 文件系统字体小,基于嵌入式Linux平台的最小文件系统的制作
  7. 变成一列_VBA实践(6)--excel横向排列的数据表变成竖向排列
  8. python蟒蛇绘制
  9. linux连接FreeBSD虚拟机的mysql
  10. em,rem,px的实际应用