首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

文章目录 一、进程通信 二、用户空间与内核空间 三、MMU 与虚拟内存地址 一、进程通信 ---- 进程隔离概念 : 系统中的进程存在 " 进程隔离 " , 出于对进程运行的保护 , 两个进程的内存是隔离的...---- 系统中的内存分为 2 部分 , 用户空间 和 内核空间 , 内核空间一般是运行操作系统 , 用户空间一般运行应用 ; 操作 内核空间 时的状态称为 " 内核态 " ; 操作 用户空间 时的状态称为..." 用户态 " ; 三、MMU 与虚拟内存地址 ---- 每个 应用进程 的 内存空间 使用的地址都是 独立的 , 连续的 , 虚拟地址 ; 内存管理单元 ( MMU - Memory Management...1 个 4 GB 大小的空间 , Linux 系统内核空间占 1 GB , 用户空间 3 GB ; 0 ~ 3 GB 是用户空间地址 , 3 ~ 4 是内核空间地址 ;..., 必须保证应用进程的内存从 0 开始 ; 这里将实际的物理内存地址映射为虚拟内存地址 , 这个虚拟内存地址可以保证每个程序都按照相同的初始地址运行 ; 汇编指令 需要直接操作 虚拟内存地址 ;

1.8K10

Clairvoyance:一款Windows进程内存地址空间可视化工具

工具概述 Clairvoyance是一款功能强大的Windows进程内存地址空间可视化工具,它可以针对一个Windows 64位内核中运行的整个64位进程地址空间(用户和内核)创建一个丰富多彩的页面保护可视化界面...该工具利用hilbert空间填充曲线将一维空间即地址空间转化为二维可视化界面。上图中的每个彩色像素表示虚拟内存中4KB页的页保护(UserRead、UserReadWrite等)。...地址空间是通过从使用WindDbg生成的内核崩溃转储中手动解析与进程相关联的四级页表层次结构来直接计算的。...dump /f 获取到导出信息之后,我们可以将其路径传递给Clairvoyance,接下来Clairvoyance便会在浏览器中以可视化的形式将数据显示出来: 枸橘构建 我们可以使用clang++-11在Linux

67620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    linux交换空间

    swap空间有两种形式:一是交换分区,二是交换文件。总之对它的读写都是磁盘操作。...linux内存通过 virtual memory 虚拟内存来管理整个内存, 虚拟内存管理着物理内存,也管理着swap交换空间。...Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。...那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。...其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。

    3.9K70

    【linux】地址空间

    在Linux地址下,这种地址叫做 虚拟地址 我们在用C/C++语言所看到的地址,全部都是虚拟地址!物理地址,用户一概看不到,由OS统一管理 OS必须负责将 虚拟地址 转化成 物理地址 。...虚拟地址空间中的地址通过内存管理单元(MMU)映射到物理内存地址。 2. 地址空间的作用 隔离性:每个进程有自己的虚拟地址空间,其他进程不能直接访问。...程序内部使用的地址都是基于虚拟地址空间,页表负责将这些地址实时映射到实际的物理内存地址,为程序的正确执行提供支撑 03.Linux2.6内核进程调度队列 前面提到的nice值范围在[-20,19]...在 Linux 2.6 内核中,进程调度得到了很大的改进,以提高系统的效率、响应性和可扩展性。...Linux 2.6 使用了一种称为 Ø(1)调度器 的调度算法,这种算法通过使用多个调度队列来达到高效调度。

    9810

    linux之用户空间和内核空间

    linux驱动程序一般工作在内核空间,但也可以工作在用户空间。下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们。...Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。...而将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间)。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。...于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。 Linux使用两级保护机制:0级供内核使用,3级供用户程序使用。...对内核空间来说,其地址映射是很简单的线性映射,0xC0000000就是物理地址与线性地址之间的位移量,在Linux代码中就叫做PAGE_OFFSET。 内核空间和用户空间之间如何进行通讯?

    4.1K20

    快速缓解 32 位 Android 环境下虚拟内存地址空间不足的“黑科技”

    背景 随着微信新业务的不断增长,因 32 位设备上虚拟内存地址空间限制导致的内存分配失败问题也越来越突出。目前市场上的存量 32 位设备数量仍然较多,且预计还会继续存在一段时间。...如果我们能想办法安全地释放掉这段预分配的空间,可用的虚拟内存地址空间就能立刻增加 130M。这就是本文要介绍的第二项“黑科技”——释放 WebView 预分配的内存。...目前在 Android 上拦截 Native 系统 API 主要有两种方法: GOT/PLT Hook Linux 中的动态库是通过 PLT + GOT 的方式完成对外部函数的调用的。...尽管 Linux 中的 ELF 格式并没有导出表一说,但 Linker 在查找外部符号的时候是会通过定义这个符号的 Native 库的符号表来查找符号地址的,因此只要在其他库加载之前把被拦截的函数的符号值改成拦截处理函数地址...pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 这里我们关注attr这个参数,Linux

    4.3K52

    Linux:进程地址空间

    所以地址空间就是地址总线排列组合形成的地址的范围【0,2^32】 3.2 如何理解地址空间的区域划分?  ...3.3  什么是进程地址空间        所谓进程地址空间,本质上就是一个描述进程可视化范围的地址空间内存在各种区域划分,对线性地址进行start、end即可 。...本质上其实就是一个内核数据结构,和PCB一样,地址空间也是需要被操作系统管理的:先描述再组织。 而每一个进程都有自己的进程地址空间,PCB内部有一个指针指向这块空间!...这是有Linux的内存模块去管理的,进程并不需要关心。 结论4:其实变量名在定义的时候就已经被转化成一个个虚拟地址了,而我们之所以有a和&a,本质上是为了区分想获取的是变量的值还是地址。...结论5:以前我们所学习的C内存管理,其实本质上是进程地址空间,而内存管理是由Linux替我们完成的,我们上层语言并不需要关心具体的细节,只需要正常去通过对应的线性地址去使用就行了。

    13110

    【Linux】进程地址空间

    一、程序地址空间 1、各内存区域的相对位置 我记得在之前的博文中好像用编译器粗略定位过各个类型地址空间的位置,这里我们再验证一下它们的相对关系,这里是32位的机器,存储空间为2^32byte=4GB...下面我们来讨论一下 二、进程地址空间 1、页表 我们在之前讲到的程序地址空间的说法其实是错误的,正确来说应该叫进程地址空间,上面我们所说的地址叫做虚拟地址,也叫做线性地址,既然叫做虚拟地址,那当然就不是真实的物理地址了...,也就是虚拟地址是相同的,我们不是复制出了两个地址空间,这里需要注意 内核空间中有父子进程的task_struct,它们里面有指向各自页表的指针 其中上方是父进程的地址空间,下方是子进程的地址空间,子进程直接复制父进程的地址空间...在 32 位计算机里,地址总线宽度是 32 位,也就是有 32 条线路,每条线路能通过高低电平的转换来实现0和1的变化,所以这 32 条线路能表示的不同地址组合数量为 2^32个,因为每个内存地址对应一个字节...地址范围内的 4GB 物理内存 我们的进程地址空间就在这样一个概念中展开,而地址空间的划分实际上是对该空间的一种组织,在正常运行的情况下互不影响 我们计算机中最小的存储单元就是字节byte,每个字节都会有一个地址

    7910

    Linux进程地址空间

    Linux进程地址空间是学习Linux的过程中,我们遇见的第一个难点,也是重中之重的重点。虽然它很难,但是,等我们真正懂得了这样设计的原理,我们不禁会感叹:这真的是太妙了。...一.程序地址空间 大家在系统学习C/C++时,有没有见过这张图: 这就是著名的内存地址模型。越往上地址越高。这些区域为什么按照这种顺序排列呢?这种排列顺序对吗?...arg_start,结束arg_end,环境段的开始env_start,结束env_end unsigned long saved_auxv[AT_VECTOR_SIZE]; struct linux_binfmt...这时,操作系统会为要修改数据的进程开辟一段空间,然后将原来的数据拷贝一份放入新开辟的空间中,然后改变页表的映射关系(虚拟地址相同,但内存地址不同),之后对数据进行修改。...实际上就是在需要开辟空间时,假装开了空间,实际上用的还是原来的空间,减少开辟空间的时间,等到真正要使用新空间的时候才去真正开辟空间。

    12210

    【Linux】进程地址空间

    显示相同地址,却是不同的值 下面在Linux上验证 创建test.c文件 st.c  ⮀...,从全0到全FFFF(16进制),因为数字是线性的,每一个数字表示一个地址,每个地址对应一个字节 地址空间是线性结构的 4.确定地址空间 32位下地址空间默认为0-42亿多 假设空间范围为4GB 设置进程地址空间的结构...,拷贝value值给新空间,重新映射指向新开辟的空间,导致不影响父进程的value值 ,最终将新开辟的空间value值改成200 因为拷贝了物理地址空间,所以在页表的value不影响虚拟地址,但两者却在不同的物理地址处...扩展1:为什么地址空间要存在? 如果没有地址空间,操作系统如何工作 ?...,在地址空间中申请空间,在页表处只填写虚拟地址,物理地址处不填写,就不需要在物理地址处申请空间,过一会,进程尝试对空间写入,在重新申请空间把映射关系创建好,整体机制被叫做 缺页中断 8.

    3K10

    linux进程地址空间

    3.1地址空间简介 我们的程序存储区分为代码区,字符常量区,全局数据区,堆区,栈区等等几个部分,地址是有低地址到高地址进行增长的,我们把这个叫做地址空间; 在栈区定义的变量,这个先定义先入栈,后定义的变量后入栈...:数据总线排列组合形成的地址的范围[0,2^32); 进程地址空间实际上就是我们的进程的一个可以使用的范围,我们可以在这个区域上面进行区域的划分,存放各种数据; 进程地址空间在内核里面就是一个内核对象结构体...,这个结构体里面有地址区域的起始位置的地址start和终止位置的地址end; 3.5进程地址空间管理 对于任何一个进程,都会创建一个task_struct结构体对象,这个指针指向我们的进程地址空间对象,...; 当我们访问内存的时候,会增加一个转换的过程,在这个转换的过程中,虚拟地址空间会进行审查,例如我们对于这个只读区域进行修改,显然是不符合要求的,这个时候的地址空间就会进行这个请求的拦截,防止其进入物理内存...确定这个是否要在我们的物理地址上面开辟空间; 因此这个里面存在缺页中断,就是这个虚拟地址空间没有对应的物理地址空间,就是这个页表上面的虚拟地址数量大于这个物理地址数量,就是因为这个物理空间不会一次性全部开辟

    4510

    初识Linux · 地址空间

    前言: 本文介绍的是有关地址空间,咱们的介绍的大体思路是,先直接看现象,通过现象我们引入地址空间的概念,然后是简单的介绍地址空间,如何理解地址空间等,在往后的学习中,我们大概会介绍地址空间3 - 4次,...这里就需要引出地址空间的概念了,这是地址空间的形象图,我们在语言学习阶段,最多涉及到的只有malloc空间在堆上,局部变量在栈上等概念,我们没有系统的学习,这里我们会深入一点点,为什么存在地址空间?...我们最开始的问题是,虚拟内存如何和物理内存进行联系的,这个过程有地址空间的一份功劳,我们从名字来看,地址空间,地址,空间,容易想到这是一块空间,空间里面充满了地址这种描述,实际上确实是这样的,地址空间在源码中的名字叫做...拥有自己的空间,所有空间加起来就是桌面的大小。...page_table_lock, in other configurations by being atomic. */ struct mm_rss_stat rss_stat; struct linux_binfmt

    7810

    Linux之进程地址空间

    在Linux中,特殊情况,我们将这种地址也成为逻辑地址。 2.感性的理解虚拟地址空间 从前有一个大富翁,他有10亿美元的资产。...3.现象的具体解释 父进程和子进程都有自己独立的进程地址空间,也有独立的页表结构。子进程由父进程创建,因此子进程的进程地址空间是拷贝父进程的进程地址空间。...当然对于Linux而言,虚拟地址、线性地址、逻辑地址都是一样的。 三、怎么办 操作系统要为每一个进程分配地址空间,那么操作系统是否要管理这些地址空间呢?当然是要管理的。...3-4G是内核空间。 总结 以上就是今天要讲的内容,本文介绍了进程地址空间的相关概念。...本文作者目前也是正在学习Linux相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

    26520

    Linux系统-进程地址空间

    Linux进程地址空间 零、前言 一、程序内存空间 二、进程地址空间 1、引入及概念 2、进程地址空间 3、相关问题 零、前言 本章主要讲解学习进程地址空间的知识 一、程序内存空间 在学习C/C...1、引入及概念 对于上述的程序地址空间,其实它的真实面貌为进程地址空间,对于进程地址空间本质上来说是一个虚拟地址空间,并非真实的物理空间 示例: #include #include...概念: 在Linux地址下,这种地址叫做 虚拟地址,我们在用C/C++语言所看到的地址,全部都是虚拟地址!...,同时也相应的分配了对应的mm_struct进程地址空间(PCB中储存了该进程对应的进程地址空间的地址),也就是每个进程都认为自己独占内存资源 对于进程来说,进程控制块以及进程地址空间以及相应的资源...,随进程的创建而创建,随进程的退出而回收 进程地址空间的内容: 进程地址空间是由0x00000000到0xffffffff的线性地址空间,按照刻度被划分为各个区域,例如代码区、堆区、栈区等

    3.8K30

    Linux网络名称空间概述

    Linux网络名称空间是操作系统级别的一种虚拟化技术,它允许创建隔离的网络环境,使得每个环境拥有自己独立的网络资源,如IP地址、路由表️、防火墙规则等。...这种技术是Linux内核功能的一部分,为不同的用户空间进程提供了一种创建和使用独立网络协议栈的方式。本文旨在全方面、多维度解释Linux网络名称空间的概念、必要性和作用。1. 什么是网络名称空间?...网络名称空间使得容器、虚拟机等技术能够在不同的网络环境中独立运行,无需担心IP地址冲突或路由规则相互干扰。2. Linux为什么需要网络名称空间?...结论Linux网络名称空间是现代网络架构中的关键技术之一,它提供了必要的隔离性、灵活性和安全性,以满足云计算☁️和容器化应用的需求。...随着技术的发展,网络名称空间的应用场景将会更加广泛,其在Linux网络虚拟化领域的重要性将持续增长⬆️。

    18600

    Linux 查看磁盘空间

    原文链接:https://www.runoob.com/w3cnote/linux-view-disk-space.html Linux 查看磁盘空间可以使用...df df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 例如,我们使用df -h命令来查看磁盘信息, -h 选项为根据大小适当显示: ?...例如查看当前目录的大小: # du -sh 605M 显示指定文件所占空间: # du log2012.log 300 log2012.log 方便阅读的格式显示test目录所占空间情况:...-b:以字节为单位列出磁盘空间使用情况(系统默认以k字节为单位)。 -k:以1024字节为单位列出磁盘空间使用情况。 -c:最后再加上一个总计(系统默认设置)。...来源:https://www.runoob.com/w3cnote/linux-view-disk-space.html

    13.6K20

    内存地址中藏着的学问

    指针本质上和其他的数据类型一样,存放的都是一个数值,只不过指针的这个数值表示的是内存地址,而非具体数据。 但你知道吗,这个地址可不是真实的物理内存地址,而是一个假的地址,我们称之为虚拟地址。 不信?...当我们在存取某个内存变量时,其对应到的汇编代码其实就是mov指令,当cpu在执行类似指令时,如果遇到内存地址,则会根据一定的规则,自动将该虚拟的内存地址,转换成真实的物理地址,这在硬件层面是自动完成的。...对于64位的平台来说,4-level paging支持256TiB的虚拟地址空间,以及64TiB的物理地址空间,5-level paging支持128PiB的虚拟地址空间,以及4PiB的物理地址空间。...再参考linux内核文档的 5level-paging (在文章最后的参考资料中有具体网址),我们可以确切得知,4-level paging的有效虚拟地址是48位,有效物理地址是46位,5-level...根据上面定义的虚拟地址的canonical address form,内核将虚拟地址空间进一步划分: ? 其把虚拟地址的47位为0的地址空间划给了用户代码,而47位为1的地址空间划给了内核代码。

    1.4K20
    领券