传统存储管理方式的特征

  • 一次性:作业必须一次性全部装入内存
  • 驻留性:作业装入后一直驻留内存直至结束

局部性原理

  • 时间局部性:刚被访问的指令/数据不久后很可能再次被访问
  • 空间局部性:刚被访问的存储单元附近的单元很可能也被访问

虚拟存储器

特征

  • 多次性:无需在作业运行时一次性全部装入,可分成多次调入
  • 对换性:无需常驻内存,可换入换出
  • 虚拟性:从逻辑上扩充内存容量

容量约束

  • 虚存的实际容量 ≤ 内存容量和外存容量之和
  • 虚存的最大容量 ≤ 计算机的地址位数能容纳的最大容量

实现方式

建立在离散分配的内存管理方式的基础上:

  • 请求分页存储管理
  • 请求分段存储管理
  • 请求段页式存储管理

虚拟存储只能基于非连续分配技术。

请求分页管理方式

  • 页表机制新增字段:状态位 P、访问字段 A、修改位 M、外存地址
  • 缺页中断机构:
    • 在指令执行期间(而非一条指令执行完后)产生和处理中断信号,属于内部中断
    • 一条指令在执行期间可能产生多次缺页中断

页面置换算法

算法特点
最佳(OPT)置换算法淘汰以后最长时间内不再被访问的页面;无法实现,用作评价标准
先进先出(FIFO)算法实现简单;会出现 Belady 异常(分配页框增多反而缺页增多)
最近最久未使用(LRU)算法性能接近 OPT;实现开销大(需要对页的访问历史排序/记录)
时钟(CLOCK)置换算法 / 最近未使用(NRU)循环扫描,简单的 CLOCK 只看访问位;改进型综合考虑访问位和修改位

Belady 异常:FIFO 算法会出现进程缺页次数随分配页框个数增加而增加的现象。

页面分配策略

  • 驻留集大小:
    • 固定分配局部置换
    • 可变分配全局置换
    • 可变分配局部置换
    • 固定分配 + 全局置换不能组合使用
  • 调入页面的时机:
    • 预调页策略(运行前调入)
    • 请求调页策略
  • 从何处调入页面:外存的文件区(离散分配)与对换区(连续分配);分为系统拥有足够对换区空间、缺少对换区空间、UNIX 方式三种情况

抖动(颠簸)

刚换出的页面马上又要访问,频繁页面置换。发生原因:某个进程频繁访问的页面数目高于可用的物理页帧数目。

工作集

在某段时间间隔内,进程实际访问页面的集合。驻留集大小应与工作集大小匹配以防止抖动。