这里只指明页表描述符的关系,没有与合理性相关的讨论。
在arm系统当中通常由mmu来完成虚拟内存到物理内存的转换,linux对内存的管理同样是由mmu来完成的,所以对linux系统来说mmu是必须的,其转换的基本过程是通常协处理器的c2寄存器,来指定页表的基地址,然后加上虚拟地址给出偏移地址来计算出具体的页表项的位置,接着根据此页表项给出的相关内容再找到页表描述符,最终再和虚拟地址当中给出的部分地址合在一起得到最终的物理地址。这里提到的内容包含到3个重要的名词,页表、页表项,页表描述符。
这三个名词很容易混淆,它们的关系是页表是包含很多具体的页表项的一个表,该表项指向一个页表描述符,页表的地址会由上一级页表描述符来给出,在开始的时候则由c2寄存器给出。拿一级页表来说明它们之间的区别。从cp15(专门处理内存管理的协处理器)开始,cp15的寄存器c2给出一个地址,这个地址的低x位为0(通常是16位),这个地址就是一级页表的基地址,然后再从虚拟地址当中拿出y位来找到页表当中的偏移,这样就对应到具体的页表项,这个页表项并不是包含具体物理地址的单元,此页表项只是给出一级描述符的地址,然后一级描述符当中再给出物理地址的部分内容,再加上虚拟地址当中的部分内容就得到了具体的物理地址。当中c12可看作0级页表描述符。他们有一个循环关系,直到找到物理地址而已,在写之前并没有考虑这样作的具体好处是什么,但在写的时候发现这样中间多了一层页表描述符,而页表描述符当中只有部分位置被占用了,另外的部分就可以作为权限管理,安全管理。可见这就是虚拟内存管理的精华所在。
阅读(5031) | 评论(0) | 转发(0) |