以下是一个示例,展示了如何用「省 / 市 / 县」来对应三层页表,并且直接在每一位上标注"这是省位、市位、县位"。为了便于演示,这里假设我们是 **32 位虚拟地址**,且使用了**三层页表**的典型切分方式:
- **顶层页表 (PDE)**:10 位——类比"省" Page Directory Entry(页目录项)
- **中间层页表 (PTE)**:10 位——类比"市" Page Table Entry(页表项)
- **页内偏移 (offset)**:12 位——类比"县"
这样,整个 32 位虚拟地址可分为:
```Java
[ PDE省(10 bits) | PTE市(10 bits) | offset县(12 bits) ]
```
下面给出一个具体的二进制示例,取一串虚拟地址的 32 位来演示(用空格分段):
```Java
0101010101 1100110011 101010101010
↑ ↑ ↑
省级PDE 市级PTE 县级offset
```
- **前 10 位 (0101010101)**:省级(PDE)
- **中 10 位 (1100110011)**:市级(PTE)
- **后 12 位 (101010101010)**:县级(offset)
如果你想"逐位"都标注上对应的"省 / 市 / 县",可以写成:
1. **PDE(省)部分**:10 位
```Java
省0 省1 省0 省1 省0 省1 省0 省1 省0 省1
```
(对应二进制 0 1 0 1 0 1 0 1 0 1)
2. **PTE(市)部分**:10 位
```Java
市1 市1 市0 市0 市1 市1 市0 市0 市1 市1
```
(对应二进制 1 1 0 0 1 1 0 0 1 1)
3. **offset(县)部分**:12 位
```Java
县1 县0 县1 县0 县1 县0 县1 县0 县1 县0 县1 县0
```
(对应二进制 1 0 1 0 1 0 1 0 1 0 1 0)
---
## 对应关系
- **"省"**(PDE):确定**顶层页表**,先划定大范围
- **"市"**(PTE):在"省"内再进一步定位市级范围
- **"县"**(offset):在"市"里找到最终具体的"县",也就是落到物理页框中的具体偏移
因此,整个地址翻译就像先选省,再选市,最后选到具体县一样,三级拆分后找到最终对应的物理内存位置。这样一来,每个比特都可以打上"省 / 市 / 县"的标签,看起来就很形象了。