参考文档:3.6、3.7、3.8、3.9节
INTEL技术白皮书.pdf
1.分页机制下的线性地址转换
1.1线性地址转换(4KB页)
- 在4KB的分页机制下,线性地址被分为3部分:
- 页目录表项(第22-31位):作为一个页目录表项在页目录中的偏移量。这个页目录表项提供了一个页表的物理基地址。
- 页表项(第12-21位):提供了一个表项在所选的页表中的偏移量。这个表项提供了物理内存页的物理基地址。
- 页偏移量(第0-11位):提供了该地址在页中的偏移量。
- 线性地址的页目录部分(Directory)占10位,则页目录表可以最大含有2的10次方(1024)个表项;线性地址的页表项部分(Table)占10位,则页表中最大可以含有2的10次方(1024)个表项;所以一共能够定位到的页面数量是1024x1024个。
地址转换方式是:
在4MB分页机制下,线性地址被分为2部分:
- 页目录表项(第22-31位)提供了该表项在页目录中的偏移量。该表项提供·了4MB的页的物理基地址。
- 页偏移量(第0-21位)提供了该地址在页中的偏移量。
地址转换方式是:
页目录项也就是指在页目录中的一个表项,页表项也就是在页表中的一个表项:
- 使用4KB分页的页目录项个页表项的结构如下图所示:
- 使用4MB分页时,记录分页信息的只有页目录表,所以只存在页目录表项:
3.逻辑地址、线性地址和物理地址
- 逻辑地址由一个16位的段选择符合一个32位的偏移量组成。段选择符确定该字节位于哪个段,偏移量确定这个字节相对于段基址在这个段中的位置。逻辑地址只是逻辑上存在,实际上物理上不存在。比如我们汇编指令使用寄存器寻址给出的地址:DS:[val],这就可以看做是一个逻辑地址。
- 线性地址是处理器线性地址空间内的32位的地址。线性地址和物理地址一样,是平坦的(不分段的),空间大小为2的32次方字节。
- 在保护模式下,intel架构提供最大的4GB(2的32次方字节)的物理空间,这是处理器能够在地址总线上寻址的范围。这个地址空间是平坦的(未分段的),范围从0x0000000到0xFFFFFFFF。
- 逻辑地址转换为线性地址的步骤:
1.通过段选择符中的偏移量,在GDT或者LDT中定位该段的段描述符。(仅当一个新的段选择符被读入段寄存器时才执行这一步)。
2.检查段描述符中的访问权限和段的地址范围以确保该段是可访问的,偏移量是在段限长范围内的。
3.将段描述符中的段基址与偏移量相加以构成线性地址。
- 当操作系统在保护模式下,有两种地址映射方式:
- 第一种是在系统默认的分段机制下,直接将线性地址映射到一个大的物理空间(4GB的RAM)。这种情况下,线性地址就是物理地址。
- 第二种是在开启分页机制时,处理器将线性地址划分为固定尺寸的页(通常一页是4KB),这些页可以被映射到物理内存或者磁盘的存储空间。页在物理内存中的位置保存在两个类型的数据结构中(页目录和页表),这两个数据结构都保存在物理内存中。如果启用了分页,一个数据结构可以部分在内存,部分在磁盘。