内存管理(Memory management)旨在为系统中所有的task提供稳定可靠的内存分配、释放与保护的机制
不论是android 中的音频系统、GUI系统、或者是Binder实现的机理等都与内存的管理是息息相关的。
虚拟内存
逻辑地址(LocalAdress)
也成为相对地址,是程序编译后所产生的地址,逻辑地址由两部分组成:Segment Selector(段选择子)
用于描述逻辑地址所处的段 16bit
TI;table Indicator
RPL:Request Priviledge Level
GDT(Global Descriptor table)、LDT(Local Descriptor Table).他们用来记录各种段描述符,(Segment Descriptors),而表本身的存储地址则由GDTR和LDTR两个CPU寄存器来保存。GDT的有效的范围是全局的,同时系统也允许各自进程创建自己的本地表(LDT)以增加额外的段;
段选择子中的INDEX就是GDTR/LDTR 中的“序号”------具体是那个表。则由Table Indicator来区分。0标识GDT,1表示LDT
Offset(用于描述段内的偏移值)32 bit
CPU提供了专用的寄存器来承载段选择子
线性地址
线性地址是逻辑地址经过分段机制转换后形成的。基本思想
根据段选择子的TI字段得到描述符存储在GDT或者是LDT中
通过GDTR/LDTR 获得GDT/LDT的存储地址
根据段选择子中的INDEX字段到GDT/LDT中查到对应的段描述符
根据段描述符获得此段的基地址
根据基地址+段内偏移地址得到线性地址
物理地址
物理地址的空间很好理解,它是指机器真实的物理内存所能表示的地址空间的范围。比如对于只有64K内存的系统来说,其物理地址的范围是0x0000·0xFFFF。任何的操作系统,最终都需要通过真实的额物理地址来访问内存。
页:与分段的额机制不同的是。分页的机制操作的对象的大小是固定的内存块,称为“页”。一般情况下,页的大小为4KB。
叶框:叶框是对物理内存的最小的操作的单位也是4KB
线性地址中的1、3、6、7、8分别对应着物理内存中的1、2、3、4、5的叶框
内存的分配与回收
保证硬件无关性
动态分配内存和回收
内存碎片
内存保护