起因

  1. 内存需求越来越大
  2. 理想中的存储器: 更大、更快、更便宜的非易失性存储器

覆盖技术

  • 将程序的一部分放入内存进行执行,需要程序员编程时对程序进行设计,对程序员的要求高
  • 有固定的一块代码段放入主存,将程序进行分级,同一级不会相互调用的程序防一段,进行覆盖操作

    交换技术

  • 将程序进程进行换入换出操作,能够获取进程的数据和状态

  • 缺点是:程序较大,换入换出操作成本高

    虚拟技术

    目标:
  • 像覆盖技术那样,将程序的部分的内容放在内存中

  • 像交换技术那样,能够实现进程在内存与外存之间交换

程序的局部性原理
  • 时间局部性
  • 空间局部性

虚拟页式内存管理
  • 页表项
    • 逻辑页号
    • 访问位: 表示该页是否被访问过,用于页面置换算法
    • 修改位:表示该页是否被修改过。当系统回收该物理页面时,根据此位来决定是否把它的内容写回外存
    • 保护位:允许对该页做何种类型的访问
    • 驻留位:表示该页是在内存还是外存
    • 物理页帧号
  • 缺页中断处理过程
    • 缺页中断的产生:逻辑页访问时,发现对应的物理页不在内存中,则产生缺页异常。缺页中断处理过程则需将外存中对应的物理页加载至内存中,使程序能够访问到该物理页后,进行后续的执行过程
      1. 判断内存中是否有空闲的物理页面,则分配一物理页帧f,然后转第四步,否则转第二步
      1. 采用某种页面置换算法,选择一个被替换的物理页帧f,它所对应的逻辑页面为q。如果该页在内存期间被修改过,则需将该页写回外存
      1. 将q所对应的页表进行修改,将驻留位置为0(即对应的物理页不在内存中)
      1. 将需要访问的页面p加载到物理页面f当中
      1. 修改p所对应的页表项,将物理页帧号置为f,将驻留位置为1
      1. 重新运行被中断的指令
  • 后备存储
    • 文件:可能映射文件(在二级存储中)的某个位置
    • 代码段
    • 动态加载的共存库程序段
    • 其他段:可能被映射到的交换文件
  • 虚拟内存性能
    • 有效存储器访问时间(effective memory access time EAT)
    • EAT = 访存时间 页表命中几率 + page fault处理时间 page fault 几率
    • 例子:

访存时间: 10ns
磁盘访问时间: 5ms
参数p = page fault 几率
参数q = dirty page 几率
EAT = 10(1-p) + 5000000p(1+q)