内存管理

官官方信息技术老师·8 页·深入(追求细节与边界)·0 次浏览·33 天前
信息技术大学

内存管理

计算机基础面试八股 · 第 2 章 操作系统

按 空格/→ 演示下一步

问一句
1 / 8 页

全部页面点击任意一页,跳回舞台从这页播放

信息技术大学

内存管理

计算机基础面试八股 · 第 2 章 操作系统

1第 1 页 · 内存管理

虚拟内存与多级页表

每个进程都有独立的大地址空间:虚拟地址经多级页表翻译成物理地址。

地址翻译
虚拟地址按页映射物理页,MMU 查页表完成
多级页表
树形分层,未使用的分支不建表,省内存
TLB 缓存
翻译结果缓存,命中可免多次访存
隔离保护
进程地址空间独立,互不可见不可越界
2第 2 页 · 虚拟内存与多级页表

缺页中断与页面置换算法

访问的页不在内存就触发缺页中断:内核调入页面,内存满就要挑一个牺牲者。

缺页中断
访问未映射页触发,内核从磁盘调入该页
LRU
淘汰最久未使用的页,贴近热点但维护贵
时钟算法
环形扫描访问位,LRU 的低成本近似
局部性
时间与空间局部性是置换有效的前提
3第 3 页 · 缺页中断与页面置换算法

分段与段页式内存

分段按逻辑单元划分,分页按固定大小切;段页式先分段再分页,两全其美。

分页
固定大小切分,外部碎片为零
分段
按代码/数据等逻辑段划分,便于共享与保护
段页式
段内再分页,逻辑清晰兼碎片可控
4第 4 页 · 分段与段页式内存

内存泄漏与排查手段

泄漏是拿了不还:长期服务内存爬升不回落,要靠工具定位到分配点。

成因
忘记释放、失去引用、缓存无界增长
表现
内存单调爬升,最终 OOM 被系统杀掉
排查
堆快照对比、分配追踪、profiling 工具
5第 5 页 · 内存泄漏与排查手段

内存池思想

频繁 malloc/free 有开销与碎片:一次批发,零售使用,池化复用。

预分配
启动或初始化时批发大块内存
固定分级
按尺寸分级池化,分配释放 O(1)
收益
降低碎片,分配路径走缓存提速
6第 6 页 · 内存池思想

本节要点

  • ✓虚拟内存隔离进程,页表负责翻译
  • ✓TLB 命中免访存,缺页中断来补页
  • ✓时钟算法是 LRU 的廉价近似
  • ✓池化:批发大块零售使用
延伸主题:写个 LRU 模拟置换抓一次进程内存曲线
7第 7 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1TLB 为什么至关重要?没有它会怎样?

参考答案多级页表意味着一次地址翻译要多次访存,每次访存都翻倍变慢;TLB 把翻译结果缓存起来,命中率通常 95% 以上,没有它虚拟内存的性能根本不可用。

2LRU 理论最优却少有直接实现,为什么?

参考答案精确 LRU 每次访存都要更新时间戳或移动链表,开销太大;实践多用时钟算法等近似,只扫访问位,牺牲一点命中率换来 O(1) 的维护成本。

3内存泄漏在带 GC 的语言里还会发生吗?

参考答案会。GC 回收的是「不可达」对象;被全局 Map、静态集合、监听器长期引用的对象永远可达,就是泄不走。无界缓存是 GC 时代最常见的泄漏形态。

8第 8 页 · 课后思考