3.5 虚拟存储器

虚拟存储器的基本概念,页式虚拟存储器的页表与地址转换,快表 TLB,TLB—页表—Cache 的协同访问,以及段式与段页式虚拟存储器。

考查要求 ★★★ 重点掌握 虚拟地址与物理地址页表项TLB缺页异常TLB 与 Cache 的组合情况段式与段页式

基本概念

虚拟存储器将主存或辅存的地址空间统一编址,形成一个庞大的地址空间,在这个空间内,用户可以自由编程,而不必在乎实际的主存容量和程序在主存中实际的存放位置。

  • 用户编程允许涉及的地址称为虚地址或逻辑地址,虚地址对应的存储空间称为虚拟空间;
  • 实际的主存单元地址称为实地址或物理地址,实地址对应的是主存地址空间,也称实地址空间。

CPU 使用虚地址时,由辅助硬件找出虚地址和实地址之间的对应关系,并判断这个虚地址对应的存储单元内容是否已装入主存。若已在主存中,则通过地址变换,CPU 可直接访问主存指示的实际单元;若不在主存中,则把包含这个字的一页或一段调入主存后再由 CPU 访问。若主存已满,则采用替换算法置换主存中的一页或一段。

页式虚拟存储器

以页为基本单位的虚拟存储器称为页式虚拟存储器。虚拟空间与主存空间都被划分成同样大小的页,主存的页称为实页或页框,虚存的页称为虚页。

虚拟地址=虚页号 ∣ 页内地址,物理地址=实页号(页框号) ∣ 页内地址\text{虚拟地址} = \text{虚页号} \,|\, \text{页内地址}, \qquad \text{物理地址} = \text{实页号(页框号)} \,|\, \text{页内地址}

页表

页表是一张存放在主存中的虚页号和实页号的对照表,它记录程序的虚页调入主存时被安排在主存中的位置。页表一般长久地保存在内存中。页表项通常包括:

字段含义
有效位(装入位)表示对应页面是否在主存中。若为 1,则表示该虚页已从外存调入主存;若为 0,则表示没有调入主存,访问会产生缺页异常
脏位(修改位)表示页面是否被修改过,虚存机制中采用回写策略,利用脏位可判断替换时是否需要写回外存
引用位(使用位)用于配合替换策略进行设置,例如实现 LRU 或 Clock 替换算法
物理页号实页号
访问权限读 / 写 / 执行权限

页表基址寄存器存放当前进程页表的起始地址,地址转换时:页表项地址 = 页表基址 + 虚页号 × 页表项大小。

快表(TLB)

由地址转换过程可知,在不采用快表时,访问一个数据需要两次访存:第一次访问页表得到物理地址,第二次访问主存得到数据。为提高速度,依据程序执行的局部性原理,在一段时间内总是经常访问某些页时,若把这些页对应的页表项存放在高速缓冲器中,就可以节省访问页表的时间。这个专用的高速缓冲器称为快表,也称转换后援缓冲器(TLB),通常采用全相联或组相联方式,由相联存储器实现。

动画演示页式虚拟存储器:TLB → 页表 → 物理地址
虚拟地址 VPN —偏移快表 TLB(相联存储器)VPN 3 → 框 0(空)页表(在主存中)0V=1框21V=0—2V=0—3V=1框04V=0—5V=0—6V=0—7V=0—主存页框页框 0虚页 3页框 1空闲页框 2虚页 0页框 3空闲TLB 命中 0页表命中 0缺页 0
命中缺失 / 缺页新装入
1/37页大小 256 B ⇒ 页内偏移 8 位;虚拟地址 11 位 ⇒ 虚页号 VPN 3 位。主存只有 4 个页框,TLB 有 2 项(全相联,LRU 替换)

TLB、页表、Cache 的协同

具有 TLB 和 Cache 的多级存储系统中,CPU 给出虚拟地址后,先查 TLB(或页表)得到物理地址,再用物理地址查 Cache,Cache 缺失时再访问主存。三者的命中情况有以下组合:

序号TLBPageCache说明
1hithithit可能,TLB 命中则 Page 一定命中,信息在主存,就可能在 Cache 中
2hithitmiss可能,TLB 命中则 Page 一定命中,信息在主存,但可能不在 Cache 中
3misshithit可能,TLB 缺失但 Page 可能命中,信息在主存,就可能在 Cache 中
4misshitmiss可能,TLB 缺失但 Page 可能命中,信息在主存,但可能不在 Cache 中
5missmissmiss可能,TLB 缺失则 Page 也可能缺失,信息不在主存,一定也不在 Cache 中
6hitmiss—不可能,页缺失说明信息不在主存,TLB 中一定没有该页表项
7—misshit不可能,页缺失说明信息不在主存,Cache 中一定也没有该信息

段式与段页式虚拟存储器

  • 段式虚拟存储器:段是按照程序的自然分界划分的长度可以动态改变的区域。虚拟地址分为段号和段内地址两部分,通过段表实现地址转换。优点是段的分界与程序的自然分界相对应,因而具有逻辑独立性,易于编译、管理、修改和保护,也便于多道程序的共享;缺点是因为段长度可变,分配空间不便,容易在段间留下碎片,不好利用,造成浪费。
  • 段页式虚拟存储器:把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位。每个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。虚地址分为段号、段内页号、页内地址三部分。优点是兼具页式和段式虚拟存储器的优点,可以按段实现共享和保护;缺点是在地址变换过程中需要两次查表,系统开销较大。

即时练习

即时练习4 题
点击选项即可作答
  1. 1
    下列命中组合情况中,一次访存过程中不可能发生的是( )。
  2. 2
    某计算机采用页式虚拟存储管理方式,按字节编址,虚拟地址为 32 位,物理地址为 24 位,页大小为 8 KB;TLB 采用全相联映射。则 TLB 中标记字段 Tag 的位数为( )。
  3. 3
    下列关于虚拟存储器的叙述中,正确的是( )。
  4. 4
    虚拟存储器中,缺页时由( )负责把缺失的页面从外存调入主存。
学完了吗?

标记完成后,侧栏会显示进度。进度仅保存在本浏览器中。