分页式内存管理
在分页式内存管理中,(用户态的)程序的地址空间就变成了虚拟地址空间,不能直接对物理页面进行操作。程序使用的地址会经过MMU处理,变成物理地址再进行访问。其中页表基址寄存器保存的是页表第一项的物理地址。
页表自映射
现在来看二级分页内存管理的情况。程序只能通过虚拟地址空间对内存进行操作,而页表又是放在物理地址空间中的。(在没有专用指令的情况下),操作系统为了方便修改页目录和页表,给页目录和页表也分配了虚拟地址空间里的空间。
如果把页目录和页表对齐到k*页面,可以发现页表m和页目录的内容完全一样,页表m的物理地址就是页目录的物理地址。
这时候再看看网上流传的很广的几张关于windows的页表自映射的图就清楚了。(CR3是x86的页表基址寄存器)
页目录项的虚拟地址到物理地址: |
|
第二级页表的页表项虚拟地址到物理地址: |
|
普通页面的某一偏移的虚拟地址到物理地址: |