Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96136
  • 博文数量: 17
  • 博客积分: 366
  • 博客等级: 一等列兵
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-16 16:31
文章分类

全部博文(17)

文章存档

2011年(17)

我的朋友

分类: Delphi

2011-09-28 15:43:32

在保护模式下,分段将逻辑地址转换到线性地址,而分页则将线性地址转换到最终的物理地址。通过cr0pg标志可以启用分页。

页和页框

为了效率起见,线性地址被分成以固定长度为单位的组,称为页,在同一个页内部连续的线性地址所对应的物理地址也是连续的。分页单元将所有的RAM分成固定长度的页框,页和页框的大小完全一致。页是一段数据,而将这段数据置于物理存储中,这个整体存在就是页框。页是一个数据段而页框是主存的一部分,页可以放置到页框中。

线性地址和页目录、页表

32位的线性地址分为三个域:最高十位是页目录,中间十位是页表,最后十位是在页表中的偏移。

                                          图3

线性地址到物理地址的变换是基于两个转换表的,分别是页目录表和页表。当前正在使用的页目录的地址放在cr3中,而线性地址的前十位正是指定页目录中的目录项,每个目录项中指定一个页表,而线性地址的中间十位则是页表中的表项。这个表项中就有该页所在页框的物理地址,再加上最后的偏移值,就完成了从线性地址到物理地址的转换。

物理地址扩展和页目录指针

为了扩大内存寻址的能力,对4G以上的内存寻址,Intel将处理器上的管脚数目提高到了36个,为了充分的支持这36和管脚,Intel设计的物理地址扩展(PAE)机制。通过cr4寄存器的PAE标志可以启用物理地址扩展。

PAE机制的使用则会改变线性地址的解析方式,其中最重要的就是一种称为页目录指针PDPT的结构的引入。

页目录指针是一个新的转换表级别,它有四个表项。cr3此时指向这样一个PDPT

在把线性地址映射到一个4k的页时,转换的过程如下:

线性地址的最高10位指向PDPT四个表项中的一个,次高10位指向页目录512个项中的一个,再低10位指向页表中512个项中的一个,最后的10位则指向页框中的偏移地址。

而把线性地址映射到一个1m的页式,则去掉了页表这个转换表,直接在512个页目录的某项上用20位的偏移地址。

分页物理地址和转换后援缓冲器

这种基于转换表的线性地址到物理地址的变化同样降低了效率,因此Intel引入了转换后援缓冲器(TLB)。它将已经使用的线性地址到物理地址的转换记录下来,以供快速使用,只有当cr3中的内容改变时,TLB的内容才会被重新填充。



参考书籍

《深入理解Linux内核》第三版 

阅读(2338) | 评论(0) | 转发(0) |
0

上一篇:分段的一些细节

下一篇:没有了

给主人留下些什么吧!~~