在操作系统中,分页存储管理通过将逻辑地址空间和物理内存划分为固定大小的页面与物理块,实现内存的离散分配与高效管理。以下是对你提供内容的系统化总结与解析:
1. 分页地址结构(32位系统)
- 地址长度:32 位
- 页号(Page Number):
- 占用高 20 位(第 12~31 位)
- 可表示 220=1,048,5762^{20} = 1,048,576220=1,048,576 个页(即约 1M 页)
- 页内偏移(Offset):
- 占用低 12 位(第 0~11 位)
- 表示每页大小为 212=40962^{12} = 4096212=4096 字节 = 4KB
📌 示例:逻辑地址
0x00401234(十六进制)
转换为二进制后取高 20 位为页号,低 12 位为页内地址。
实际计算中可简化为:
- 页号 = 地址 / 4KB =
0x00401234 >> 12- 偏移 = 地址 % 4KB =
0x00401234 & 0xFFF
2. 页表的作用
- 每个进程拥有一个页表,记录其逻辑页到物理内存块的映射关系。
- 页表项(PTE)基本结构:
[有效位 | 物理块号 | 访问控制信息] - 核心功能:
- 将逻辑地址中的“页号”转换为“物理块号”
- 支持虚拟内存、共享内存、保护机制等高级特性
地址变换流程:
- 从逻辑地址中提取 页号 P 和 页内地址 d
- 检查页号是否越界(P ≥ 页表长度?若成立则抛出“地址越界”异常)
- 查页表:以 P 为索引,查找对应的物理块号
f - 组合物理地址:
物理地址 = f × 页面大小 + d
✅ 举例:
若页号 P=5,查得物理块号 f=10,页内偏移 d=0x234
则物理地址 =10 × 4096 + 0x234 = 40960 + 564 = 41524
3. 地址变换的实现机制
- 页表寄存器(PTR):
- 存放当前运行进程页表的起始地址(基址)和页表长度
- 进程切换时由 OS 更新 PTR 内容
- 地址转换过程由硬件自动完成:
- CPU 的 MMU(内存管理单元)使用页表寄存器中的基址,加上页号作为索引,访问页表获取物理块号
- 然后拼接偏移量生成最终物理地址
⚠️ 性能问题:每次访存需两次内存访问(一次查页表,一次读数据)
✅ 解决方案:引入 快表(TLB, Translation Lookaside Buffer) 缓存常用页表项,提升命中速度
这类机制是现代操作系统实现虚拟内存的基础,支持多任务并发执行、内存隔离与保护。
快表(TLB,Translation Lookaside Buffer) 是一种位于 CPU 中的高速缓存,专门用于缓存页表中的部分映射条目,即“页号 → 物理块号”的映射关系。它是虚拟内存系统中提升地址变换速度的关键硬件机制。
为什么需要 TLB?
在分页系统中,每次访问内存都需要:
- 根据逻辑地址提取页号;
- 查页表得到对应的物理块号;
- 拼接物理块号与页内偏移,生成物理地址。
由于页表通常存储在主存中,每一次地址转换都需要至少一次额外的内存访问来查页表,导致每个内存访问至少需要两次访存(查页表 + 实际访问数据),性能下降约50%以上。
✅ TLB 的作用就是避免每次都访问内存中的页表,通过将最近使用的页表项缓存在高速缓冲中,实现快速查找。
TLB 如何工作?
逻辑地址
↓
[页号] [页内偏移]
↓
查 TLB —— 命中? → 是:直接获取物理块号
↓否
访问内存中的页表 → 获取物理块号,并写入 TLB(替换策略)
↓
生成物理地址 → 访问实际内存
工作流程:
- CPU 给出逻辑地址,提取出“页号”;
- 在 TLB 中并行查找是否存在该页号的映射记录(使用相联存储器或组相联结构);
- 若命中(Hit):直接从 TLB 读取对应的物理块号,无需访问主存页表;
- 若未命中(Miss):再通过页表寄存器定位页表,访问主存查找页表项,获得物理块号,并将其加载进 TLB(可能替换旧条目);
- 将物理块号与页内偏移拼接成物理地址,完成访问。
TLB 的特点
| 特性 | 说明 |
|---|---|
| 速度极快 | 存取时间通常为 1~2 个时钟周期(比主存快数十倍) |
| 容量小 | 一般只有 16 ~ 1024 个表项(受限于成本和速度) |
| 全相联或组相联结构 | 支持快速匹配页号 |
| 进程切换时需清空或标记失效 | 因不同进程页表不同,否则会导致错误映射 |
💡 有些 TLB 支持 ASID(Address Space ID) 标记,允许不同进程的条目共存,减少刷新频率。
性能影响示例
假设:
- TLB 命中时间:1 ns
- 主存访问时间:100 ns
- TLB 命中率:90%
则平均地址变换时间为:
= 90% × (1 + 100) + 10% × (1 + 100 + 100)
= 0.9×101 + 0.1×201 = 90.9 + 20.1 = 111 ns
相比无 TLB 时的 200 ns,性能显著提升!
✅ 总结:TLB 是通过缓存高频使用的页表项,减少对主存页表的访问次数,从而加速逻辑地址到物理地址的转换过程,是现代操作系统与处理器协同优化内存性能的核心技术之一。


1143

被折叠的 条评论
为什么被折叠?



