从图书馆借书聊内存管理:页式、段式与快表
📚 从图书馆借书聊内存管理:页式、段式与快表
在操作系统里,页式存储管理、段式存储管理 和 快表(TLB) 常常让人觉得抽象难懂。
今天,我们不妨用一个生活中的场景 —— 在图书馆借书 —— 来聊聊这三个概念。
1. 页式存储管理:切成小册子的书
想象一下,图书馆里的每本书都被硬生生切割成 固定大小的小册子,比如每册 50 页。
无论是小说还是字典,都要严格按照这个标准分册,然后把这些小册子随机放到不同书架。
读者如果要借 第 1 本书的第 120 页,就得这样找:
- 先确定这是 第几册(120 ÷ 50 = 第 2 册)。
- 再查“索引表”(页表),找到第 2 册存放的书架编号。
- 最后在小册子里定位到第 20 页(页内地址)。
📌 公式
1 | 物理地址 = (物理块号 × 页大小) + 页内地址 |
✅ 优点:管理方便,无外部碎片。
❌ 缺点:逻辑被打散,不符合程序结构。
2. 段式存储管理:按章节保存的书
另一位图书馆管理员更讲究逻辑:
- 小说保留“引言、正文、附录”;
- 字典按“A-C”、“D-F” 来分卷;
- 每个部分就是一个“段”,大小不一样。
读者要借 正文里的第 30 页:
- 先告诉管理员“正文”这个段。
- 管理员在“段表”里查到正文的 起始位置和长度。
- 确认没有越界后,定位到第 30 页。
📌 公式
1 | 物理地址 = 段基址 + 段内地址 |
✅ 优点:符合程序逻辑,支持共享与保护。
❌ 缺点:可能产生外部碎片。
3. 快表(TLB):管理员的小抄
聪明的管理员发现,有些段或小册子经常被借。
于是他在桌上放了一个“小本子”,随手记下最近常用的索引。
- 命中:立刻找到,不必去翻大索引。
- 未命中:只能去查完整的页表或段表,并把结果更新到本子。
📌 快表本质
- 它不是新的管理方法
- 它是对地址转换的 缓存加速器
4. 直观对比

- Paged:把书切成小册子,方便管理。
- Segmentation:按章节保存,更符合逻辑。
- TLB:管理员的小抄,加快查找速度。
5. 公式对比表
管理方式 | 地址结构 | 转换公式 | 特点 |
---|---|---|---|
页式存储管理 | (页号 p, 页内地址 d) | 物理地址 = (物理块号 × 页大小) + 页内地址 | 消除了外部碎片,管理方便,但内容被拆散 |
段式存储管理 | (段号 s, 段内地址 w) | 物理地址 = 段基址 + 段内地址 (需检查 w ≤ 段长) | 符合逻辑结构,支持共享与保护,但可能产生外部碎片 |
快表(TLB) | 页号/段号 + 偏移 | 命中:直接得到物理块号/段基址;未命中:访问完整页表/段表 | 缓存加速工具,不改变存储方式,只优化访问速度 |
6. 考点注意事项
-
页式 vs 段式 区别
- 页大小固定,段大小可变。
- 页表项只存物理块号,段表项要存基址和段长。
- 页式只需检查“页号范围”;段式还要检查“段内地址 ≤ 段长”。
-
快表考点
- 快表用于加速页表或段表查找,本质是缓存(常考“是否新的存储方式?” → 不是)。
- 命中时减少一次内存访问,未命中时要访问快表 + 主存。
-
常见易错点
- 页式没有外部碎片,但有内部碎片。
- 段式可能产生外部碎片,但不会有内部碎片。
🎯 小练习
题目 1:
某系统采用页式存储管理,页面大小为 1KB。
逻辑地址共 14 位,其中页号占 6 位。
问:
- 页内地址占多少位?
- 系统最多可有多少个逻辑页?
- 最大逻辑地址空间是多少?
题目 2:
某进程采用段式存储管理。
- 段表如下(基址以字节为单位):
段号 | 基址 | 段长 |
---|---|---|
0 | 2000 | 600 |
1 | 4000 | 1000 |
2 | 8000 | 1200 |
如果逻辑地址为:
- (1, 700)
- (2, 1500)
请判断能否访问,并给出物理地址。
✅ 答案解析(点我展开)
题目 1 解答:
- 页面大小 = 1KB = 2^10 → 页内地址 = 10 位。
- 页号 = 6 位 → 页数 = 2^6 = 64 页。
- 总逻辑空间 = 页数 × 页面大小 = 64 × 1KB = 64KB。
题目 2 解答:
- (1, 700) → 段 1 长度 = 1000,700 < 1000 ✅ 合法
物理地址 = 基址 4000 + 700 = 4700 - (2, 1500) → 段 2 长度 = 1200,1500 > 1200 ❌ 越界错误
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sylvaire Blog!