您的位置:首页 > 其它

内核页表中是否存前896M的物理内存和虚拟地址之间的映射关系

2014-11-06 18:23 260 查看
我们知道物理内存的前896M和内核空间的虚拟地址存在3G的偏移量,他们之间的换算可以直接通过va()和pa()进行。
那么内核空间的物理地址和虚拟地址之间的映射关系是否也保存在内核主页表中?
我自己的理解是:操作系统中任何物理地址和虚拟地址之间的映射关系都必须保存在页表中,因此,他们之间的映射关系同样存在于内核主页表中,只不过他们之间的换算可以不通过MMU进行每级的转换,而直接通过va或pa。

 Linux用虚拟地址,所以CPU 发出的地址(都是虚拟地址)必须经过MMU 转换到实际的物理地址, 所有的地址都需要经过MMU转换,只不过你说的896M(取决于实际物理内存大小和vmalloc
区域的定义)是直接映射区域, 他们的映射关系(物理地址和虚拟地址之间有一个常量偏移PHYS_OFFSET - PAGE_OFFSET) 是启动的时候建立的, 在这些物理页上分配的内存,齐虚拟地址不需要重建立, 由于这段区域的物理地址和虚拟地址偏移是常量 所以可以用va 和pa 这些宏去计算。  
但是MMU打开后,从CPU发出去的任何地址都是虚拟地址,必须能够转换到物理地址,否则就会出现Abort
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: