操作系统八股文03-内存管理
1. 覆盖与交换
- 覆盖:同一进程内对页进行覆盖
- 交换:中级调度,在内存紧张时将不常用的进程换出
2. 连续分配
2.1 单一连续分配
- 内存中只有一个作业,用于单用户、单任务的操作系统
- 无外部碎片,有内部碎片
2.2 固定分区分配
- 多个分区,每个分区只存放一个作业
分区过小时,使用覆盖技术;分区过大时,有外部碎片。
2.3 动态分区分配
- 按需分配,分区大小、数量可变
- 有外部碎片,无内部碎片
- 分配算法
- 首次适应算法
- 最佳适应算法
- 最坏适应算法
- 邻近适应算法(循环首次适应算法)
通过紧凑技术,可以合并空闲块,消除外部碎片
3. 离散分配
3.1 分页
- 内存划分为若干个固定大小的页,以页为单位将内存分配给进程
- 无外部碎片,有内部碎片(理论上内部碎片大小为半个页)
- 每个进程都维护一个页表,实现从逻辑地址到物理地址的映射
-
地址翻译过程:
- 无快表:页号 -> 越界检查 -> 查页表 -> 页框号
- 有快表:页号 -> 查快表 -> 越界检查 -> 查页表 -> 页框号
- 快表命中时,可以直接拿到页框号
-
每个页表映射空间为整个内存,存储页表会浪费空间,此时可以使用多级页表进行压缩,其中二级页表不使用时可以不分配
- 进程中的单位为页,内存中的单位为页框,外存中的单位为块,三者概念类似。
- 页表每个进程独有,快表所有进程共享,需要解决快表在不同进程中的冲突问题(增加进程标识字段、刷表)
3.2 分段
- 内存划分为若干个段,段长不固定,以段为单位将内存分配给进程
- **地址翻译过程:**段号 -> 越界检查 -> 查页表 -> 块号
分页存储中的越界检查:页号是否越界
分段存储中的越界检查:段号是否越界、段内偏移是否越界
4. 虚拟分配**(扩大逻辑内存)**
4.1 局部性原理
- 时间局部性
- 空间局部性
4.2 请求分页
- 页表项:页号、页框号、状态位P、访问字段A、修改位M、外存地址
- 状态位P:标识该页是否在内存中
- 访问字段A:该页在一段时间内的访问次数
- 修改位M:该页调入内存后是否被修改
- 页面置换算法:OPT、FIFO、LRU、CLOCK、改进CLOCK
抖动:频繁的页面置换