传统存储管理方式的特征
- 一次性:作业必须一次性全部装入内存
- 驻留性:作业装入后一直驻留内存直至结束
局部性原理
- 时间局部性:刚被访问的指令/数据不久后很可能再次被访问
- 空间局部性:刚被访问的存储单元附近的单元很可能也被访问
虚拟存储器
特征
- 多次性:无需在作业运行时一次性全部装入,可分成多次调入
- 对换性:无需常驻内存,可换入换出
- 虚拟性:从逻辑上扩充内存容量
容量约束
- 虚存的实际容量 ≤ 内存容量和外存容量之和
- 虚存的最大容量 ≤ 计算机的地址位数能容纳的最大容量
实现方式
建立在离散分配的内存管理方式的基础上:
- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
虚拟存储只能基于非连续分配技术。
请求分页管理方式
- 页表机制新增字段:状态位 P、访问字段 A、修改位 M、外存地址
- 缺页中断机构:
- 在指令执行期间(而非一条指令执行完后)产生和处理中断信号,属于内部中断
- 一条指令在执行期间可能产生多次缺页中断
页面置换算法
| 算法 | 特点 |
|---|---|
| 最佳(OPT)置换算法 | 淘汰以后最长时间内不再被访问的页面;无法实现,用作评价标准 |
| 先进先出(FIFO)算法 | 实现简单;会出现 Belady 异常(分配页框增多反而缺页增多) |
| 最近最久未使用(LRU)算法 | 性能接近 OPT;实现开销大(需要对页的访问历史排序/记录) |
| 时钟(CLOCK)置换算法 / 最近未使用(NRU) | 循环扫描,简单的 CLOCK 只看访问位;改进型综合考虑访问位和修改位 |
Belady 异常:FIFO 算法会出现进程缺页次数随分配页框个数增加而增加的现象。
页面分配策略
- 驻留集大小:
- 固定分配局部置换
- 可变分配全局置换
- 可变分配局部置换
- 固定分配 + 全局置换不能组合使用
- 调入页面的时机:
- 预调页策略(运行前调入)
- 请求调页策略
- 从何处调入页面:外存的文件区(离散分配)与对换区(连续分配);分为系统拥有足够对换区空间、缺少对换区空间、UNIX 方式三种情况
抖动(颠簸)
刚换出的页面马上又要访问,频繁页面置换。发生原因:某个进程频繁访问的页面数目高于可用的物理页帧数目。
工作集
在某段时间间隔内,进程实际访问页面的集合。驻留集大小应与工作集大小匹配以防止抖动。