当前位置: 技术问答>linux和unix
纠结的 页表 问题
来源: 互联网 发布时间:2016-09-15
本文导语: 32位系统中,页面大小通常为4kb,采用两级页表,第一级页表称为目录表,第二级页表称为页表,每级页表都包含210个页表项,在一个页表项占用4个字节的情况下,只需要4KB的内存空间,恰好可以保存到一个物理页面...
32位系统中,页面大小通常为4kb,采用两级页表,第一级页表称为目录表,第二级页表称为页表,每级页表都包含210个页表项,在一个页表项占用4个字节的情况下,只需要4KB的内存空间,恰好可以保存到一个物理页面中。
那位能够解释下这些数字间的转换关系啊,看分页机制碰到的,纠结啊,顺带讲下分页和分段吧,呵呵...
那位能够解释下这些数字间的转换关系啊,看分页机制碰到的,纠结啊,顺带讲下分页和分段吧,呵呵...
|
是2^10=1K,不是210,同理,220是2^20 = 1M.
|
32位系统可不全是这样的哦,确切的讲,LZ说的是IA32体系下的事情。很多其他的CPU采用自己定义的MMU类型来管理内存的(当然,也是类似的段页式管理方式)
分段,其实就是汇编语言里经常遇到的ds,cs,ss...这些段寄存器用到的,在IA32架构下,采用全局描述符表GDT来组织保护模式下的全局描述符,从而实现ds,cs,ss等段寄存器的映射,否则寻址空间太小。
而分页机制实际上也是通过线性地址找到物理地址的一个方法,如果不分页,通过分段确定的线性地址就是物理地址了。如果分页,则在线性地址分为3段,前两部分分别为页目录表,页表中的相应项,通过这两个能具体的确定物理内存页的起始地址。第三部分就是offset,也就是在物理内存块中的偏移量。这样就具体的确定下物理内存了。
分段,其实就是汇编语言里经常遇到的ds,cs,ss...这些段寄存器用到的,在IA32架构下,采用全局描述符表GDT来组织保护模式下的全局描述符,从而实现ds,cs,ss等段寄存器的映射,否则寻址空间太小。
而分页机制实际上也是通过线性地址找到物理地址的一个方法,如果不分页,通过分段确定的线性地址就是物理地址了。如果分页,则在线性地址分为3段,前两部分分别为页目录表,页表中的相应项,通过这两个能具体的确定物理内存页的起始地址。第三部分就是offset,也就是在物理内存块中的偏移量。这样就具体的确定下物理内存了。
|
分页和分段是32位系统的虚拟内存技术。分页可选,分段必须。一级页表就好似一级索引,二级相应二级索引,要得到一个页在内存中的实际位置,就要经过两级的索引才能够找到~~