6.虚拟存储器
大约 6 分钟
概念
- 虛拟存储器將主存或辅存的地址空间统一编址,形成一个庞大的地址空间,在这个空间内, 用户可以自由编程,而不必在乎实际的主存容量和程序在主存中实际的存放位置。
- CPU 使用虛地址时,由辅助硬件找出虚地址和实地址之问的对应关系,并判断这个虛地址对应的存储单元内容是否己装入主存
- 缺页(或段)而访问辅存的代价很大,提高命中率是关键,因此虚拟存储机制采用全相联映射
- 当进行写操作时,不能每次写操作都同时写回磁盘,因而,在处理一致性问题时,采用回写法
页式虚拟存储器
- 主存的页称为实页、页框,虚存的页称为虛页
- 虚拟地址分为两个字段:虚页号和页内地址
- 页表一般长久地保存在内存中。
页表
- 有效位也称装入位,用来表示对应页面是否在主存
- 脏位也称修改位,用来表示页面是否被修改过
- 引用位也称使用位,用来配合替换策略进行设置,例如是否实现最先调入(FIFO 位)或最近最少用(LRU位)策略等

相关信息
- CPU 执行指令时,需要先将虚拟地址转换为主存物理地址。
- 页表基址寄存器存放进程的页表首地址,然后根据虚拟地址高位部分的虚拟页号找到对应的页表项,若装入位为 1,则取出物理页号,和虚拟地址低位部分的页内地址拼接,形成实际物理地址;若装入位为 0,则说明缺页, 需要操作系统进行缺页处理。
地址变换的过程如图
快表(TLB)
- 依据程序访问的局部性原理,在一段时间内总是经常访问某些页时,若把这些页对应的页表项存放在高速缓冲器组成的快表(TLB) 中,则可以明显提高效率。相应地把放在主存中的页表称为慢表(Page)。在地址转换时,首先查找快表,若命中,则无须访问主存中的页表。
- 快表通常采用全相联或组相联方式。
- TLB 标记的内容在全相联方式下就是该页表项对应的虛页号;组相联方式下则是对应虚页号的高位部分,而虚页号的低位部分用于选择 TLB 组的组索引
具有TLB和Cache 的多级存储系统
相关信息

如图是一个具有TLB 和Cache 的多级存储系统,其中 Cache 采用二路组相联方式。CPU 给出一个 32位的虚拟地址,TLB 采用全相联方式,每一项都有一个比较器
- 查找时将虚页号与每个 TLB 标记字段同时进行比较,若有某一项相等且对应有效位为 1,则 TLB 命中,此时可直接通过 TLB 进行地址转换;若未命中,则TLB 缺失,需要访问主存去查页表。
- 图中所示的是两级页表方式,虚页号被分成页目录索引和页表索引两部分,由这两部分得到对应的页表项,从而进行地址转换,并将相应表项调入 TLB,若 TLB 已满,则还需要采用替换策略。
- 完成由虚拟地址到物理地址的转换后,Cache 机构根据映射方式将物理地址划分成多个字段,然后根据映射规则找到对应的 Cache 行或组,将对应 Cache 行中的标记与物理地址中的高位部分进行比较,若相等且对应有效位为 1,则 Cache 命中,此时根据块内地址取出对应的字送 CPU。
在一个具有 Cache 和TLB 的虛拟存储系统中,CPU一次访存操作可能涉及TLB、页表、Cache、主存和磁盘的访问

提示

- 最好的情况是第 1种组合,此时无须访问主存;
- 第2种和第3 种组合都需要访问一次主存
- 第 4 种组合需要访问两次主存;
- 第5 种组合发生 “缺页异常”,需要访问磁盘,并且至少访问两次主存。
- Cache 缺失处理由硬件完成:缺页处理由软件完成,操作系统通过 “缺页异常处理程序”来实现;而TLB缺失既可以用硬件又可以用软件来处理。
段式虚拟存储器
- 虚拟地址分为两部分:段号和段内地址
- 优点:段的分界与程序的自然分界相对应,因而具有逻辑独立性, 使得它易于编译、管理、修改和保护,也便于多道程序的共享;
- 缺点是因为段长度可变,分配空间不便,容易在段间留下碎片,不好利用, 造成浪费。

段页式虛拟存储器
把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位,这样的虚拟存储器称为段页式虚拟存储器。
在段页式虚拟存储器中,每个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍, 段的起点必须是某一页的起点。
虚地址分为段号、段内页号、页内地址三部分
虚拟存储器与 Cache 的比较
1.相同之处
- 最终目标都是为了提高系统性能,两者都有容量、速度、价格的梯度。
- 都把数据划分为小信息块,并作为基本的传递单位,虚存系统的信息块更大。
- 都有地址的映射、替换算法、更新策略等问题。
- 依据程序的局部性原理应用“快速缓存的思想”,将活跃的数据放在相对高速的部件中。
2.不同之处
- Cache 主要解决系统速度,而虛拟存储器却是为了解决主存容量。
- Cache 全由硬件实现,是硬件存储器,对所有程序员透明;而虚拟存储器由 OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,但对应用程序员透明。
- 对于不命中性能影响,因为 CPU 的速度约为 Cache 的10倍,主存的速度为硬盘的 100 倍以上,因此虚拟存储器系统不命中时对系统性能影响更大。
- CPU 与Cache 和主存都建立了直接访问的通路,而辅存与 CPU 没有直接通路。也就是说在 Cache 不命中时主存能和 CPU 直接通信,同时将数据调入 Cache,而虛拟存储器系统不命中时,只能先由硬盘调入主存,而不能直接和 CPU 通信。
