1 物理地址,MMU相关概念
Intel X86存在IO空间,相对于内存空间,通过IN OUT指令访问。大多数ARM PowerPC仅有内存空间。内存空间通过地址,指针访问。程序,程序运行中使用的变量都在内存空间。
物理地址
unsigned char *p = (unsigned char*) 0xF000FF00;
*p = 1;
0xF000FF00这个地址对于x86是16bit段地址+16bit偏移地址,即,0xF000 * 16 + 0xFF00 = 0xF0000 + 0xFF00 = 0xFFF00
地址对于ARM等为采用段地址的处理器,就是空间0xF000FF00。
x86处理器用实际地址做第一步跳转(软重启):
typedef void (*lpFunction) ();//define a function pointer type
lpFunction lpReset = (lpFunction)0xF000FFF0; //get a pointer that point to the addr
lpRest(); //go to the function at addr
MMU
memory management unit,辅助内存管理,提供虚拟和物理地址映射、内存访问权限保护、Cache缓存控制。
Kernel借助MMU让用户感觉可以使用很大的内存空间,而让开发者在写程序的时候可以不考虑物理实际容量。
TLB:Translation Lookaside Buffer,转换旁路缓存。是MMU的核心部件,缓存少量的虚拟–物理关系,是转换表的Cache,也称为“快表”。
TTW:Translation Table walk,转换表漫游。当TLB没有需要的转换对,通过内存中的转换表(常常是多级页表,从页表记地址寄存器找到页

本文介绍了Linux中的内存管理,包括物理地址和MMU的概念,Linux内存管理的结构,如三级页表机制,以及内存申请的几种方式,如malloc、kmalloc、__get_free_pages、vmalloc等。同时讲解了虚拟地址到物理地址的转换,并提到了slab缓存和内存池等优化技术。
最低0.47元/天 解锁文章
984

被折叠的 条评论
为什么被折叠?



