虚拟存储概念
虚拟存储
- 概念:基于非连续存储内存分配的基础上,可以把一部分内训放在外存里
- 需求
- 计算机系统时常出现内存空间不够用
- 覆盖( overlay )
应用程序手动把需要的指令和数据保存在内存中 - 交换( swapping )
操作系统自动把暂时不能执行的程序保存到外存中 - 虚拟存储
在有限容量的内存中,以页为单位自动装入更多更大的程序
- 覆盖( overlay )
- 计算机系统时常出现内存空间不够用
覆盖技术
- 目标:在较小的可用内存中运行较大的程序
- 方法:依据程序逻辑结构,将程序划分为若干功能相对独立的模块;将不会同时执行的模块共享同一块内存区域
- 必要部分(常用功能)的代码和数据常驻内存
- 可选部分(不常用功能)放在其他程序模块中,只在要用到时装入内存
- 不存在调用关系的模块可相互覆盖,共用同一内存区域
- 不足
- 增加编程困难
- 需程序员划分功能模块,并确定模块间的覆盖关系
- 增加了编程的复杂度
- 增加执行时间
- 从外存装入覆盖模块
- 时间换空间
- 增加编程困难
交换技术
- 目标:增加正在运行或需要运行的程序的内存
- 实现方法
- 可将暂时不能运行的程序放到外存
- 换入换出的基本单位
- 整个进程的地址空间
- 换出( swap out )
- 把一个进程的整个地址空间保存到外存
- 换入( swap in )
- 将外存中某进程的地址空间读入到内存
- 交换技术面临的问题
- 交换时机:何时需要发生交换?
- 只当内存空间不够或有不够的可能时换出
- 交换区大小
- 存放所有用户进程的所有内存映像的拷贝
- 程序换入时的重定向:换出后再换入时要放在原处吗?
- 采用动态地址映射的方法
- 交换时机:何时需要发生交换?
覆盖和交换的比较
- 覆盖
- 只能发生在没有调用关系的模块间
- 程序员须给出模块间的逻辑覆盖结构
- 发生在运行程序的内部模块间
- 交换
- 以进程为单位
- 不需要模块间的逻辑覆盖结构
- 发生在内存进程间
虚拟存储技术的目标
- 只把部分程序放到内存中,从而运行比物理内存大的程序
- 由操作系统自动完成,无需程序员的干涉
- 实现进程在内存与外存之间的交换,从而获得更多的空闲内存空间
- 在内存与外存之间只交换进程的部分内容
局部性原理( principle of locality )
- 程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域。
- 时间局部性
- 一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内
- 空间局部性
- 当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内
- 分支局部性
- 一条跳转指令的两次执行,很可能跳到相同的内存位置
- 局部性原理的意义
- 从理论上来说,虚拟存储技术是能够实现的,而且可取得满意的效果
- 时间局部性
虚拟存储的基本概念
- 思路:将不常用的部分内存块暂存到外存
- 原理
- 装载程序时
- 只将当前指令执行需要的部分页面或段装入内存
- 指令执行中需要的指令或数据不在内存(称为缺页或缺段)时
- 处理器通知操作系统将相应的页面或
- 装载程序时