好嘞,下面是一个图示,展示 32 位分页机制 中,虚拟地址到物理地址 的翻译过程,包括 页目录(PDE) 和 页表(PTE) 中保存的内容👇
🧭 32 位虚拟地址结构(分页机制)
┌──────────────┬──────────────┬────────────────────┐
│ 目录索引 (10)│ 页表索引 (10) │ 页内偏移 (12位) │
├──────────────┼──────────────┼────────────────────┤
│ Bits 31~22 │ Bits 21~12 │ Bits 11~0 │
└──────────────┴──────────────┴────────────────────┘
↓ ↓ ↓
PDE索引 PTE索引 偏移量
🔄 地址转换流程图
[虚拟地址:0x12345678]
↓
┌────────────────────────────┐
│ 页目录基址(CR3) │
└────────────┬───────────────┘
↓
目录索引 = 0x48
↓
┌─────────────────────────────────────────────┐
│ 页目录项 PDE[0x48] │
│ → 内容:页表的物理地址 = 0x001AB000 + 标志位 │
└────────────┬────────────────────────────────┘
↓
页表地址 = 0x001AB000
页表索引 = 0xD1
↓
┌─────────────────────────────────────────────┐
│ 页表项 PTE[0xD1] │
│ → 内容:物理页框地址 = 0x003CF000 + 标志位 │
└────────────┬────────────────────────────────┘
↓
页内偏移 = 0x678
↓
┌─────────────────────────────────────────────┐
│ 最终物理地址 = 0x003CF000 + 0x678 = 0x003CF678 │
└─────────────────────────────────────────────┘
📦 页表/目录项结构(PDE/PTE)
位数范围 | 内容 |
---|---|
31~12 | 物理页框地址(高20位) |
11~0 | 标志位(存在、读写、用户等) |
例如:
PTE = 0x003CF007
→ 物理地址:0x003CF000
→ 标志位:P=1, RW=1, US=1
如果你有兴趣,我还可以做成图像(带箭头、颜色那种视觉图),要不要?