虚拟地址到物理地址转换指南 | Guide to Virtual-to-Physical Address Translation
基本概念 | Basic Concepts
- 虚拟地址 (VA) | Virtual Address (VA): 程序使用的地址
- 物理地址 (PA) | Physical Address (PA): 实际内存中的地址
- 页 | Page: 固定大小的内存块
- 页表 | Page Table: 存储 VA 到 PA 映射的数据结构
- 页表项 (PTE) | Page Table Entry (PTE): 页表中的单个条目
- 页偏移 | Page Offset: 页内的偏移量
系统参数 | System Parameters
- 物理内存大小 | Physical Memory Size
- 虚拟内存大小 | Virtual Memory Size
- 页大小 | Page Size
- 页表大小 | Page Table Size
地址结构 | Address Structure
虚拟地址 | Virtual Address
[ 虚拟页号 | Virtual Page Number (VPN) ][ 页偏移 | Page Offset ]
物理地址 | Physical Address
[ 物理页框号 | Physical Frame Number (PFN) ][ 页偏移 | Page Offset ]
转换步骤 | Translation Steps
-
计算地址位数 | Calculate Address Bits
- 虚拟地址位数 = | Virtual address bits =
- 物理地址位数 = | Physical address bits =
-
计算偏移位数 | Calculate Offset Bits
- 偏移位数 = | Offset bits =
-
计算页号位数 | Calculate Page Number Bits
- 虚拟页号位数 = 虚拟地址位数 - 偏移位数 | VPN bits = Virtual address bits - Offset bits
- 物理页框号位数 = 物理地址位数 - 偏移位数 | PFN bits = Physical address bits - Offset bits
-
拆分虚拟地址 | Split Virtual Address
- 提取虚拟页号 (VPN) | Extract Virtual Page Number (VPN)
- 提取页偏移 | Extract Page Offset
-
查找页表 | Look up Page Table
- 使用 VPN 作为索引查找对应的 PTE | Use VPN as index to find corresponding PTE
- 从 PTE 中获取物理页框号 (PFN) | Get Physical Frame Number (PFN) from PTE
-
组合物理地址 | Combine Physical Address
- 将 PFN 和页偏移组合形成物理地址 | Combine PFN and Page Offset to form Physical Address
TLB 在地址转换中的使用 | Using TLB in Address Translation
TLB 查询时机 | When to Query TLB
在每次内存访问开始时,在查询页表之前,处理器都会首先查询 TLB。
At the beginning of each memory access, the processor queries the TLB before consulting the page table.
TLB 查询步骤 | TLB Query Steps
-
提取虚拟页号(VPN)| Extract Virtual Page Number (VPN)
- 从虚拟地址中提取 VPN 部分
- Extract the VPN portion from the virtual address
-
并行比较 TLB 条目 | Parallel Comparison of TLB Entries
- 将 VPN 与所有 TLB 条目的标记字段并行比较
- Compare the VPN with the tag fields of all TLB entries in parallel
-
检查匹配项 | Check for a Match
- 如果找到匹配项,检查其有效位
- If a match is found, check its valid bit
-
验证访问权限 | Verify Access Permissions
- 检查 TLB 条目中的保护位,确保当前访问操作(读/写/执行)是允许的
- Check the protection bits in the TLB entry to ensure the current access operation (read/write/execute) is permitted
使用 TLB 项转换地址 | Using TLB Entry for Address Translation
如果 TLB 命中(找到匹配且有效的条目):
If there’s a TLB hit (a matching and valid entry is found):
-
提取物理页框号(PFN)| Extract Physical Frame Number (PFN)
- 从匹配的 TLB 条目中获取 PFN
- Retrieve the PFN from the matching TLB entry
-
合成物理地址 | Synthesize Physical Address
- 将 PFN 与原始虚拟地址的页内偏移组合,形成完整的物理地址
- Combine the PFN with the page offset from the original virtual address to form the complete physical address
-
执行内存访问 | Perform Memory Access
- 使用生成的物理地址访问内存
- Access the memory using the generated physical address
TLB 缺失处理 | Handling TLB Miss
如果 TLB 未命中:
If there’s a TLB miss:
-
查询页表 | Consult Page Table
- 执行常规的页表遍历过程
- Perform the regular page table walk process
-
更新 TLB | Update TLB
- 将新的 VPN 到 PFN 映射添加到 TLB 中
- Add the new VPN to PFN mapping to the TLB
-
重试内存访问 | Retry Memory Access
- 使用更新后的 TLB 重新开始地址转换过程
- Restart the address translation process with the updated TLB
示例 | Example
假设 | Suppose:
- 虚拟内存大小 = 4GB | Virtual memory size = 4GB
- 物理内存大小 = 2GB | Physical memory size = 2GB
- 页大小 = 4KB | Page size = 4KB
-
计算地址位数 | Calculate address bits
- 虚拟地址位数 = = 32 位 | Virtual address bits = = 32 bits
- 物理地址位数 = = 31 位 | Physical address bits = = 31 bits
-
计算偏移位数 | Calculate offset bits
- 偏移位数 = = 12 位 | Offset bits = = 12 bits
-
计算页号位数 | Calculate page number bits
- 虚拟页号位数 位 | VPN bits bits
- 物理页框号位数 = 位 | PFN bits = bits
-
虚拟地址结构 | Virtual address structure
[ VPN (20 bits) ][ Offset (12 bits) ]
-
物理地址结构 | Physical address structure
[ PFN (19 bits) ][ Offset (12 bits) ]
-
转换过程 | Translation process
- 给定虚拟地址
0x8A5C3
| Given virtual address0x8A5C3
- 拆分: VPN =
0x8A5
(2213), Offset =0x1C3
(451) | Split: VPN =0x8A5
(2213), Offset =0x1C3
(451) - 查找页表,假设
PTE[2213] = 0x40A2C
| Look up page table, suppose `PTE[2213] = 0x40A2C - 组合:
PA = (0x40A2C << 12) + 0x1C3 = 0x40A2C1C3
| Combine:PA = (0x40A2C << 12) + 0x1C3 = 0x40A2C1C3
- 给定虚拟地址
注意事项 | Notes
多级页表 | Multi-level Page Tables
- 对于大型虚拟地址空间,可能使用多级页表 | For large virtual address spaces, multi-level page tables may be used
- 转换过程类似,但需要多次查表 | Translation process is similar but requires multiple table lookups