日期:2014-5-16 浏览次数:21218次

linux用户态内存的物理地址问题?
小弟我看linux内存管理一段时间了。有一个问题一直不解。 linux用户态进程使用0—3G的线性地址空间,内核使用3G-4G的线性地址空间。内核对0-896M以下的物理内存进行直接映射(即物理地址与线性地址仅差一个偏移量PAGE_OFFSET),那也就是物理内存的0-896M都已经直接映射了到了3G-3G+896M的线性地址了。如果物理内存仅仅有896M或者不足896M。那用户态使用的内存已经被内核直接映射到了3G-3G+896M的线性地址空间了,如果再映射到用户态的0-3G线性地址空间,那进程的页表或页全局目录该怎么办啊?

------解决方案--------------------
内核中的页目录表和页表总共只占4M = 1M (20bit)*4(32位的地址)的空间,不会有问题的
------解决方案--------------------
如果物理内存不足,那么内存管理会回收一些提供给当前运行程序,比如把一些数据写到硬盘,这个涉及到虚拟内存了。然后会有一些page空闲,提供映射。