从上图可以看出,一个虚拟地址分为 3 部分:
- 高 10bit ,从一级页表里,确认到一个项
- 中间 10bit ,从二级页表里,确认到一个项
- 低 12bit ,作为页内偏移
- 最终上图得到的物理地址的低 12bit ,也是 0x050 (0x0000_C050)
实际上,从我之前了解的页表原理,大概也是这样的。
但是到了这个图,页内偏移居然要乘以 4 ,这我就很不理解了?
上图的话,有一个背景,就是让 一级页表的最后一个项,指向一级页表自身。因为在启用页表后,要改读写任何位置,包含改变页表的项的内容,都得经过 虚拟地址转换,这样做的话,就可以方便得 去改变一级页表的某个项的内容,不然的话,还得 做个一级页表二级页表的地址全映射。然后上图就是 这个场景中对虚拟地址的第 3 部分 做处理。
这个巧妙的过程,我看懂了。但是 为什么这里的页内偏移要乘以 4 ?
PS:内容来自书籍《 x86 从实模式到保护模式》
