自己对分页机制的认识

终于有点搞明白分页机制:

其实32位组成的线性地址是虚拟地址,范围是从00000000H~FFFFFFFFH一共4G

cr3决定了页目录基址,线性地址的高十位是页目录项索引值,然后读取页目录项的高20位,得到页表的基址。在与线性地址的中10位形成的偏移值,找到页表项,然后读取页表项的高20位形成页基址,再加上线性地址的低12位形成物理地址。

启动分页时,先要建立含有PDE,PTE的表格。这个表格含有1024个PDE,1024*1024个PTE。

cr3寄存器的低12位都是0,不起作用,高20位是页目录基址。它保存的是当前活动进程的页目录地址。

2011042610015961.jpg

这张图片结合http://www.cnblogs.com/wanghj-dz/archive/2011/04/24/2026436.html的图片一起看。主要是看PDE,PTE的结构。

进程主要是对Cr3 、PDE和PTE的初始化

凡是base address,都是20位,xxxxxh形式(五位X)

PDE、PTE的base address加上4K的整数倍,即1000h的整数倍。

PDE的个数就是页表的个数。这个个数是内存除以4M来决定的。这个个数也决定了所需页目录PD的大小为PDE个数*4K

如32M的内存,PDE最多为为8个,页目录所需大小为:8*4Bety=32字节=32Bety。

PTE的个数是固定的1024,一个PTE映射一个4K大小的页,所以1024个PTE映射的物理内存为4k*1024=4M

对于4G内存,可以表示为 1024*1024*4k。后面的1024是固定的PTE的个数*4K,前面的1024表示PDE的个数,也是页表的个数,这个是由真实的内存决定的,4G的内存就是1024个。32M内存就是8个。1024个PDE组成一个页目录。

这个页目录表的基地址由CR3决定的。

以上都应该以页目录表、页表的初始化来整体思考。

内存决定页目录项的个数,这些页目录项组成一个页目录表,这个页目录表的基址由cr3决定,每个页目录项的偏移由线性地址的高十位来决定。一个页目录项决定一个页表,一个页表有1024个页。

转载于:https://www.cnblogs.com/wanghj-dz/archive/2011/04/26/2028871.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值