虚拟地址和物理地址
虚拟地址和物理地址
每一个进程都有自己的虚拟地址
虚拟地址通过页表来映射物理地址
页大小(212=4KB)
| 位段 | 名称 | 位数 | 含义 |
|---|---|---|---|
| [47–39] | PML4 索引 | 9 | 页表第 4 级索引 |
| [38–30] | PDPT 索引 | 9 | 页表第 3 级索引 |
| [29–21] | PD 索引 | 9 | 页表第 2 级索引 |
| [20–12] | PT 索引 | 9 | 页表第 1 级索引 |
| [11–0] | 页内偏移 | 12 | 页内字节偏移 |
具体流程:
当 CPU 访问一个虚拟地址(VA)时:
1 取出页表基址寄存器 CR3(指向当前进程页表的根——PML4 表的物理地址)
2 按上表分解虚拟地址成四个索引(PML4, PDPT, PD, PT)
3逐级查表:
- 从 CR3 指向的物理地址(PML4)中找到 PML4 索引对应的项,得到下一层(PDPT)的物理地址;
- 在 PDPT 中查 PDPT 索引 → 得 PD;
- 在 PD 中查 PD 索引 → 得 PT;
- 在 PT 中查 PT 索引 → 得最终物理页框号(frame number)。
4 组合: - 把物理页框号 左移 12 位 加上页内偏移,即物理地址。
5放入 TLB 缓存,以后访问相同页不必再查页表。
具体流程图如下:
CPU发出VA
│
▼
查TLB —— 命中? ───────► 直接得到PA
│Miss
▼
MMU读取页表(从CR3开始逐级查)
│
▼
找到物理页帧号 + 偏移
│
▼
组合成PA ——> 访问内存或Cache
页表项的高速缓存TLB:让 VA→PA 的过程不必每次都走多级页表。