x86中的分页机制

分页单元(page unit): 把线性地址转化成物理地址.

 为了效率, 线性地址分成固定长度的组, 该单元成为页, 页内部连续的线性地址被映射到连续的物理地址.

页框: 分页单元把RAM分成固定长度的页框, 页框是一个存储区域, 与页长度相同

页是数据块, 页框是存储区域, 所以页可以放到页框和磁盘中.

线性地址到物理地址的映射功能成为页表, 页表放在驻村, 并且在启用分页单元之前必须对页表初始化.

分页机制在x86处理器上通过设置cr0寄存器的PG标志, PG = 0的时候线性地址就被解释成物理地址


自从386开始分页单元处理4KB页, 32位线性地址被分成3部分第一部分为页目录(10 bit), 第二部分为页表(10bit), 最后是offset(12bit),使用页目录和页表两个方式来转换的目的在于减少进程页表所需要的RAM数量.

使用二级分页模式每个页表只需要2^10个表项(总共2 * 1024), 假设一项4字节则需要8KB, 如果使用一级分页则需要2^20个表项, 1MB * 4 = 4MB

每个进程必须有一个页目录, 页目录的物理地址放在cr3寄存器.

我们称页目录为pg dir, 页表为pg tbl, 偏移量为offset. 所以1024 * 1024 * 4096 = 4GB.


扩展分页

从pentium开始x86引入了扩展分页, 它使页框为4MB而不是4KB, 内核就用不到页表项, 只需要页目录就可以访问全部物理地址,从而节省了内存.

扩展分页机制和正常分页的不同在于, Page size标志必须设置成支持4MB, 由于每个物理地址都是4MB对齐, 所以地址的最低22位都为0.

通过设置cr4寄存器的PSE能使扩展分页和常规分页共存.


常规分页举例:

假设内核给一个进程分配了0x20000000-0x2000ffff, 该空间为2 ^ 16一共32

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值