分页机制

分页机制在分段机制的基础上完成虚拟地址到物理地址转换的过程.分页机制把线性地址空间划分成页面,映射到物理地址空间上.分页机制提供几种页面级保护措施,用于代替或合用段保护机制;同时,分页机制还提供了用户-超级用户两级保护.

80x86使用4k字节固定大小的页面,也就是分页机制把4GB的线性地址空间划分成1M个4k大小的页面.线性地址的低12直接映射到物理地址,而高20位则要经过分页机制转换后与低12位拼接实际的物理地址.物理地址也进行分页,大小也是4k,这样这个空间之间可以任意进行映射.

在保护模式中,80x86允许线性地址直接映射到大容量的物理内存地址空间中(例如4GB的RAM),或者使用分页间接地映射到小容量的物理内存和磁盘存储空间中.后一种方法叫做虚拟存储或需求页虚拟存储.如果页不在物理内在中,处理器就会产生一个页错误异常,页错误异常处理程序会把页面从磁盘加载到内存中.页面加载到内存之后,从异常处理程序返回的操作会使得导致异常的指令被重新执行.处理器把线性地址到物理地址转换的信息及页错误异常信息保存在页目录和页表中.

分页转换功能由存储在内存中的页表来描述.页表可以看作是2的20次方的数组,线性地址到物理地址的转换可以看成是进行数组查找.线性地址的高20作为索引值,用于选择对应页面的物理基地址.页表中每个页表项为32位,高20位存储页面的物理基地址,低12位存放诸如页面是否存在等属性信息.页表有1M个表项,每个表项占用4字节,哪么就会占用4M的物理内存.为此,把页表分成两级页表.

第一级页表称为页目录表,CR3用于存放页目录基地址.线性地址的高10位(31~22)用于选择页目录表中表项,页目录表有4K个表项,中间10位(21~12)用于选择页表项,页表也有4K个表项.无论是页目录表还是页表,表项都是4字节.线性地址高20位通过二级页表映射到物理页表基地址的过程是:CR3存放页目录表基地址,线性地址的高10位作为索引获得页目录表1k个表项之一,再用此表项中的索引获得页表中的表项,在这个表项中就存放着20位的物理页表基地址.线性地址的低12位直接作为物理地址的低12位,从而组成一个完整的32位物理地址.

页目录表中每一个表项存放对应页表的基地址(多少位?),页表中的每一个表项存放20位物理内存中的页基地址.

启用两级页表并没有减少页表在内存中的空间,但是,两级页表结构允许页表被分散在物理内存在各个页面中,而不需要保存在4M连续的内存块中.同时,并不需要为不存在或线性地址空间中未用的部分分配二级页表,也就是如果线性地址空间大小没有达到4G,哪么就按线性地址的实际大小来分配二级页表,因此,页表的占用内存的总长度就可能没有达到4M.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值