3.6 虚拟存储器 (答案见原书 P225)
第3章 存储系统 (续)
3.6 虚拟存储器 (答案见原书 P225)
01. 为使虚拟存储系统有效地发挥其预期的作用,所运行程序应具有的特性是( C )。
题目原文
- 为使虚拟存储系统有效地发挥其预期的作用,所运行程序应具有的特性是( )。
A. 不应含有过多的I/O操作
B. 大小不应小于实际的内存容量
C. 应具有较好的局部性
D. 顺序执行的指令不应过多
正确答案:C
题目解析
- 考点分析: 本题考察虚拟存储系统和Cache系统赖以存在和高效工作的共同理论基础。
- 正确选项分析 (C. 应具有较好的局部性):
- 虚拟存储系统的工作原理是:只将程序当前需要的少数页面或段装入主存。当程序访问不在主存中的页面时(缺页),再从辅存调入。
- 这个机制能够高效工作的前提是程序的局部性原理。因为程序具有局部性,所以在一段时间内,它的访问会集中在少数几个页面上。只要把这些页面都调入主存,程序就能在大部分时间里快速执行,而很少发生代价高昂的缺页中断。
- 如果一个程序没有局部性(访问地址完全随机、分散),那么它会频繁地发生缺页,系统将花费大量时间在磁盘I/O上,性能会急剧下降,虚拟存储系统也就失去了意义。
- 错误选项分析:
- A, D: 与虚存效率无直接关系。
- B: 虚拟存储系统就是为了运行大于实际内存容量的程序而设计的。
02. 虚拟存储管理的基础是程序的访问局部性原理,此理论的基本含义是( A )。
题目原文
02. 虚拟存储管理的基础是程序的访问局部性原理,此理论的基本含义是( )。
A. 在程序的执行过程中,程序对主存的访问是不均匀的
B. 空间局部性
C. 时间局部性
D. 代码的顺序执行
正确答案:A
题目解析
- 考点分析: 本题考察对局部性原理的宏观、本质的理解。
- 正确选项分析 (A. …程序对主存的访问是不均匀的):
- 局部性原理的核心思想就是程序在运行过程中的访存行为不是随机的、均匀分布在整个地址空间的,而是高度集中在某些特定的区域。
- 时间局部性是指访问时间的集中。
- 空间局部性是指访问空间的集中。
- 无论是哪种局部性,它们共同说明了一个现象:程序访存是不均匀的、有规律的。选项A是对这一宏观现象最根本、最概括的描述。
- 错误选项分析:
- B, C: 是局部性原理的两种具体表现形式,但A是对其更上层、更本质的概括。
- D: 是空间局部性的一种体现,但不全面。
03. 虚拟存储器的常用方式有段式、页式、段页式,对于它们与主存交换信息的单位,以下表述正确的是( D )。
题目原文
03. 虚拟存储器的常用方式有段式、页式、段页式,对于它们与主存交换信息的单位,以下表述正确的是( )。
A. 段式采用“页”
B. 页式采用“块”
C. 段页式采用“段”和“页”
D. 页式和段页式均仅采用“页”
正确答案:D
题目解析
- 考点分析: 本题考察不同虚拟存储管理方式下,与辅存进行信息交换的基本单位。
- 正确选项分析 (D. 页式和段页式均仅采用“页”):
- 页式管理: 逻辑和物理空间都被划分为大小固定的页(Page) 和页框(Page Frame)。主存与辅存之间的信息交换单位就是页。
- 段式管理: 逻辑空间按程序的逻辑结构划分为大小不等的段(Segment)。主存与辅存之间的交换单位是整个段。
- 段页式管理: 是段式和页式的结合。先将逻辑空间分段,再将每个段内部分页。内存管理兼具两者的优点。但是,当发生缺页(实际上是段内的某一页不在内存)时,系统从辅存调入的单位仍然是一个固定大小的页,而不是整个段。
- 因此,页式和段页式与辅存交换信息的基本单位都是页。
- 错误选项分析:
- A: 段式交换单位是段。
- B: “块”通常指Cache与主存的交换单位,或主存的物理存储单位(页框),虚存中逻辑和交换单位是“页”。
- C: 段页式交换单位是页。
04. 下列关于虚存的叙述中,正确的是( A )。
题目原文
04. 下列关于虚存的叙述中,正确的是( )。
A. 对应用程序员透明,对系统程序员不透明
B. 对应用程序员不透明,对系统程序员透明
C. 对应用程序员、系统程序员都不透明
D. 对应用程序员、系统程序员都透明
正确答案:A
题目解析
- 考点分析: 本题考察虚拟存储器对不同层次程序员的“透明性”。
- 正确选项分析 (A. 对应用程序员透明,对系统程序员不透明):
- 对应用程序员透明: 应用程序员在编程时,使用的是一个巨大、连续的逻辑地址空间,完全无需关心物理内存有多大、程序被放在哪里、如何进行页面换入换出。这些复杂的管理工作对他们来说是“透明”的、不可见的。
- 对系统程序员不透明: 编写操作系统(特别是内存管理模块)的系统程序员,必须设计和实现虚拟存储的全部机制,包括页表的建立和管理、缺页中断的处理、页面替换算法的实现等。这些对他们来说是具体、可见的工作内容。
- 错误选项分析:
- B, C, D: 都错误地描述了透明性的对象。
05. 在虚拟存储器中,当程序正在执行时,由( D )完成地址映射。
题目原文
05. 在虚拟存储器中,当程序正在执行时,由( )完成地址映射。
A. 程序员
B. 编译程序
C. 装入程序
D. 操作系统
正确答案:D
题目解析
- 考点分析: 本题考察虚拟地址到物理地址转换过程的责任方。
- 正确选项分析 (D. 操作系统):
- 地址映射(Address Mapping/Translation) 是指将虚拟地址转换为物理地址的过程。
- 这个过程是由硬件(MMU - 内存管理单元) 和软件(操作系统) 协同完成的。
- 操作系统负责建立和维护页表(或段表),并将页表的基地址装入专门的寄存器。
- 当程序执行时,MMU(硬件) 会自动根据CPU发出的虚拟地址,去查询由操作系统维护的页表,完成地址转换。如果查询发现页面不在内存中(缺页),MMU会触发一个异常,交由操作系统的缺页中断处理程序来处理。
- 在选项中,操作系统是整个地址映射机制的管理者和核心实现者,因此是最佳答案。
- 错误选项分析:
- A, B, C: 程序员、编译器、装入程序处理的都是虚拟地址,不负责运行时的地址映射。
06. 采用虚拟存储器的主要目的是( B )。
题目原文
06. 采用虚拟存储器的主要目的是( )。
A. 提高主存储器的存取速度
B. 扩大主存储器的存储空间
C. 提高外存储器的存取速度
D. 扩大外存储器的存储空间
正确答案:B
题目解析
- 考点分析: 本题考察虚拟存储技术的根本目的。
- 正确选项分析 (B. 扩大主存储器的存储空间):
- 虚拟存储器的核心思想是利用容量巨大但速度慢的辅存来作为主存的逻辑扩展。
- 它为程序员提供了一个远大于物理主存容量的虚拟地址空间,使得程序员可以编写和运行非常大的程序,而不用关心实际物理内存是否够用。
- 因此,其主要目的是在用户的感觉上**“扩大”了主存储器的存储空间**。
- 错误选项分析:
- A: 提高主存速度是Cache的目的。虚拟存储因为涉及到磁盘I/O,反而可能会降低平均访存速度。
- C, D: 虚存是扩展主存,不是外存。
07. 下列关于Cache和虚拟存储器的说法中,错误的的是( D )。
I. 一次访存时,页表不命中,则Cache一定也不命中
II. Cache不命中的损失要大于页表不命中的损失
III. Cache和TLB失效后的处理都由硬件完成
IV. 虚拟存储器的实际容量可以大于主存和辅存的容量之和
正确答案:D
题目解析
- 考点分析: 本题综合对比Cache、虚拟存储器和TLB的特点。
- 逐项分析:
- I. …页表不命中,则Cache一定也不命中: 正确。页表命中(TLB命中或页表查询命中)是得到物理地址的前提。如果连物理地址都无法得到(缺页),CPU根本无法向Cache系统发出一个有效的物理地址去查询,所以Cache必然不命中。
- II. Cache不命中的损失要大于页表不命中的损失: 错误。
- Cache不命中,损失是访问主存的时间(几十到几百ns)。
- 页表不命中(缺页),损失是访问磁盘的时间(几毫秒,ms),比访问主存慢几个数量级。
- 因此,页表不命中的损失 >> Cache不命中的损失。
- III. Cache和TLB失效后的处理都由硬件完成: 错误。
- TLB失效但页在主存中,处理过程(查询主存中的页表)可以由硬件(硬件MMU)或软件(操作系统)完成,不同体系结构不同。
- Cache失效的处理是纯硬件完成的。
- 但缺页(Page Fault) 的处理必须由操作系统软件完成(涉及磁盘I/O)。
- IV. …容量可以大于…之和: 错误。虚拟地址空间只是一个逻辑概念,其内容最终必须存储在物理介质上,即辅存。虚拟存储器的容量受限于辅存的容量和CPU的地址位数,不可能大于主存和辅存容量之和。
- 组合判断: II、III、IV 都是错误的。
08. 下列有关页式存储管理的叙述中,错误的是( D )。
题目原文
08. 下列有关页式存储管理的叙述中,错误的是( )。
A. 进程地址空间被划分成同等大小的页框
B. 采用全相联映射,每页可以映射到任何一个空闲的页框中
C. 当从磁盘装入的信息不足一页时会产生页内碎片
D. 相对于段式存储管理,分页式更有利于存储保护
正确答案:D
题目解析
- 考点分析: 本题对比页式和段式存储管理的特点。
- 错误选项分析 (D. …分页式更有利于存储保护):
- 这是错误的。段式管理更有利于实现灵活的存储保护。
- 因为段是按程序的逻辑意义划分的(如代码段、数据段、堆栈段),可以很方便地为每个段设置不同的保护属性(如代码段只读、数据段可读写)。
- 而页的划分是纯物理的,与程序逻辑无关,一个页中可能既有代码又有数据,难以进行精细的保护。
- 正确选项分析:
- A: 错误,进程的逻辑地址空间被划分为页(Page),物理内存被划分为页框(Page Frame)。
- B: 正确,页和页框之间的映射关系是全相联的,即任何一个页都可以装入任何一个空闲的页框,非常灵活。
- C: 正确,因为页的大小是固定的,如果一个逻辑段的最后一页没有占满,剩下的空间就被浪费了,这称为页内碎片。
- 【答案校对】 您提供的答案是
D
。我的分析中A和D都是错误的。我们再来审视A。A. 进程地址空间被划分成同等大小的页框
。严格来说,逻辑空间划分成页,物理空间划分成页框。A的说法混淆了概念,是错误的。D. 相对于段式存储管理,分页式更有利于存储保护
。如上分析,是错误的。- 哪个更“错”? D的错误是本质性的,段式天生就比页式更适合做逻辑保护。A的错误是术语混用,虽然不严谨,但在某些语境下可能被接受。因此,D是更根本的错误。
09. 下列有关虚拟存储器管理机制的地址转换的叙述中,错误的是( B )。
正确答案:B
题目解析
- 考点分析: 本题考察虚拟地址转换过程中的一些概念。
- 错误选项分析 (B. 通常逻辑地址的位数比物理地址的位数少):
- 这是错误的。虚拟存储系统设计的一个主要目的就是为用户提供一个比物理内存大得多的地址空间。
- 因此,逻辑地址(虚拟地址)的位数通常远远多于物理地址的位数。
- 例如,一个32位CPU,其逻辑地址空间是4GB(32位);但它可能只配置了512MB的物理内存(需要29位物理地址)。
- 正确选项分析:
- A. 地址转换是指把逻辑地址转换为物理地址:正确,这是地址转换的定义。
- C. 地址转换过程中会发现是否发生“缺页”:正确,MMU在查页表时,如果有效位为0,就会触发缺页异常。
- D. 内存管理单元(MMU)在地址转换过程中要访问页表项:正确,MMU的核心工作就是查页表。
10. 下列有关虚拟存储器管理机制的页表的叙述中,错误的是( D )。
正确答案:D
题目解析
- 考点分析: 本题考察页表的组织和访问。
- 错误选项分析 (D. 所有进程都访问同一张页表):
- 这是错误的。操作系统为每一个进程都维护着一张独立的页表。
- 每个进程都有自己独立的虚拟地址空间,因此需要独立的页表来描述其虚拟地址到物理地址的映射关系。
- 当发生进程切换时,操作系统会切换CPU中的页表基地址寄存器,使其指向新进程的页表。
- 正确选项分析:
- A. 系统中每个进程有一个页表:正确。
- B. 每个页表中每个表项与一个虚页对应:正确,页表项是按虚页号索引的。
- C. 每个表项中都包含一个有效位(有效/无效):正确,这是判断是否缺页的关键。
11. 下列有关页表项处理的叙述中,错误的是( B )。
题目原文
11. 下列有关页表项处理的叙述中,错误的是( )。
A. 若对应页表项中的有效位为0,则发生缺页
B. 缺页是一种中断,需要调用操作系统提供的中断服务程序来处理
C. 缺页处理过程中需根据页表项中给出的磁盘地址去读磁盘数据
D. 缺页处理完后要重新执行产生缺页的指令
正确答案:B
题目解析
- 考点分析: 本题深入考察缺页事件的性质和处理流程。
- 错误选项分析 (B. 缺页是一种中断,需要调用操作系统提供的中断服务程序来处理):
- 这个说法的用词不精确,因此是错误的。
- 缺页是由CPU在执行指令过程中,内部发生的事件,它与当前指令直接相关。因此,它属于内部异常(Exception),更具体地说是故障(Fault) 类型。
- 中断(Interrupt) 通常特指由CPU外部设备引发的、与当前指令无关的外部中断。
- 虽然异常和中断的处理机制有很多相似之处(都需要操作系统介入,执行一段类似“服务程序”的代码),但在严格的术语上将缺页称为“中断”是不准确的。
- 正确选项分析:
- A: 正确,有效位为0是缺页的标志。
- C: 正确,页表项中会存放该页在辅存(磁盘)上的位置信息,以便OS找到并调入。
- D: 正确。缺页属于故障(Fault),处理完成后(即页面调入内存后),必须重新执行导致缺页的那条指令,才能真正完成访存操作。
12. 下列关于段式虚拟存储管理的说法是( D )。
题目原文
12. 下列关于段式虚拟存储管理的说法是( )。
A. 段是逻辑和结构上相对独立的程序序序序序序序序序段,因此段是可以变长的
B. 按逻辑结构中程序的段来分配的段来分配的内存块是可变的
C. 每个段必须从项记录对应段在主存的起始位置和段的长度
D. 分段方式对多道语言程序和编译器的编译器的编译器的编译器的编译器是透明的
正确答案:D
题目解析
- 考点分析: 本题考察段式存储管理的特点。
- 正确选项分析 (D. …对…编译器是透明的):
- 【答案校对与分析】 您提供的答案是
D
。这句话的原文可能应为“分段方式对多道语言程序和编译器的实现是不透明的”或“对应用程序员是不透明的”。 - 我们来分析D选项
...是透明的
。这个说法是错误的。- 段式管理的段是按程序的逻辑意义划分的(代码段、数据段等),这种划分通常是由编译器在编译阶段完成的,并反映在最终生成的目标文件中。程序员在编程时也需要感知段的存在(如定义段寄存器)。因此,分段方式对编译器和系统级程序员不是透明的。
- 让我们逐一分析其他选项,看是否有更明确的错误。
- A: “段是可以变长的”是正确的,但后半句重复。
- B: “按…段来分配的内存块是可变的”是正确的,段长不等。
- C: “每个段必须从项…” 语义不通,应为“段表中的每个表项必须记录…”,这是正确的。
- 结论: 选项A, B, C的描述都部分正确但有语病或重复。选项D的表述“是透明的”是根本性的错误。如果题目是单选且答案是D,那么很可能是D的否定形式才是正确的。在给定的混乱选项中,D的错误最明确。
- 【答案校对与分析】 您提供的答案是
13. 虚拟存储器中页表与慢表和快表之分,下面关于页表的叙述中正确的是( D )。
题目原文
13. 虚拟存储器中页表与慢表和快表之分,下面关于页表的叙述中正确的是( )。
A. 快表与慢表都存储在主存中,下面关于页表的叙述中正确的是( )
B. 快表采用了优化的搜索算法,因此查找速度快
C. 快表采用了优化的命中率高,因此可以得到更多的搜索结果
D. 快表采用相联存储器件组成,按照查找内容访问,因此比慢表查找速度快
正确答案:D
题目解析
- 考点分析: 本题考察对TLB(快表)和页表(慢表)的理解。
- 正确选项分析 (D. 快表采用相联存储器件组成,按照查找内容访问…):
- 快表 (Translation Lookaside Buffer, TLB) 是页表的一个高速缓存。
- 慢表 (Page Table) 是存放在主存中的完整页表。
- 为了实现快速查找,TLB是采用高速相联存储器(Content-Addressable Memory, CAM) 实现的。
- 当CPU发出一个虚拟页号时,TLB会并行地将这个页号与所有表项中的页号进行比较(按内容访问),如果匹配,就能立即得到对应的物理页框号。这个过程非常快,通常在一个时钟周期内完成。
- 而查询慢表需要一次或多次访问主存,速度要慢得多。
- 错误选项分析:
- A: 快表(TLB)是CPU内部的一个专用硬件,不在主存中。
- B: 快表的速度快是因为硬件并行比较,而不是软件搜索算法。
- C: 命中率高是结果,不是原因。
14. 在某虚拟存储器中,访问TLB和Cache的时间为10ns,访问主存的时间为100ns,TLB的命中率为90%,并假设没有访问主存不会缺页,Cache缺失时的处理时间为100ns,忽略缺失时数据替换…则CPU从给出虚拟地址开始,到最终获取到数据,平均需要花费的时间约为( B )。
正确答案:B
题目解析
- 考点分析: 本题是综合性计算题,需要分析TLB和Cache命中/缺失的各种组合情况,计算平均访存时间。
- 分析四种情况:
- TLB命中,Cache命中 (H_t, H_c):
- 时间 = 访问TLB + 访问Cache =
10ns
(通常TLB和Cache可以并行访问,取较长者,但这里按相加或简化为一次访问处理)。题目中的10ns
可能就代表这个过程。
- 时间 = 访问TLB + 访问Cache =
- TLB命中,Cache缺失 (H_t, M_c):
- 时间 = 访问TLB + 访问主存 =
10ns + 100ns = 110ns
。
- 时间 = 访问TLB + 访问主存 =
- TLB缺失,Cache命中 (M_t, H_c): (这种情况不可能,因为TLB缺失意味着要先去主存查页表,才能得到物理地址去访问Cache)。
- TLB缺失,Cache缺失 (M_t, M_c):
- 时间 = 访问TLB(发现缺失) + 访问主存(查页表) + 访问主存(取数据)
- 时间 =
10ns + 100ns + 100ns = 210ns
。
- TLB命中,Cache命中 (H_t, H_c):
- 【答案校对与分析】 您给的答案是
B (50ns)
。我的分析结果中最小时间都是10ns以上。这表明我对题目的理解模型可能有误,我们来尝试另一种模型。- 假设
H_cache = 90%
(题目中“访问主存不会缺页”后的那句,很可能是Cache命中率为90%
)。 T_tlb = 10ns
T_cache = 10ns
T_mem = 100ns
H_tlb = 90%
H_cache = 90%
- 假设
- 计算平均时间:
T_avg = P(H_t, H_c) * T(H_t, H_c) + P(H_t, M_c) * T(H_t, M_c) + P(M_t) * T(M_t)
- TLB命中 (90%):
- Cache命中 (90%): 时间 =
T_tlb + T_cache = 10+10=20ns
(假设串行)。概率 =0.9 * 0.9 = 0.81
。 - Cache缺失 (10%): 时间 =
T_tlb + T_mem = 10+100=110ns
。概率 =0.9 * 0.1 = 0.09
。
- Cache命中 (90%): 时间 =
- TLB缺失 (10%):
- 时间 =
T_tlb + T_mem (查页表) + ...
- 此时需要知道查到页表后Cache是否命中。假设查到物理地址后,Cache仍按90%命中率工作。
- …Cache命中 (90%): 时间 =
10+100+10 = 120ns
。概率 =0.1 * 0.9 = 0.09
。 - …Cache缺失 (10%): 时间 =
10+100+100 = 210ns
。概率 =0.1 * 0.1 = 0.01
。
- 时间 =
T_avg = 0.81*20 + 0.09*110 + 0.09*120 + 0.01*210
T_avg = 16.2 + 9.9 + 10.8 + 2.1 = 39ns
。
- 这个结果39ns与答案50ns仍有差距。 让我们再简化模型。
- 有效内存访问时间 (EAT)
EAT = H_tlb * T_mem_access_after_tlb + (1-H_tlb) * T_mem_access_after_tlb_miss
T_mem_access_after_tlb = H_cache * T_cache + (1-H_cache) * T_mem = 0.9*10 + 0.1*100 = 9 + 10 = 19ns
T_mem_access_after_tlb_miss = T_mem(查表) + T_mem_access_after_tlb = 100 + 19 = 119ns
EAT = 0.9 * 19 + 0.1 * 119 = 17.1 + 11.9 = 29ns
。
- 结论: 在所有标准模型下,都无法计算出50ns。此题的题目数据、隐含条件或答案存在问题。
15. 【2010统考真题】下列组合中,在一次访存过程中,不可能发生的是( D )。
题目原文
15. 【2010统考真题】下列组合中,在一次访存过程中,不可能发生的是( )。
A. TLB命中,Cache命中,Page命中
B. TLB命中,Cache未命中,Page命中
C. TLB未命中,Cache未命中,Page命中
D. TLB未命中,Cache命中,Page命中
正确答案:D
题目解析
- 考点分析: 本题考察TLB、Cache、页表三者在访存过程中的依赖关系。
- 正确选项分析 (D. TLB未命中,Cache命中,Page命中):
- 这个组合是不可能发生的。
- 访存流程:
- CPU发出虚拟地址,首先访问TLB。
- 如果TLB命中,立即得到物理地址,然后用物理地址去访问Cache。
- 如果TLB未命中,CPU(或OS)必须去访问主存中的页表来查找物理地址。
- Cache是物理地址缓存,它的访问必须在得到物理地址之后。
- TLB未命中意味着我们还没有得到物理地址。在这种情况下,CPU根本无法向Cache发出一个有效的查询请求。因此,不可能出现“TLB未命中”而“Cache命中”的情况。
- 错误选项分析:
- A, B: TLB命中,得到物理地址,再去查Cache,可能命中也可能不命中,都可能。
- C: TLB未命中,去查页表,发现页在主存中(Page命中),得到物理地址,再去查Cache,发现Cache未命中。这是很常见的情况。
16. 【2013统考真题】…则对虚拟地址03FF F180H进行虚实地址变换的结果是( A )。
题目原文
16. 【2013统考真题】某计算机主存地址空间大小为256MB,按字节编址。虚拟地址空间大小为4GB,采用页式存储管理,页面大小为4KB。TLB(快表)采用全相联映射,有4个页表项,内容如下表所示。
[表格内容:有效位|标记|页框号 分别为 1|03FFFH|0028H, 0|FF180H|0002H, 1|02FFFH|0351H, 1|03FFFH|0153H]
则对虚拟地址03FF F180H进行虚实地址变换的结果是( )。
A. 015 3180H
B. 003 5180H
C. TLB缺失
D. 缺页
正确答案:A
题目解析
- 考点分析: 本题考察页式存储管理下,利用TLB进行虚拟地址到物理地址的转换。
- 分析过程:
- 分解虚拟地址
03FF F180H
:- 页面大小 =
4KB = 2^12 B
。 - 页内偏移量需要 12 位。
- 虚拟地址格式:
虚拟页号 | 页内偏移量 (12位)
03FF F180H
的低12位是180H
。-> 页内偏移量 = 180H。03FF F180H
的高位部分是03FFFH
。-> 虚拟页号 (Tag) = 03FFFH。
- 页面大小 =
- 在TLB中查找虚拟页号 (Tag):
- TLB是全相联的,所以我们将
03FFFH
与所有有效表项的“标记”字段进行比较。 - 第一行:有效位=1, 标记=
03FFFH
。匹配! - 第四行:有效位=1, 标记=
03FFFH
。也匹配! - 【关键点/修正】 表格中的
03FFFH
出现了两次。这通常是题目印刷错误,我们假设第四行的标记是别的,或者题目中有一个隐含的LRU等信息。但既然有两个匹配,我们都看一下。 - 如果按第一行,物理页框号 =
0028H
。 - 如果按第四行,物理页框号 =
0153H
。 - 在考试中,更可能的是第一个匹配的就有效,或者题目本身有唯一匹配。我们假设匹配的是第四行,因为选项A的结果是由它产生的。
- TLB是全相联的,所以我们将
- 组合成物理地址:
- 物理地址 =
物理页框号 | 页内偏移量
- 物理页框号 =
0153H
。 - 页内偏移量 =
180H
。 - 物理地址 =
0153
和180
拼接起来。 0153H
后面拼接3位十六进制数180H
,结果是0153180H
。
- 物理地址 =
- 分解虚拟地址
- 结论: 虚实地址变换的结果是
0153180H
。
17. 【2015统考真题】…完成该指令功能需要访问TLB的次数是( B )。
题目原文
17. 【2015统考真题】假定编译器将赋值语句“x=x+3;”转换为指令“add xaddr, 3”,其中xaddr是x对应的存储单元地址。执行该指令的计算机采用页式虚拟存储管理方式,并配有相应的TLB,且Cache和主存均采用直写方式,则完成该指令功能需要访问TLB的次数是( )。
A. 0
B. 1
C. 2
D. 3
正确答案:B
题目解析
- 考点分析: 本题考察一条访存指令在虚拟存储环境下会触发几次TLB访问。
- 分析过程:
- 分析指令
add xaddr, 3
:- 这是一个“读-修改-写”的操作,它需要访问一次内存地址
xaddr
。 - 首先,需要读取
xaddr
处的旧值。 - 然后,在CPU内部执行加法。
- 最后,需要将新值写入到
xaddr
处。
- 这是一个“读-修改-写”的操作,它需要访问一次内存地址
- 分析访存与TLB的关系:
- 每一次逻辑地址到物理地址的转换,都需要查询TLB(或页表)。
- 这条指令虽然有读和写两个动作,但它们访问的是同一个逻辑地址
xaddr
。
- 确定TLB访问次数:
- 当CPU要执行这条指令时,首先需要将逻辑地址
xaddr
转换为物理地址。这个转换只需要进行一次。 - MMU会拿
xaddr
的页号去查询TLB。 - 一旦查询成功(或通过查页表成功),得到物理地址后,后续的读操作和写操作都会使用这个已经转换好的物理地址。
- 因此,对于
xaddr
这个地址,整个指令执行过程中只需要一次TLB访问。
- 当CPU要执行这条指令时,首先需要将逻辑地址
- 分析指令
- 结论: 需要访问TLB的次数是1次。
18. 【2015统考真题】…则能存放4K字数据的Cache的位数至少是( C )。
题目原文
18. 【2015统考真题】假定主存地址为32位,按字节编址,主存和Cache之间采用直接映射方式,主存块大小为4个字,每字32位,采用回写方式,则能存放4K字数据的Cache的位数至少是( )。
A. 146K
B. 147K
C. 148K
D. 158K
正确答案:C
题目解析
- 考点分析: 本题与第21题类似,是Cache总容量(位数)的计算题。
- 分析过程:
- 确定Cache的数据区容量:
- 能存放
4K
字数据。 - 每字32位 = 4字节。
- 数据区容量 =
4K * 4 B = 16 KB
。
- 能存放
- 确定Cache行的组成:
- Cache行 = 有效位 + 脏位 + Tag + 数据块
- 计算各部分大小:
- 数据块 (Block):
4个字 = 4 * 4 B = 16 B
。 - 有效位 (Valid Bit): 1 位。
- 脏位 (Dirty Bit): 采用回写法,需要1位脏位。
- Tag字段:
- 主存地址 = 32 位。
- 块大小 =
16 B = 2^4 B
。 -> 块内地址需要 4 位。 - Cache数据区大小 =
16 KB = 2^14 B
。 - Cache总行数
M = 16 KB / 16 B = 2^14 / 2^4 = 2^10 = 1024
行。 - 直接映射,Cache行号需要
log₂(1024) = 10
位。 - 主存地址格式:
Tag | 行号(10位) | 块内地址(4位)
- Tag位数 =
32 - 10 - 4 = 18
位。
- 数据块 (Block):
- 计算Cache的总容量(位数):
- 总容量 = 总行数 * (有效位 + 脏位 + Tag + 数据块)
- 总容量 =
1024 * (1 + 1 + 18 + 16*8)
bit - 总容量 =
1024 * (20 + 128) = 1024 * 148
bit 1K = 1024
。- 总容量 =
148 Kbit
。
- 确定Cache的数据区容量:
- 结论: Cache的位数至少是148K位。
19. 【2019统考真题】下列关于缺页处理的叙述中,错误的是( D )。
题目原文
19. 【2019统考真题】下列关于缺页处理的叙述中,错误的是( )。
A. 缺页是处理器在转译时检测到的一种异常
B. 缺页处理由操作系统提供的处理程序来完成
C. 缺页处理过程中需要通过访问I/O子系统从磁盘读数据
D. 缺页处理完成后返回到发生缺页的指令的下一条指令执行
正确答案:D
题目解析
- 考点分析: 本题与第11题考点相同,考察缺页异常的处理和返回机制。
- 错误选项分析 (D. …返回到…下一条指令执行):
- 这是错误的。
- 缺页属于故障(Fault) 类型的异常。它的发生中断了当前指令的正常执行(因为无法获取操作数)。
- 当操作系统处理完缺页(即把所需的页面从磁盘调入内存并更新页表)之后,必须返回去重新执行那条导致缺页的指令。只有重新执行,这条指令才能最终成功地完成访存操作,程序才能继续正确地执行下去。
- 正确选项分析:
- A: 正确,由MMU在地址翻译过程中检测。
- B: 正确,缺页处理是操作系统的核心功能之一。
- C: 正确,需要从磁盘读入页面。
20. 【2020统考真题】下列关于TLB和Cache的叙述中,错误的是( D )。
题目原文
20. 【2020统考真题】下列关于TLB和Cache的叙述中,错误的是( )。
A. 命中率都与程序的局部性有关
B. 缺失后都需要去访问主存
C. 缺失处理都可以由硬件实现
D. 都由DRAM存储器组成
正确答案:D
题目解析
- 考点分析: 本题全面对比TLB和Cache的异同。
- 错误选项分析 (D. 都由DRAM存储器组成):
- 这是错误的。
- TLB 和 Cache 都是为了高速访问而设计的。它们都必须采用高速的SRAM(静态RAM) 技术来实现。
- DRAM(动态RAM) 速度较慢,是用来做主存的。
- 正确选项分析:
- A: 正确。TLB的命中率依赖于对页表的访问局部性,Cache的命中率依赖于对数据/指令的访问局部性。两者都基于局部性原理。
- B: 正确。TLB缺失,需要去主存查页表;Cache缺失,需要去主存取数据块。
- C: 【注意】 这个说法是正确的。
- Cache缺失处理是纯硬件的。
- TLB缺失的处理,在一些体系结构(如x86)中是由硬件MMU自动完成的(硬件查页表)。在另一些体系结构(如MIPS)中是由软件(一个特殊的异常处理程序)完成的。
- 因为存在硬件实现的可能,所以“都可以由硬件实现”这个说法是成立的。这与“缺页处理必须由软件实现”不同。
21. 【2022统考真题】某计算机主存地址为24位,采用页式虚拟存储管理方式,虚拟地址空间大小为4GB,页大小为4KB,按字节编址。某个进程的页表部分内容如下表所示。当CPU访问虚拟地址0008 2840H时,虚-实地址转换的结果是( C )。
题目原文
21. 【2022统考真题】某计算机主存地址为24位,采用页式虚拟存储管理方式,虚拟地址空间大小为4GB,页大小为4KB,按字节编址。某个进程的页表部分内容如下表所示。
虚页号 | 实页号(页框号) | 存在位 |
---|---|---|
… | … | … |
82 | 024H | 0 |
… | … | … |
129 | 180H | 1 |
130 | 018H | 1 |
当CPU访问虚拟地址0008 2840H时,虚-实地址转换的结果是( )。 |
A. 得到主存地址02 4840H
B. 得到主存地址18 0840H
C. 得到主存地址01 8840H
D. 检测到缺页异常
正确答案:C
题目解析
- 考点分析: 本题考察页式存储管理下,根据页表进行虚拟地址到物理地址的转换。
- 分析过程:
- 分解虚拟地址
0008 2840H
:- 页大小 =
4KB = 2^12 B
。 - 页内偏移量需要 12 位。
- 虚拟地址格式:
虚拟页号 | 页内偏移量 (12位)
0008 2840H
的低12位(后3位十六进制数)是840H
。-> 页内偏移量 = 840H。0008 2840H
的高位部分是00082H
。-> 虚拟页号 = 82H。- 将虚拟页号转换为十进制:
82H = 8 * 16 + 2 = 128 + 2 = 130
(十进制)。
- 页大小 =
- 查询页表:
- 我们要查找虚页号为130的页表项。
- 从表格中找到虚页号为
130
的行。
- 检查存在位并获取物理页框号:
- 该行的“存在位”是 1,表示该页在主存中,没有发生缺页。
- 该行对应的“实页号(页框号)”是 018H。
- 组合成物理地址:
- 物理地址 =
物理页框号 | 页内偏移量
- 物理页框号 =
018H
。 - 页内偏移量 =
840H
。 - 物理地址 =
018
和840
拼接起来。 - 物理地址 =
018840H
。
- 物理地址 =
- 分解虚拟地址
- 验证物理地址位数: 主存地址24位。
018840H
=0000 0001 1000 1000 0100 0000
,正好是24位。 - 结论: 虚实地址转换的结果是得到主存地址
01 8840H
。
22. 【2024统考真题】对于页式虚拟存储管理系统,下列关于存储器层次结构的叙述中,错误的是( D )。
题目原文
22. 【2024统考真题】对于页式虚拟存储管理系统,下列关于存储器层次结构的叙述中,错误的是( )。
A. Cache-主存层次的交换单位为主存块,主存-外存层次的交换单位为页
B. Cache-主存层次替换算法由硬件实现,主存-外存层次替换算法由软件实现
C. Cache-主存层次可采用回写法,主存-外存层次通常采用回写法
D. Cache-主存层次可采用直接映射方式,主存-外存层次通常采用直接映射方式
正确答案:D
题目解析
- 考点分析: 本题全面对比Cache-主存层次和主存-外存(虚拟存储) 层次在各个方面的异同。
- 错误选项分析 (D. …主存-外存层次通常采用直接映射方式):
- 这是错误的。
- 主存-外存层次,即虚拟页到物理页框的映射,为了最大限度地减少因冲突导致的缺页(缺页代价极高),并提高内存利用率,通常采用全相联映射方式。
- 这意味着,任何一个虚拟页都可以被加载到任何一个空闲的物理页框中。这种灵活性是虚拟存储系统高效工作的基础。
- 如果采用直接映射,会导致严重的冲突问题,一个程序可能因为几个关键页面恰好映射到同一个页框而频繁换页,性能急剧下降。
- 正确选项分析:
- A: 正确,交换单位不同:块(几十B)vs 页(几KB)。
- B: 正确,Cache替换由硬件实现以保证速度;页面替换由操作系统(软件)实现,因为涉及复杂的磁盘I/O和调度策略。
- C: 正确。Cache-主存层次可以用回写法。主存-外存层次,当一个“脏页”被换出时,必须写回磁盘,这在功能上等同于回写法,以保证数据不丢失。
23. 【2024统考真题】某计算机按字节编址,采用页式虚拟存储管理方式,虚拟地址为32位,主存地址为30位,页大小为1KB。若TLB共有32个表项,采用4路组相联映射方式,则TLB表项中标记字段的位数至少是( C )。
正确答案:C
题目解析
- 考点分析: 本题考察TLB的组织结构,将其类比为Cache进行地址划分和Tag计算。
- 分析过程:
- 将TLB类比为Cache进行分析:
- TLB缓存的是页表项。
- TLB的**“块”就是一个页表项**。
- TLB的**“地址”是虚拟页号 (VPN)**。
- 分解虚拟地址 (32位):
- 页大小 =
1KB = 2^10 B
。 - 页内偏移量需要 10 位。
- 虚拟页号 (VPN) 的位数 =
32 - 10 = 22
位。 - 虚拟地址格式:
VPN (22位) | 偏移量 (10位)
- 页大小 =
- 分析TLB的组织结构:
- 总行数(表项数)
M = 32
。 - 路数
K = 4
。 - 总组数
G = M / K = 32 / 4 = 8
组。
- 总行数(表项数)
- 划分虚拟页号 (VPN) 以在TLB中寻址:
- 我们将22位的VPN看作是送到TLB的“地址”。
- TLB地址格式:
Tag_tlb | 组号_tlb (g位)
。 g
=log₂(总组数) = log₂(8) = 3
位。Tag_tlb
位数 =VPN总位数 - g = 22 - 3 = 19
位。
- 将TLB类比为Cache进行分析:
- 结论: TLB表项中用于匹配的标记(Tag)字段,其位数至少是19位。
24. 【2024统考真题】下列事件中,不是在MMU地址转换过程中检测的是( B )。
题目原文
24. 【2024统考真题】下列事件中,不是在MMU地址转换过程中检测的是( )。
A. 访问越权
B. Cache缺失
C. 页面缺失
D. TLB缺失
正确答案:B
题目解析
- 考点分析: 本题考察MMU(内存管理单元)的职责范围。
- MMU的职责: MMU是负责虚拟地址到物理地址转换的硬件单元。在转换过程中,它会进行以下检查:
- D. TLB缺失: 首先,MMU会拿虚拟页号去查TLB。如果找不到,就是TLB缺失。
- C. 页面缺失 (缺页): 如果TLB缺失,MMU会去查主存中的页表。如果页表项的有效位为0,就是页面缺失。
- A. 访问越权 (保护错): 在查到页表项后,MMU会检查其中的保护位(如读/写/执行权限),并与当前CPU的访问请求类型(读/写/取指)进行比较。如果不匹配,就是访问越权。
- 正确选项分析 (B. Cache缺失):
- Cache缺失是在得到物理地址之后,由Cache控制器检测到的事件。
- MMU的工作在成功生成物理地址后就已经结束了。后续的Cache访问过程不属于MMU的职责范围。
- 结论: Cache缺失不是在MMU地址转换过程中检测的。
3.6 虚拟存储器 知识体系与考法总结
虚拟存储器是存储系统章节的另一大核心,也是现代操作系统的基石。它在概念上与Cache有相似之处(都利用局部性原理),但在实现方式、目的和性能影响上有本质区别。本节内容抽象,与操作系统紧密相关,重点在于理解地址转换过程和相关部件(MMU, TLB, 页表)的工作机制。
知识体系梳理
本节的知识体系可以围绕“一个核心目的”、“两大实现方式”和“一个关键过程”来构建。
一、 一个核心目的:逻辑扩容
- 目的 (高频考点):
- 主目的: 在程序员看来,“扩大”主存的存储容量。它为用户提供了一个远大于物理内存的、连续的虚拟地址空间(逻辑地址空间),从而可以运行大型程序。
- 次要目的: 实现存储保护、方便多道程序共享和程序重定位。
- 理论基础 (高频考点):
- 程序访问的局部性原理。正因为程序在一段时间内只访问一小部分地址空间,所以我们只需要把这“一小部分”放在主存里,就能让程序高效运行。
二、 两大实现方式:页式与段式
-
页式虚拟存储 (Page-based Virtual Memory) (重点)
- 地址空间划分:
- 虚拟地址空间 -> 划分为大小固定的页 (Page)。
- 物理地址空间 -> 划分为与页同样大小的页框 (Page Frame / 块)。
- 地址结构:
虚拟地址 = 虚拟页号 (VPN) | 页内偏移量
,物理地址 = 物理页框号 (PFN) | 页内偏移量
。 - 交换单位: 主存与辅存之间交换信息的基本单位是页。
- 映射方式: 页到页框的映射是全相联的,即任何页可装入任何空闲页框。
- 优缺点: 内存利用率高,管理简单。但不利于共享和保护,存在页内碎片。
- 地址空间划分:
-
段式虚拟存储 (Segment-based Virtual Memory)
- 地址空间划分:
- 虚拟地址空间 -> 按程序的逻辑结构划分为大小不等的段 (Segment) (如代码段、数据段)。
- 地址结构:
虚拟地址 = 段号 | 段内偏移量
。 - 交换单位: 段。
- 优缺点: 便于共享和保护,无页内碎片。但会产生外碎片,内存管理复杂。
- 地址空间划分:
-
段页式虚拟存储: 两者结合,先分段,段内再分页。交换单位是页。
三、 一个关键过程:虚实地址转换
这是本节的核心与难点,描述了CPU发出的虚拟地址如何一步步变成物理地址。
-
核心部件:
- 页表 (Page Table): 存放在主存中,记录了每个虚拟页到物理页框的映射关系。每个进程都有一张独立的页表。
- 页表项 (PTE): 包含物理页框号、有效位(存在位)、访问位、修改位(脏位)、保护位等。
- MMU (Memory Management Unit): 负责地址转换的硬件单元。
- TLB (Translation Lookaside Buffer / 快表): 页表的高速缓存,位于MMU内部,采用SRAM和相联存储技术实现。
-
地址转换流程 (高频考点):
- Step 1: CPU发出虚拟地址。
- Step 2: MMU从虚拟地址中提取虚拟页号(VPN),首先查询TLB。
- Step 3 (TLB命中): 从TLB中直接获取物理页框号(PFN)。
- Step 4 (TLB缺失):
- MMU(或OS)访问主存中的页表,查找对应的页表项(PTE)。
- Step 4a (页表命中 / Page Hit): 从PTE中获取PFN,并将其加载到TLB中以备后用。
- Step 4b (页表缺失 / 缺页故障 Page Fault):
- PTE的有效位为0。MMU触发缺页异常。
- CPU控制权转交操作系统的缺页处理程序。
- OS从辅存中找到该页,将其调入主存的一个空闲页框,并更新页表项。
- 处理完成后,返回并重新执行导致缺页的指令。
- Step 5: 将获取到的PFN与虚拟地址中的页内偏移量拼接,形成最终的物理地址。
- Step 6: 用物理地址访问Cache和主存。
常见考法与例题梳理
-
基本概念与目的(高频基础题)
- 考法: 考察虚拟存储的根本目的、理论基础和对不同程序员的透明性。
- 例题01 & 02 & 06: 集中考察了虚存的目的(扩大主存空间)和基础(局部性原理)。
- 例题04: 考察了对应用程序员透明,对系统程序员不透明这一重要特性。
-
地址转换流程与部件功能(高频核心题)
- 考法:
- 考察地址转换过程的正确顺序和各部件(MMU, TLB, 页表)的职责。
- 辨析TLB、Cache和页表在命中/缺失时的处理方式和依赖关系。
- 计算虚拟地址和物理地址的位数,以及地址字段的划分。
- 例题13: 考察了快表(TLB)是采用相联存储的高速硬件。
- 例题15 (2010真题): “TLB未命中,Cache命中”是不可能的,深刻考察了流程的依赖性。
- 例题24 (2024真题): 考察了MMU的职责范围,Cache缺失不归MMU管。
- 考法:
-
地址转换计算(高频计算题)
- 考法: 给出虚拟地址和页表(或TLB)内容,要求计算出对应的物理地址或判断是否缺页。
- 例题21 (2022真题): 是一道非常标准的地址转换计算题。
虚地址 -> (虚页号, 偏移量) -> 查表得物理页框号 -> 拼接 -> 物理地址
。 - 例题23 (2024真题): 考察了TLB的地址划分和Tag位数的计算,需要将TLB类比为组相联Cache来分析。
-
Cache-主存层次 vs. 主存-外存层次 对比
- 考法: 以表格或选择题形式,全面对比两个层次在交换单位、管理方式(软/硬件)、映射方式、写策略等方面的异同。
- 例题22 (2024真题): 是该考法的典范。关键区别:交换单位(块 vs. 页)、管理方式(硬件 vs. 硬件+OS)、映射方式(直接/组相联 vs. 全相联)。
刻意练习建议
-
画出“虚实地址转换”全流程图:
- 这是掌握本节知识的“法宝”。在纸上画出CPU、MMU(内含TLB)、主存(内含页表和数据)、辅存。
- 用带箭头的线,完整地画出一次访存的所有可能路径:
- TLB命中 -> Cache命中 -> CPU
- TLB命中 -> Cache缺失 -> 主存 -> CPU & Cache
- TLB缺失 -> 页表命中 -> 更新TLB -> (转1或2)
- TLB缺失 -> 缺页故障 -> OS处理(访磁盘)-> 更新页表 -> (转3)
- 能独立画出并讲解这张图,就说明你已完全掌握了地址转换过程。
-
制作“Cache vs. 虚存”终极对比表:
- 创建一个表格,详细对比这两个层次在目的、理论基础、管理方式、实现技术、交换单位、地址类型、速度影响等所有方面的异同。
- 这张表能帮助你理清两个极易混淆的概念。
-
地址计算模板化训练:
- 模板:
- 确定参数: 虚拟地址位数、物理地址位数、页大小。
- 计算字段位数:
页内偏移量位数 = log₂(页大小)
,虚拟页号位数 = 虚地址总位数 - 偏移量位数
。 - 分解虚拟地址: 将给定的十六进制虚地址,拆分为虚拟页号(VPN)和页内偏移量。
- 查表: 用VPN去查TLB或页表。
- 判断: 检查有效位,判断是命中还是缺页。
- 拼接: 若命中,用查到的物理页框号(PFN)和页内偏移量拼接成最终物理地址。
- 找多道计算题,严格按此模板练习。
- 模板:
通过以上系统性的梳理和有针对性的刻意练习,您将能够攻克虚拟存储器这一难点,并能清晰地辨析它与Cache的区别,从容应对各种综合性题目。