深入理解Android内存
内存管理(Memory Management)旨在为系统中所有的Task提供稳定可靠的内存分配、释放和保护机制。
核心点:
-
虚拟内存
-
内存分配与回收
-
内存保护
虚拟内存
虚拟内存为大体积的程序运行提供了可能,基本思想
-
将外存储的部分空间作为内存的扩展,如从硬盘换分出4GB大小
-
当内存资源不足是,系统将眼罩一定算法自动挑选优先级低的数据块,并把他们存储到硬盘中
-
后续如果需要用到硬盘中的这些数据块,系统将昌盛“缺页”指令,让后把它们交换回内存中
-
这些操作都是由系统内核自动完成的,对上层应用“完全透明”
虚拟内存中三个重要概念
1. 逻辑地址
也称为“相对地址”,是程序编译后产生的地址。逻辑地址由两部分组成
-
Segment Selector(段选择子)
用于描述逻辑地址所处的段,16bit。格式如下

其中的TI指“Table Indicator”、RPL 指 “Request Privilege Level”。TI 指 Table Indicator。具体而言,就是GDT(Global Descriptor Table)及LDT(Local Descriptor Table)。他们都记录各种段描述符(Segment Descriptors),而表本身的存储地址则由 GDTR 和 LDRT 两个CPU 寄存器来保存。GDT的有效范围是全局的,同时系统也允许各个进程创建自己的本地表(LDT)已增加额外的段
这样就很清晰,段选子中的INDEX就是 GDTR 就是 GDTR/LDTR 中的“序号”— 具体是哪个表,则由“Table Indicator” 来区分:0表示 GDT,1表示LDT
-
Offset

2. 线性地址(linear Address)

3. 物理地址

补充
逻辑地址中RPL:
在 Android 虚拟地址空间的上下文中,RPL(Requestor Privilege Level)通常指的是处理器的特权级别,用来区分不同的权限级别。RPL 是一个 2 位字段,通常与 IOPL(I/O Privilege Level)一起使用,在 x86 架构的段寄存器中比较常见,用来标识当前执行代码的权限。
在 Android 系统中,尤其是在涉及到操作系统内核与用户空间的交互时,RPL 主要与系统调用和权限控制相关。RPL 的值影响着指令集的行为以及能够访问哪些资源或执行哪些特权操作。特别是在 Android 的安全模型中,不同的权限级别对于防止未授权访问和隔离不同应用之间的资源非常关键。
例如,用户空间代码通常运行在更低的特权级别(RPL = 3,用户级),而内核代码运行在更高的特权级别(RPL = 0,内核级)。通过这种方式,Android 操作系统能够确保内核和用户空间之间的隔离,从而提高系统的安全性。
需要注意的是,RPL 是特定于平台(如 x86 架构)的概念,Android 操作系统本身会根据硬件架构的特性使用相关机制进行安全和权限管理。因此,理解 RPL 的概念有助于理解 Android 系统如何有效管理和隔离资源。
一张图总结

