虚拟存储

随着用户使用数据的增加,计算机系统本身的物理内存不足以满足用户的正常使用需求。早期的操作系统通过交换来解决内存不足的问题,现代操作系统则大多采用虚拟存储方式,在有限的内存中,只装入部分页面,在需要的页面或段不在内存中时再将相应的段或页调入内存。

虚拟存储的需求背景

计算机系统时常出现内存空间不够用,解决方案:

  • 覆盖(overlay):应用程序手动把需要的指令和数据保存在内存中
  • 交换(swapping):操作系统自动把暂时不能执行的程序保存到外存中
  • 虚拟存储:在有限容量的内存中,以页为单位自动装入更多更大的程序

覆盖技术

覆盖技术目标

在较小的可用内存中运行较大的程序 (无法满足一个程序所需要的内存资源)

覆盖技术实现方法

依据程序的逻辑结构 将程序模块划分为若干功能相对独立的模块
将不会同时执行的模块共享同一块内存区域

  • 必要部分(常用功能)的代码和数据常驻内存
  • 可选部分(不常用功能)放在其他程序模块中 只在需要的时候装入内存
  • 不存在调用关系的模块可相互覆盖 共用同一块内存区域

覆盖技术的不足

  • 增加编程难度 需要程序员 划分功能模块 并确定模块间的覆盖关系
  • 增加执行时间 从外存装入覆盖模块,时间换空间

交换技术

交换技术目标

增加正在运行或需要运行的程序的内存

交换技术实现方法

可将暂时不能运行的程序放到外存

  • 换入换出的基本单位:整个进程的地址空间
  • 换出(swap out):把一个进程的整个地址空间保存到外存
  • 换入(swap in):将外存中某进程的地址空间读入到内存

交换面临的问题

  • 交换时机 只当内存空间不够或有不够的可能时换出
  • 交换区大小 存放所有用户进程的内存映像拷贝
  • 程序换入时的重定位 动态地址映射

覆盖与交换技术的比较

覆盖 交换
只能发生在没有调用关系的模块间 以进程为单位
程序员须给出模块间的逻辑覆盖结构 不需要模块间的逻辑覆盖结构
发生在运行程序的内部模块间 发生在内存进程间

局部性原理

  • 程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域
    • 时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内
    • 空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内
    • 分支局部性:一条跳转指令的两次执行,很可能跳到相同的内存位置
  • 局部性原理的意义
    • 从理论上来说,虚拟存储技术是能够实现的,而且可取得满意的效果

虚拟存储

基本概念

虚拟存储的目标

  • 只把部分程序放到内存中 从而运行比物理内存大的程序
  • 由操作系统自动完成
  • 在内存与外存之间只交换进程的部分内容

虚拟存储思路

  • 加载程序时 只将当前执行所需要的部分页面或段装入内存
  • 指令执行时中需要的指令或数据不在内存中时 处理器通知操作系统将相应的页面或段调入内存
  • 操作系统将内存中暂时不用的页面或段保存到外存

虚拟存储实现方式

  • 虚拟段式存储
  • 虚拟页式存储

基本特征

  • 不连续性
    • 物理内存分配非连续
    • 虚拟地址空间使用非连续
  • 大用户空间
    • 提供给用户的虚拟内存可大于实际的物理内存
  • 部分交换
    • 虚拟存储只对部分虚拟地址空间的换入和换

虚拟存储的支持技术

  • 硬件
    • 页式或段式存储中的地址转换机制
  • 操作系统
    • 管理内存和外存间页面或段的换入换出

虚拟页式存储

在页式存储管理的基础上增加请求调页和页面置换

  • 当用户进程要加载到内存运行时,只装入部分页面就启动程序运行
  • 进程在运行中发现有需要的代码或数据不在内存中则向系统发起缺页异常请求
  • 操作系统在处理缺页异常时将外存的页面调入内存,使进程能够继续运行

虚拟页式内存地址转换和之前页式存储类似,区别在于虚拟页式内存中访问页可能不在内存,因此会引发缺页异常。

在虚拟页式存储中,

  • 页表项中的访问位用于页面置换算法,页面置换算法可能需要根据不同页面是否被访问,访问时间和访问频率等进行淘汰页面的选择。

  • 页表项中修改位供换出页面使用,页面换出的时候,需要判断外存上的相应页面是否需要重写。如果内存中该页面在使用期间发生了修改,则相应的修改位被设置,用于换出的时候通知操作系统进行外存相应页面的修改。

  • 页表项的状态位用于指示该页是否已经调入内存,供程序访问时使用,如果发现该页未调入内存,则产生缺页中断,由操作系统进行相应处理。

缺页异常的处理流程

  1. 指令执行中的页表项引用;
  2. 由于页面不在内存,导致缺页异常;
  3. 在外存中查找需要访问的页面备份;
  4. 页面换入;
  5. 页表项修改;
  6. 重新执行导致缺页异常的指令;

在何处保存未被映射的页?

  • 应能方便地找到在外存中的页面内容 (选择一个分区做对换区 Linux Unix)
  • 交换空间 (磁盘或者文件)
    • 采用特殊格式存储未被映射的页面 (用一个文件来存)

虚拟页式存储中的外存选择

  • 代码段 它就是可执行的二进制文件,没必要复制
  • 代码加载的共享库程序段 也是不会变的,没必要复制
  • 其他段 可以放到交换空间里去

下列关于虚拟存储器的叙述中,正确的是( )

  • 虚拟存储只能基于连续分配技术
  • 虚拟存储只能基于非连续分配技术
  • 虚拟存储容量只受外存容量的限制
  • 虚拟存储容量只受内容容量的限制

采用连续分配方式的时候,会使得相当一部分内存空间都处于空闲状态,造成内存资源的严重浪费,无法从逻辑上扩大内存容量。

若系统发生抖动(Thrashing)时,可用采取的有效措施是( )
1)撤销部分进程 2)增加磁盘交换区的容量 3)提高用户进程的优先级

  • 仅1
  • 仅2
  • 仅3
  • 仅1、2

撤销部分进程可以增大可用内存,减少抖动。而磁盘交换区容量和进程优先级则跟抖动无关。

虚拟页式内存管理系统中,发生缺页的概率一般取决于____

  • 内存分配算法
  • 内存读取速度
  • 内存写入速度
  • 页面置换算法

缺页率的高低跟实际能分配的物理内存的大小,以及系统中的页面置换算法相关。差的页面置换算法可能造成需要访问的页面经常没有在内存中,而需要进行缺页中断处理。

发生缺页的时候,一定会使用页面置换算法____

发生缺页的时候,如果分配给程序的物理页面数还有空闲,则直接换入新的页面,不需要使用页面置换算法来挑选需要换出的页面。