marp: true theme: default paginate: true _paginate: false header: '' footer: '' backgroundColor: white
第六讲 虚拟存储管理
第一节 虚拟存储概念
向勇 陈渝 李国良 任炬
2024年春季
提纲
1. 虚拟存储技术的需求
- 覆盖技术
- 交换技术
- 虚拟存储的基本概念
- 缺页异常
虚拟存储技术的需求背景
程序规模的增长速度远大于存储器容量的增长速度 理想中的存储器: 容量更大、速度更快、价格更便宜的非易失性存储器
虚拟存储的基本思路
挑战:计算机系统时常出现内存不够用 思路:内存不够,外存来补
- 函数覆盖(overlay)
- 应用程序以函数/模块为单位手动换入换出内存
- 程序交换(swapping)
- 操作系统以程序为单位自动换入换出内存
- 虚拟存储(virtual storage)
- 操作系统以页为单位自动换入换出内存
虚拟存储=内存+外存
地址空间
地址空间是操作系统对虚拟存储的抽象。
提纲
- 虚拟存储技术的需求
2. 覆盖技术
- 交换技术
- 虚拟存储的基本概念
- 缺页异常
覆盖技术
- 目标
- 程序员手动控制在较小的可用内存中运行较大的程序
- 基本思路
- 不同时间段内执行的函数或模块共享一块有限的空间
覆盖的基本原理
覆盖是指把一个程序划分为一系列功能相对独立的程序段,让执行时不要求同时装入内存的程序段组成一组(称为覆盖段),共享主存的同一个区域。
- 必要部分(常用)的代码和数据常驻内存
- 可选部分(不常用)放在其他程序模块中,只在需要时装入内存
- 不存在调用关系的模块可相互覆盖,共用同一块内存区域
覆盖技术示例
覆盖技术的不足
- 增加编程困难
- 需程序员划分功能模块,并确定模块间的覆盖关系
- 增加了编程的复杂度;
- 增加执行时间
- 从外存装入覆盖模块
- 时间换空间
Turbo Pascal的Overlay系统单元支持程序员控制的覆盖技术
提纲
- 虚拟存储技术的需求
- 覆盖技术
3. 交换技术
- 虚拟存储的基本概念
- 缺页异常
交换技术
- 基本思路
- 操作系统以程序为单位自动换入换出内存
- 方法
- 换出(swap out):把一个执行程序的整个地址空间内容保存到外存
- 换入(swap in):将外存中某执行程序的地址空间内容读入到内存
交换技术面临的问题
- 交换时机:何时需要发生交换?
- 只当内存空间不够或有不够的可能时换出
- 程序换入时的重定位:换出后再换入时要放在原处吗?
- 不一定在原处,需要某种机制保证程序正确寻址&执行
交换技术面临的问题
- 交换区(空间)大小:经验值。下面是Linux专家给出的建议
覆盖与交换的比较
- 程序覆盖
- 发生在某时间段不在一个控制流上的模块/函数间
- 以模块/函数为单位
- 程序员须给出模块/函数间的逻辑覆盖结构
- 交换
- 发生在运行的程序间
- 以运行的程序为单位
- 不需要模块间的逻辑覆盖结构
运行的程序:任务
或进程
提纲
- 虚拟存储技术的需求
- 覆盖技术
- 交换技术
4. 虚拟存储的基本概念
- 缺页异常
虚拟存储的定义
- 定义
- 虚拟存储 = 内存 + 外存
- 思路
- 操作系统将不常用的部分内存暂存到外存,将要处理器访问的数据从外存装入内存
- 前提
- 程序具有局部性
局部性原理
局部性(locality):程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域
- 时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内
- 空间局部性:当前指令和邻近时间的几条指令,当前访问的数据和邻近时间访问的几个数据都集中在一个较小区域内
- 分支局部性:一条跳转指令的两次执行,很可能跳到相同的内存位置
局部性的意义:如果大部分程序运行具有局部性特征,则虚拟存储技术是能够实现的,而且可取得满意的效果
虚拟存储的思路与规则
- 思路:将不常用的部分内存块暂存到外存
- 规则:
- 装载程序时:只将当前指令执行需要的部分页面或段装入内存
- 指令执行中需要的指令或数据不在内存(称为缺页或缺段)时:处理器通知操作系统将相应的页面或段调入内存
- 操作系统将内存中暂时不用的页面或段保存到外存
- 实现方式:
- 虚拟页式存储
- 虚拟段式存储
虚拟存储的基本特征
- 不连续性
- 物理内存分配非连续
- 虚拟地址空间使用非连续
- 大用户空间
- 提供给用户的虚拟内存可大于实际的物理内存
- 部分交换
- 虚拟存储只对部分虚拟地址空间进行调入和调出
虚拟存储的底层支撑
- 硬件(MMU/TLB/PageTable)
- 页式或段式存储中的硬件地址转换机制、硬件异常
- 软件(OS)
- 内存中建立页表或段表
- 管理内存和外存间页面或段的换入和换出
虚拟页式存储管理
在页式存储管理的基础上,增加请求调页和页面置换
- 基本思路
- 当用户程序要装载到内存时,只装入部分页面,就启动程序运行
- 用户程序在运行中发现有需要的代码或数据不在内存时,则向系统发出缺页异常请求
- 操作系统在处理缺页异常时,将外存中相应的页面调入内存,使得用户程序能继续运行
- 当内存快用完时,操作系统把部分页从内存调出到外存
虚拟页式存储管理
在页式存储管理的基础上,增加请求调页和页面置换
- 请求调页:也称按需分页,在处理器需要访问某数据时,才把数据从外存调入内存
- 页面置换:把不常用页换出,要使用的页换入
- 缺页异常处理:软硬件协同支持
提纲
- 虚拟存储技术的需求
- 覆盖技术
- 交换技术
- 虚拟存储的基本概念
5. 缺页异常
缺页异常的处理流程
- CPU读内存单元,在TLB中根据其虚拟地址匹配物理地址,未命中,读页表;
- 由于页表项的存在位为0,CPU产生缺页异常;
- OS查找到保存在外存中对应的应用的页面内容;
缺页异常的处理流程
4-1. 如有空闲物理页帧,把外存中的页面内容换入到某空闲物理页帧中; 4-2. 如无空闲物理页帧,通过置换算法释放/换出某物理页帧到外存,再把外存中的页面内容换入到某空闲物理页帧中;
缺页异常的处理流程
- 修改页表项,建立虚拟页到物理页帧的映射,存在位置1;
- OS返回到应用程序,让处理器重新执行产生缺页异常的读内存单元指令。
在何处保存未被映射的页?如何找到这个页?
在何处保存未被映射的页?
- 交换空间(磁盘/文件形态)
- 采用特殊格式存储未被映射的页面
- 磁盘上的文件(代码或数据)
虚拟存储的外存交换空间
在何处保存放在外存中的页的地址?
- 交换空间
- 磁盘分区:一般是扇区地址
- 在存在位为0的页表项中保存外存的页地址
虚拟存储的外存磁盘文件
在何处保存放在外存中的页的地址?
- 磁盘上的文件(代码或数据)
- 地址空间中的逻辑段表示中有对应的文件位置
- 如:
MemorySet::MapArea
- 如:
- 代码段:可执行二进制文件
- 动态加载的共享库程序段:动态调用的库文件
- 地址空间中的逻辑段表示中有对应的文件位置
虚拟存储的性能
有效存储访问时间(EAT, Effective memory Access Time)
- EAT = 内存访问时间 $*$ (1-p) + 缺页异常处理时间
- 缺页异常处理时间 = 磁盘访问时间*p(1+q)
- p: 缺页率;
- q: 写回概率(淘汰一个页面到磁盘)
- 例子
- 内存访问时间: 10 ns ;磁盘访问时间: 5 ms
- EAT = 10(1–p) + 5,000,000p(1+q)
小结
- 虚拟存储技术的需求
- 覆盖技术
- 交换技术
- 虚拟存储的基本概念
- 缺页异常