对于段页式内存管理的理解

      内存管理单元(MMU)负责从虚拟地址到物理地址的转化。逻辑地址(可以认为是虚拟地址)是段标识+段内偏移量的形式,MMU通过查询段表,可以将逻辑地址转化为线性地址。如果CPU没有开启分页功能,那么线性地址就是物理地址;如果CPU开启了分页功能,MMU还需要查询页表来将线性地址转化为物理地址:逻辑地址(段表)->线性地址(页表)->物理地址。

       所以段页式内存管理每读取一数据,要访问三次内存。第一次是由段表寄存器得到段表始址后访问段表,由此取出对应段的页表在内存中的地址;第二次是访问页表得到所需访问的物理地址;第三次才能访问真正需要访问的物理单元。

 

 

附:

       MMU是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件,通过分段机制(把一个逻辑地址转换为线性地址,线性地址也是32位,其地址取值范围为0x00000000~0xffffffff)和分页机制(把一个线性地址转换为物理地址),最终将逻辑地址映射为物理地址,如下图:

                        

          在Linux中,主要设置了:内核代码段,内核数据段,用户代码段,用户数据段。而且每个段的基地址对应线性地址都是为0,而且都可以使用4G的地址空间,相当与绕过了逻辑地址和线性地址的映射,从而完全利用了分页机制。

没有更多推荐了,返回首页