页转换机制(摘自Undocument NT)

要访问内存单元,要指定段和段内偏移。地址转换的第一步就是将段基址加到偏移上。如果没有启用分页的话,这个32位的地址就是物理地址。否则,这个地址叫做逻辑地址或线性地址,这个地址再经过页地址转换机制才成为物理 RAM 地址。页地址转换机制见 1。



这种内存管理机制叫做分页,这是因为内存被分成了固定大小的区域,而这些区域就叫做页。 在 Intel 处理器(80386 或更高)上,一页的大小是4KB。32位的地址总线可访问最多 4GB 的 RAM。因此,总共就有1M(4GB/4K)个页。

页地址转换是一个逻辑地址向物理地址的映射。逻辑/线性地址中的一些位用作了页表的索引,页表由为页提供了逻辑到物理的映射。Intel 平台上的页转换机制有两级,还有一个第二级的结构叫做页表目录。正如其名字所示,页表目录是一个指向页表的指针的数组。 线性地址中的一些位用作了页表目录的索引以得到用于地址转换的合适的页表。

80386的页地址转换机制需要操作系统维护两个非常重要的数据结构,即页表目录和页表。一个特殊寄存器,CR3,指向当前的页表目录。这个寄存器也叫做页目录基址寄存器(Directory Base Register,PDBR)。 页表目录是一个4KB的页,共有1024个成员,每个成员4个字节。页表目录的每个成员都指向一个页表。页表是一个 4KB的页,共有1024个页表项,每个页表项4个字节(32位)。每个页表项(Page Table Entry,PTE)指向一个物理页。因为要寻址的页有1M个,总字节数超出了 PTE 的32位所能寻址的范围, 于是只用高20位作物理地址的高20位,剩下的12位用于维护页的属性。

属性中有一些用作访问许可。例如,可将一个页指定为读写的或是只读的。页还有相应的安全位,叫做 supervisor 位。该位用于指定此页是可以被用户代码访问还是只能被内核代码访问。若该位置位,则此页只能由 ring0 访问。另外两个位,即 accessed 位和 dirty 位,指示页的状态。 当该页被访问时,处理器设置 accessed 位,当该页被写入时,处理器设置 dirty 位。一些位对操作系统是有用的。比如说,Windows NT 使用这些位来实现 copy-on-write 保护。还可以不访问物理页就将页标记为无效。访问这样的页就会导致缺页异常。异常和中断差不多。操作系统可以安装异常处理程序来处理缺页。后面有对此的详细讨论。

32位内存地址是这样划分的。线性地址的高10位用作页目录索引,从中取得相应的页表指针。之后的10位用作页表的索引来得到所需物理页的基地址。剩下的12位用作页内偏移,加到页基址上就得到了物理页地址。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值