存储管理的功能
计算机中用于存储的设备有
- 内存(primary storage):访问速度快,但价格昂贵。内存由顺序编址的块组成,每块包含相应的物理单元
- 外存(secondary storage):访问速度较慢,价格便宜
虚拟存储器
在一个进程执行过程中,其大部分程序和数据并不经常被访问。这样存储管理系统可以把哪些不经常被访问的程序和数据放入外存以节省内存空间,等需要访问这些程序和数据时再调入内存,这就面临如何安排它们的地址的问题。以下是一些安排地址的办法
- 按照物理存储器中的位置赋予实际物理地址
优点是CPU执行目标代码时执行速度快,缺点是内存利用率低,较大的进程可能因内存容量达不到需求而无法执行。且编译程序会变得复杂 - 编译链接程序把用户源程序编译后链接到一个以0为起始地址的线性或多维虚拟地址空间
链接既可以在程序执行以前由链接程序完成静态的链接,也可以正在程序执行过程中根据需要来动态链接。每个进程都有这样一个线性或多维虚拟地址空间。每个指令或数据单元都在这个虚拟空间中拥有确定的地址,这个地址称为虚拟地址(virtual address, VA)
。进程中的代码、数据等的虚拟地址组成的虚拟空间
称为虚拟存储器(virtual memory)
。进程在该空间的排列可以是非连续的,其 实际物理地址由虚拟地址变换得到。虚拟存储器不考虑物理存储器的大小和信息存放的实际位置,只规定每个进程中相互关联信息的相对位置。每个进程都拥有自己的虚拟存储器,虚拟存储器的容量是由计算机的地址结构和寻址方式确定的。
地址变换
内存地址的集合称为内存空间
或物理地址空间
如何把几个虚存的一位或多维线性空间变换到内存唯一的一位物理线性空间呢?这涉及2个问题
- 虚拟空间的划分。虚拟空间的划分与计算机系统结构有关
- 把虚拟空间中已链接和划分好的内容装入内存,并将虚拟地址映射为内存地址,称之为
地址重定位
或地址映射
。实现地址重定位或地址映射的方法有2种,分别是静态地址重定位
和动态地址重定位
静态地址重定位(static address relocation)
静态地址重定位是在虚拟空间里的程序执行之前由装配程序完成地址映射工作。它要求所有待执行的程序必须在执行之前完成它们之间的链接
- 优点:不需要硬件支持
- 缺点:不灵活,内存利用率低。程序一旦装入内存之后就不能再移动,且必须在程序执行之前将有关部分全部装入;必须占用连续的内存空间,,这就难以做到程序和数据的共享
动态地址重定位(dynamic address relocation)
动态地址重定位是在程序执行过程中,在CPU访问内存之前,将要访问的程序或数据地址转换成内存地址。动态地址重定位依靠硬件地址变换机构完成。
地址重定位机构需要一个或多个基地址寄存器BR(basic register)和一个或多个程序虚拟地址寄存器VR(virtual register)。指令或数据的内存地址MA(memory address)与虚拟地址的关系为
MA=(BR)+(VR)
- 优点
- 可以对内存进行非连续分配
- 提供了实现虚拟存储器的基础
- 有利于程序段的共享
内外存数据传输的控制
- 用户控制
- 覆盖(overlay)
- 操作系统控制
- 交换(swapping)
- 请求调入(on demand)
- 预调入(on prefetch)
具体解释
- 覆盖:要求用户清楚地了解程序结构,并指定各程序段调入内存的先后顺序。缺点是增加了程序员的负担,程序段的最大长度仍受内存容量限制。不能实现虚拟存储器。
- 交换:由操作系统把内存中处于等待状态的进程换出内存,把处于就绪状态的进程内存换入内存。
一般不进行部分交换,即每次交换都交换那些出去常驻内存部分后的整个进程,所以它未实现进程大小不受内存容量限制的虚拟存储器。 - 请求调入:程序执行时,把不在内存中却又要访问的数据段或程序段自动地调入内存
- 预调入:操作系统在适当时机将预计快要访问的数据段或程序段调入内存