本文介绍虚拟存储(虚拟存储分虚拟页式和段式,本文主要将页式,下面如不特别说明均指页式)的需求背景,概念,原理及缺页异常的处理流程
主要分为以下三部分:
- 需求背景
- 虚拟存储的原理特征
- 缺页异常的处理流程
需求背景
- 存储需求: 程序所需的存储空间越来越大
- 存储体系结构: 这个在计算机组成原理里面学过,不同层次之间的访问时间差了几个数量级
- 操作系统(Operating System, OS)对内存的抽象(0 ∼ 4G-1)
解决方法
主要有3个:
- 覆盖技术
- 交换技术
- 虚拟存储(现代计算机多用这个)
覆盖技术
特点: 程序员手动将指令和数据装入内存,(是对于一个程序而言的,对程序员不透明,增加编程困难)
交换技术
OS 自动 把不能执行的程序放到外存中去
下面到达正题,虚拟存储
虚拟存储
程序的局部性原理
这是虚拟储存能起作用的重要支撑,就是说程序在运行是在时间和空间上有局部性
- 时间: 访存的同一个地方在这次与下次执行集中在一个较短的时间间隔(e.g.: 循环)
- 空间: 当前指令和下条指令以及当前访问的数据和下一个数据访问时间集中在同一个区域内(e.g.: 数组)
虚拟存储的idea: 以页为单位将不常用的内存页移动到外存中去。
原理
- 装载程序时: 仅将当前程序所需要的部分页面装入内存
- 缺页:(需要访问的内存块不在内存中): 产生缺页异常,处理器告知OS处理
- OS 可将内存中暂时不用的页面放到外存中去
缺页处理的流程
我们通过在页表项中加入一些标识位可减少访存次数,如修改位,若没有修改位每次替换页面都需要两次访存(一次换入,一次写出),而加了修改位后可以仅在内存被修改时才写出(内存是外存的副本,可直接丢弃)。
页表项结构
X86 的页表结构
性能
有效访问时间(effective memory access time,EAT)
设
- Th : 命中访存时间
- Tm : 缺页(未命中的访存时间)
- p : 缺页率
则: