虚拟存储概念

2021-07-21 操作系统 uCore

# 一、虚拟存储的需求背景

# 1.1 存储层次结构

理想中,我们希望有容量更大、速度更快、价格更便宜的非易失性存储器。

但这几个条件是相互制约的,因此实际中,存储器的层次结构如下所示:

# 1.2 操作系统的存储抽象

由于内部存储介质的多样性,存储空间的管理就变得更加复杂了,如果让用户直接操作这些存储介质,那么程序的通用性不强,而且编程难度也很高。因此我们让操作系统在中间层抽象出单独的地址空间,将内部的映射关系隐藏掉,用户能看到的只有抽象出的地址空间,具体形式如下。

# 1.3 虚拟存储需求

计算机系统时常出现 内存空间不够用,具体解决办法有以下几种。

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

# 二、覆盖与交换

# 2.1 覆盖技术介绍

目标

在较小的可用内存中运行较大的程序。

方法

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

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

# 2.2 覆盖技术的不足

增加编程困难

  • 需程序员划分功能模块,并确定模块间的覆盖关系;
  • 增加了编程的复杂度。

增加执行时间

  • 从外存装入覆盖模块;
  • 时间换空间。

# 2.3 交换技术介绍

目标

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

实现方法

  • 可将暂时不能运行的程序放到外存;
  • 换入换出的基本单位:整个进程的地址空间;
  • 换出(swap out):把一个进程的整个地址空间保存到外存;
  • 换入(swap in):将外存中某进程的地址空间读入到内存。

# 2.4 交换技术面临的问题

交换时机:何时需要发生交换?

只当内存空间不够或有不够的可能时换出。

交换区大小

存放所有用户进程的所有内存映像的拷贝。

程序换入时的重定位:换出后再换入时要放在原处吗?

采用动态地址映射的方法。

# 2.5 覆盖与交换的比较

覆盖

  • 只能发生在没有调用关系的模块间;
  • 程序员须给出模块间的逻辑覆盖结构;
  • 发生在运行 程序的内部模块间

交换

  • 以进程为单位;
  • 不需要模块间的逻辑覆盖结构;
  • 发生在内存进程间。

# 三、局部性原理

# 3.1 虚拟存储技术的目标

  • 只把部分程序放到内存中,从而运行比物理内存大的程序:由操作系统自动完成,无需程序员的干涉;
  • 实现进程在内存与外存之间的交换,从而获得更多的空闲内存空间:在内存和外存之间只交换进程的部分内容。

# 3.2 局部性原理的概念

程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域。

时间局部性

一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内。

空间局部性

当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内。

分支局部性

一条跳转指令的两次执行,很可能跳到相同的内存位置。

# 3.3 局部性原理的意义

从理论上来说,虚拟存储技术是能够实现的,而且可取得满意的效果。

# 四、虚拟存储概念

# 五、虚拟页式存储

# 六、缺页异常

# 七、参考资料

Last Updated: 2023-01-28 4:31:25