x86汇编语言-从实模式到保护模式

地址转换

开启分页机制,虚拟地址要经过页部件的转换,才能得到物理地址。

处理器的页部件专门负责线性地址的转换工作,首先将段部件送来的32位线性地址截成3段

  • 高10位-页目录的索引
  • 中间10位-页表索引
  • 低12位-页内偏移

1 示意图

2 步骤

2.1 操作系统建立映射

当任务加载时,操作系统先创建虚拟的段,并将段地址的高20位决定它要用到哪些页目录项和页表项。然后,寻找空闲的页,将原本应该写入段中的数据写到一个或者多个页中,并将页的物理地址填写到相应的页表项中。只有这样做了,当程序运行的时候,才能以相反的顺序进行地址转换,找到正确的数据。

2.2 寻址过程

当前任务页目录的物理地址在处理器的CR3寄存器中,假设它的内容为0x00005000

  • 段管理部件输出的线性地址是0x00801050,其二进制形式为0000 0000 1000 0000 0001 0000 0101 0000

  • 高10位为0000000010,也就是十六进制的0x002,它是目录表内的索引,处理器将它乘以4(因为每个目录项为4字节),作为偏移量访问页目录。最终,处理器从物理地址00005008处取得页表的物理地址0x08001000

  • 线程地址的中间10位为二进制的0000000001,即0x001,处理器要用它作为页表内的索引来取得页的物理地址。处理器将该索引值乘以4,作为偏移量访问页表。最终,处理器从物理地址08001004处取得页的物理地址。

  • 页的物理地址是0x0000C000,而线性地址的低12位是数据所在的页内偏移量。故处理器将它们相加,得到物理地址0x0000C050,这就是线性地址0x00801050所对应的物理地址,要访问的数据就在这里。


x86汇编语言-从实模式到保护模式
https://bannirui.github.io/2023/02/28/x86汇编语言-从实模式到保护模式/
作者
dingrui
发布于
2023年2月28日
许可协议