【Binder 机制】进程通信 | 用户空间与内核空间 | MMU 与虚拟内存地址

举报
韩曙亮 发表于 2022/01/13 00:00:28 2022/01/13
【摘要】 文章目录 一、进程通信二、用户空间与内核空间三、MMU 与虚拟内存地址 一、进程通信 进程隔离概念 : 系统中的进程存在 " 进程隔离 " , 出于对进程运行的保护...





一、进程通信



进程隔离概念 : 系统中的进程存在 " 进程隔离 " , 出于对进程运行的保护 , 两个进程的内存是隔离的 , 并且不允许进行直接通信 ;

内核自带通信机制 : 内核提供了 pipe 管道 , socket 等通信机制 , 可以进行跨进程通信 ;

Binder 机制 : Android 中的进程间的通信 , 是通过 " Binder " 机制 完成的 ; Binder 机制不是内核自带的机制 , 而是 Android 可以动态进行 Binder 注册 , 然后进程间通过 Binder 进行通信 ;





二、用户空间与内核空间



系统中的内存分为 2 2 2 部分 , 用户空间 和 内核空间 , 内核空间一般是运行操作系统 , 用户空间一般运行应用 ;

操作 内核空间 时的状态称为 " 内核态 " ;

操作 用户空间 时的状态称为 " 用户态 " ;

在这里插入图片描述





三、MMU 与虚拟内存地址



每个 应用进程 的 内存空间 使用的地址都是 独立的 , 连续的 , 虚拟地址 ;

内存管理单元 ( MMU - Memory Management Unit ) 的作用就是进行 内存映射的 ;

MMU 的作用是将真实的 内存 物理地址 转为 虚拟地址 , 虚拟地址 又称为 逻辑地址 , 一般情况下虚拟地址大小远远大于物理地址 ;

MMU 可以让每个进程都拥有独立的连续的内存空间 ;

在这里插入图片描述

32 32 32 位的操作系统的 寻址空间是 0 0 0 ~ 2 32 2^{32} 232 , 大小 4 4 4 GB ;

32 32 32 位操作系统 , 使用的是 二级分页 ;

64 64 64 位的操作系统的 寻址空间是 0 0 0 ~ 2 64 2^{64} 264 , 这个寻址空间很大 , 一般是使用前 40 40 40 位 , 大概是 18 18 18 TB ;

64 64 64 位操作系统 , 使用的是 四级分页 ;


32 32 32 位的系统中 , MMU 会让每个应用都有 1 1 1 4 4 4 GB 大小的空间 ,


Linux 系统内核空间占 1 1 1 GB , 用户空间 3 3 3 GB ; 0 0 0 ~ 3 3 3 GB 是用户空间地址 , 3 3 3 ~ 4 4 4 是内核空间地址 ;

Windows 系统内核空间占 2 2 2 GB , 用户空间 2 2 2 GB ;


虚拟地址的必要性 : 代码编译完成之后 , 地址是分配好的 , 都是从 0 0 0 地址开始计数的 , 因此如果要保证程序的运行 , 必须保证应用进程的内存从 0 0 0 开始 ; 这里将实际的物理内存地址映射为虚拟内存地址 , 这个虚拟内存地址可以保证每个程序都按照相同的初始地址运行 ;

汇编指令 需要直接操作 虚拟内存地址 ;

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/120310952

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。