Chinaunix首页 | 论坛 | 博客
  • 博客访问: 197466
  • 博文数量: 77
  • 博客积分: 1749
  • 博客等级: 上尉
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-28 18:27
文章分类
文章存档

2012年(28)

2011年(49)

分类: LINUX

2011-11-18 13:56:04

分页机制在分段机制之后进行,以完成线性地址到物理地址的转换。分段机制把逻辑地址转换为线性地址,分页机制进一步把该线性地址转换为物理地址。
        1.逻辑地址
        机器语言指令采用逻辑地址(Logical Address)来指定一个操作数的地址或一条指令的地址。每个逻辑地址都由一个段(Segment)和偏移量(Offset)组成。
        2.线性地址
        线性地址(Linear Address)是一个32位的无符号整数,可以表达高达2^32(4GB)的地址。通常用16进制表示线性地址,其取值范围为0x00000000~0xFFFFFFFF。
        3.物理地址
        物理地址(Physical Address)也就是内存单元的实际地址,用于芯片级内存单元寻址。由32位无符号整数表示。
        从逻辑地址到物理地址的转换是由内存管理单元MMU的硬件电路来完成的。MMU包含两个部分,一个是分段单元(Segmentation Unit),另一个是分页单元(Paging Unit)。其中,分段单元将一个逻辑地址转换为线性地址;而分页单元把一个线性地址转换为物理地址。

通过设置CR0寄存器的PG标志来启用分页机制,当PG=1时启动,若PG=0,则通过分段单元转换得出的即是物理地址。

分页机制管理的对象是固定大小的存储块,称为页(page)。
分页机制把整个线性地址空间及整个物理地址空间都看成由页组成,在线性地址空间中的任何一页,可以映射为物理地址空间中的任何一页。
80386把4GB的线性地址空间划分为4KB的页面,共有1M个。
32位的线性地址空间被划分成了3个部分:页目录(Page Directory)、页表(Page Table)和页内偏移(Offset)。
                                                  线性地址格式
                                   31            22 21         12 11        0
                                   |       pd       |       pt        |  offset  |
由上图,在页目录中含有1K(10bit)个目录项(Page Directory Entry,PDE),每个目录项指向一个页表;而在每个页表中也含有1K个页面描述符(页表项,Page Table Entry,PTE)。线性地址的转换分为两级完成,新增加了一个寄存器CR3作为指向当前页目录的指针。其转换过程如下:
1.从CR3中取得当前页目录的基地址;
2.以线性地址中的目录(pd)位段为下标,在页目录中取得相应页表的基地址;
   以线性地址中的页(pt)位段为下标,在所得到的页表中取得相应的页面描述项;
3.将所得到的页面描述项的基地址与线性地址中的偏移量(offset)位段相加得到物理地址。
阅读(1143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~