3.6.6【2021统考真题】


好的,这是一道来自2021年考研的计算机组成原理综合题,它非常专注地考察了**TLB(快表)**的内部工作原理,包括地址映射、替换算法以及其结构与虚拟地址位数的关系。
我们来详细地解析这道题。
首先,附上题目原文:
题目原文
(7)【2021统考真题】假设计算机M的主存地址为24位,按字节编址;采用分页存储管理方式,虚拟地址为30位,页大小为4KB;TLB采用二路组相联方式和LRU替换策略,共8组。请回答下列问题。
- 虚拟地址中哪几位表示虚页号?哪几位表示页内地址?
- 已知访问TLB时虚页号高位部分用作TLB标记,低位部分用作TLB组号,M的虚拟地址中哪几位是TLB标记?哪几位是TLB组号?
- 假设TLB初始时为空,访问的虚页号依次为10, 12, 16, 7, 26, 4, 12, 20,在此过程中,哪一个虚页号对应的TLB表项被替换?说明理由。
- 若将M中的虚拟地址位数增加到32位,则TLB表项的位数增加几位?
综合解析
这道题的核心是对TLB的组相联映射机制进行深入的、动态的分析。它要求考生不仅会做静态的地址分解计算,还要能模拟一系列访存请求,追踪TLB内容的变化,并应用LRU替换算法。
一、运用了什么知识点?
- 页式虚拟存储:
- 地址分解: 虚拟地址 = 虚拟页号(VPN) + 页内偏移。
- 能够根据虚拟地址总位数和页大小,精确计算出VPN和页内偏移的位数。
- TLB (快表):
- 组相联映射: 这是本题的绝对核心。理解TLB被分成多个组,虚拟页号被分解为标记(Tag)和组号(Index)。
- 地址映射:
TLB组号 = 虚拟页号 mod TLB总组数。 - LRU (Least Recently Used) 替换算法: 在一个组内的多行(本题为2行)已满的情况下,当需要装入新的表项时,选择最久未被访问的那一行进行替换。
- 计算机体系结构的基本关系: 理解虚拟地址空间的变化如何影响到TLB等硬件组件的结构。
二、考了什么?为什么这么考?
- 第1、2问:考察的是地址映射的计算基础。这是所有后续分析的前提,要求考生能正确地分解虚拟地址,并进一步将虚拟页号分解为TLB的标记和组号。这检验了考生对组相联映射地址划分的掌握。
- 第3问:考察的是TLB工作流程的动态模拟。这是本题的难点和重点。它给出一串访问序列,要求考生扮演TLB的角色,追踪每个虚页号应该映射到哪个组,判断是命中还是缺失,并在组满时应用LRU算法进行替换。这全面检验了考生对TLB工作细节的动态理解能力。
- 第4问:考察对硬件结构与地址空间关系的理解。它要求考生思考当系统的基本参数(虚拟地址位数)改变时,硬件(TLB表项)需要做出怎样的相应调整。这体现了软硬件协同设计的思想。
为什么这么考? 因为TLB是现代CPU中MMU(内存管理单元)的核心部件,其性能直接影响到整个系统的性能。这道题通过深入剖析TLB的组相联映射和LRU替换这两个最常见的设计,能够很好地衡量考生是否真正理解了虚拟地址翻译的加速机制。题目的设计层层递进,从静态计算到动态模拟再到结构扩展,逻辑非常清晰。
三、解题思路与详细分析 (为什么怎么样?)
问题1分析:虚拟地址分解
- 页内地址位数:
- 页大小 = 4KB = 2² * 2¹⁰ B = 2¹² B。
- 所以,需要 12 位来寻址页面内的4096个字节。
- 虚页号位数:
- 虚拟地址总共30位。
虚页号位数 = 总位数 - 页内地址位数位数 = 30 - 12 = 18位。
- 结论: 虚拟地址中高18位表示虚页号,低12位表示页内地址。
问题2分析:TLB地址字段
- 思路: 我们需要对**18位的虚页号(VPN)**进行进一步分解,分为
[TLB标记 | TLB组号]。
- TLB组号位数:
- TLB共有
8组。 - 为了从8个组中选择一个,需要
log₂(8) = 3位。
- TLB共有
- TLB标记位数:
TLB标记位数 = 虚页号总位数 - TLB组号位数位数 = 18 - 3 = 15位。
- 在虚拟地址中的位置:
- 虚拟地址:
[虚页号(18位)] [页内偏移(12位)]=[位29 ... 位12] [位11 ... 位0] - 虚页号又被分解为:
[TLB标记(15位)] [TLB组号(3位)] - 所以,TLB组号是虚页号的低3位,即虚拟地址的第12、13、14位。
- TLB标记是虚页号的高15位,即虚拟地址的第15到29位。
- 虚拟地址:
- 结论: 虚拟地址中位[29:15] (高15位) 是TLB标记,位[14:12] (中间3位) 是TLB组号。
问题3分析:TLB替换过程模拟
核心思路:对每一个虚页号,计算它映射的TLB组号,然后追踪该组的状态。
- 映射规则:
TLB组号 = 虚页号 mod 8 - 访问序列: 10, 12, 16, 7, 26, 4, 12, 20
| 访问序号 | 虚页号(VPN) | VPN mod 8 | 映射的TLB组 | 组内状态 (初始为空) & 事件 |
|---|---|---|---|---|
| 1 | 10 | 2 | 2 | [10] (缺失,装入) |
| 2 | 12 | 4 | 4 | [12] (缺失,装入) |
| 3 | 16 | 0 | 0 | [16] (缺失,装入) |
| 4 | 7 | 7 | 7 | [7] (缺失,装入) |
| 5 | 26 | 2 | 2 | [10, 26] (组未满,缺失,装入。10变为LRU) |
| 6 | 4 | 4 | 4 | [12, 4] (组未满,缺失,装入。12变为LRU) |
| 7 | 12 | 4 | 4 | [4, 12] (命中! 访问了12,所以12变为MRU,4变为LRU) |
| 8 | 20 | 4 | 4 | [20, 12] (缺失,组已满!需要替换。根据LRU,替换掉4) |
说明理由:
- 首先,计算出每个虚页号应该映射到哪个TLB组。
- 10->2, 12->4, 16->0, 7->7, 26->2, 4->4, 12->4, 20->4。
- 然后,追踪每个组的状态。我们发现,只有映射到第4组的虚页号最多,分别是12, 4, 12(命中), 20。
- 过程:
- 访问12时,第4组装入
[12]。 - 访问4时,第4组变为
[12, 4](12是LRU)。 - 再次访问12时,发生命中,此时12被更新为最近使用的(MRU),所以4变成了最近最少使用的(LRU)。组内状态变为
[4, 12]。 - 最后访问20时,发生缺失,且第4组已满。根据LRU算法,必须替换掉最久未被使用的表项,即4。
- 访问12时,第4组装入
- 结论: 虚页号 4 对应的TLB表项被替换。
问题4分析:虚拟地址位数增加的影响
- 思路: 我们要分析虚拟地址位数的增加,会影响到TLB表项中的哪个字段。
- TLB表项的构成: 一个TLB表项主要包含
[有效位] [TLB标记] [物理页框号] [其他控制位]。 - 分析:
- 虚拟地址位数从30位增加到32位,页大小(4KB)不变。
- 这意味着页内偏移仍然是12位。
- **虚页号(VPN)**的位数从
30-12=18位增加到了32-12=20位。 - TLB的结构不变(仍然是8组,2路组相联)。
- TLB组号位数仍然是3位。
- 这3位仍然取自虚页号的低3位。
- TLB标记的位数 =
新的VPN位数 - TLB组号位数=20 - 3 = 17位。 - 原来的TLB标记是15位,现在变成了17位。
- 结论: 虚拟地址位数增加2位,完全体现在了虚页号上。由于TLB的组数不变,这增加的2位就必须全部加到TLB标记字段上,以区分更大的虚拟地址空间。因此,每个TLB表项的位数增加2位。
