2014年(4)
分类: LINUX
2014-04-13 22:39:24
对于支持MMU的平台,linux使用虚拟内存进行内存管理操作!在linux下内存主要分为:系统调用systemcall,内存映射mmap,内存交换swap,核心内存管理core,平台特定结构MMU,物理内存。针对这些模块之间交互主要靠一下一些机制:地址映射,请求页操作,内存分配和释放,缓存和刷新,页面交换,内存共享。
linux虚拟空间支持4G,其中0~3G为每个进程独立的用户空间,3G~4G为每个进程共享的内核空间。不管用户空间,还是内核空间,都为虚拟地址,由编译连接时决定!当物理内存小雨896MB时,内核虚拟空间与物理空间存在线性关系,直接+-PAGE_OFFSET即可;另外,内核虚拟空间映射到物理地址总是从最低地址开始。系统启动时,内核映像被加载在0x00100000(不同平台不一样)的地方,对应的虚拟地址为0xc0100000,前面保留的空间留作它用。
进程的页目录PGD处于内核空间,进程切换时,寄存器CR3会写入新的进程PGD,需要注意的是CR3使用的是物理地址。