🏷️ 知识点:虚拟页式管理
对于页式虚拟存储管理系统,下列关于存储器层次结构的叙述中,错误的是()。 A.Cache—主存层次的交换单位为主存块,主存一外存层次的交换单位为页
B. Cache—主存层次替换算法由硬件实现,主存一外存层次由软件实现
C.Cache—主存层次可采用回写法写策略,主存一外存层次通常采用回写法 D.Cache—主存层次可采用直接映射,主存一外存层次通常采用直接映射
[tag_link]
正确答案:D
主存 - 外存层次的映射方式通常采用页式映射,而不是直接映射。页式映射是一种将虚拟地址空间分割为固定大小的单元(页)的映射方式,它将页映射到物理地址的空间的相应单元(页框)中。页式映射的优点是减少了内外存之间的交换次数,提高了空间利用率,缺点是增加了地址转换的开销,需默维护页表。想一想,如果主存 - 外存页面采用直接映射的话,那么替换算法都直接没用了,所以 D 肯定是错误的。
虚拟存储器中的页表有快表和慢表之分,下面关于页表的叙述中正确的是( )。
A. 快表与慢表都存储在主存中,但快表比慢表容量小 B. 快表采用了优化的搜索算法,因此查找速度更快 C. 快表比慢表的命中率高,因此快表可以得到更多的搜索结果 D. 快表采用高速存储器件组成,按照查找内容访问,因此比慢表查找速度快
[tag_link]
正确答案:D
虚拟存储器中的页表用于地址映射,慢表指存储在主存中的完整页表,访问速度较慢; 快表(TLB)是一种高速缓存,用于存储最近使用的页表项。 选项 A 错误,因为快表通常由高速存储器件(如 SRAM)实现,不存储在主存中,且容量确实较小,但关键区别在于存储位置和速度。 选项 B 不准确,快表查找速度快主要得益于硬件设计(如相联存储器并行搜索),而非特定的优化算法。 选项 C 错误,快表的命中率受缓存大小和程序局部性影响,并不总是高于慢表; 慢表本身包含所有映射,但访问效率低,快表未命中时仍需访问慢表,因此“得到更多搜索结果”的说法不成立。 选项 D 正确,快表采用高速存储器件(如 SRAM),并按内容访问(相联查找),因此比基于主存的慢表查找速度快得多。
下列事件中,不是在MMU地址转换过程检测的是()。
A. 访问越权
B. Cache 缺失
C. 页面缺失
D. TLB缺失
[tag_link]
正确答案:B
MMU 负责将虚拟地址转化为物理地址,所以会检测以下事件:访问越权、页面缺失、TLB 缺失。Cache 缺失不是在 MMU 地址转换过程中检测的,而是在 CPU 访问主存数据检测的,访问主存的前提是有物理地址,所以该过程是在 MMU 完成地址翻译之后。
在采用页式虚拟存储管理方式的系统中,当发生上下文切换时,下列寄存器中操作系统不需要更新的是( )。
A. 通用寄存器 B. 页表基址寄存器 C. 程序计数器 D. 内核中断向量表基址寄存器
[tag_link]
正确答案:D
在 上下文切换 时,操作系统需要保存和恢复与当前进程相关的状态信息。通用寄存器、页表基址寄存器和程序计数器通常会在上下文切换时更新,以切换到新进程的上下文。然而,内核 中断向量表 基址寄存器通常是系统级的,通常不会在每次上下文切换时更改,因此操作系统不需要在上下文切换时更新该寄存器。
在支持虚拟存储器系统下的指令执行过程中,正确的是()
A. 地址转换由操作系统完成 B. 页表项的内容由编译器确定 C. 缺页中断由硬件直接处理 D. 异常由操作系统处理
[tag_link]
正确答案:D
【解析】 在支持虚拟存储器的系统中,地址转换由硬件(如内存管理单元 MMU)完成,操作系统仅负责管理页表;页表项的内容由操作系统在运行时动态设置,而非编译器;缺页中断由硬件触发,但实际处理(如加载页面)由操作系统完成;异常(包括缺页异常、非法指令等)在触发后统一由操作系统处理。因此,选项 D 正确。
下列关于虚拟存储器的叙述中,正确的是( )。
A. 虚拟存储只能基于连续分配技术
B. 虚拟存储只能基于非连续分配技术
C. 虚拟存储容量只受外存容量的限制
D. 虚拟存储容量只受内存容量的限制
[tag_link]
正确答案:B在程序装入时,可以只将程序的一部分装入内存,而将其余部分留在外存,就可以自动程序执行。采用连续分配方式时,会使相当一部分内存空间都处于暂时或 “永久” 的空闲状态,造成内存资源的严重浪费,也无法从逻辑上扩大内存容量,因此虚拟内存的实现只能建立在离散分配的内存管理的基础上。有以下三种实现方式:①请求分页存储管理;②请求分段存储管理;③请求段页式存储管理。虚拟存储器容量既不受外存容量限制,也不受内存容量限制,而是由 CPU 的寻址范围决定的。
在支持页式存储管理的系统中,进程切换时 OS 要执行()。
I. 更新 PC(程序计数器)值II. 更新栈基址寄存器值(ebp)III. 更新页表基址寄存器值
A. 仅 III B. 仅 I、II C. 仅 I、III D. I、II、III
[tag_link]
正确答案:D
I. 更新程序计数器的值:程序计数器存储了下一条要执行的指令的地址。当进程切换时,操作系统需要更新程序计数器的值,以便于新的进程能从正确的位置开始执行。II. 更新栈基址寄存器的值:栈基址寄存器存储了当前进程栈的基址。当进程切换时,操作系统需要更新栈基址寄存器的值,以确保新的进程使用正确的栈。III. 更新页表基址寄存器值:页基址寄存器存储了当前进程的页表基址。当进程切换时,操作系统需要更新页基址寄存器的值,以确保新的进程能正确地访问其内存空间。
确定进程运行所需的最少页框数时,要考虑的指标是( )。
A. 代码段长 B. 虚拟地址空间大小 C. 物理地址空间大小 D. 指令系统支持的寻址方式
[tag_link]
正确答案:D
确定进程运行所需的最少页框数时,主要需考虑以下指标: D. 指令系统支持的寻址方式指令系统的寻址方式直接影响进程执行时可能访问的页框数量。例如,若指令支持间接寻址,则需更多页框以处理跨页访问的情况。每条指令若仅包含一个内存地址,则至少需1个页框;若涉及跨页访问或间接寻址,则需更多页框(如4个页框)。其他选项分析
- A. 代码段长:代码段长度影响总页框需求,但并非决定“最少”页框数的关键因素。
- B. 虚拟地址空间大小:虚拟地址空间大小决定进程可访问的地址范围,但实际所需页框数取决于当前执行需求而非虚拟空间上限。
- C. 物理地址空间大小:物理内存容量限制实际可分配的页框数,但与“最少”页框数的计算无关。综上,[tag_link]正确答案为 D。
若 64 位的系统采用三级虚拟分页存储管理方式,其结构如下图所示,第三级页表所占用的页框数是( )
| 补充位(25) | 一级页表(9) | 二级页表(9) | 三级页表(9) | 页内偏移(12) |
A. 1 B. 256 C. 256K D. 256M
[tag_link]
正确答案:C
在三级虚拟分页存储管理方式中,虚拟地址结构包括一级页表索引(9 位)、二级页表索引(9 位)、三级页表索引(9 位)和页内偏移(12 位)。页内偏移 12 位对应页面大小为 4 KB(212字节)。每个页表索引为 9 位,因此每个页表有29=512个页表项。假设每个页表项大小为 8 字节(典型 64 位系统),则每个页表大小为512×8=4096字节,恰好占用一个页框。三级页表的数量由一级和二级页表决定:
- 一级页表有 512 个条目,每个条目指向一个二级页表,因此最多有 512 个二级页表;
- 每个二级页表有 512 个条目,每个条目指向一个三级页表,因此三级页表的最大数量为512×512=262144个。每个三级页表占用一个页框,所以三级页表总共占用的页框数为 262144,即 256 K(因为256×1024=262144)。因此,正确答案为 C。
对于采用虚拟内存管理方式的系统,下列关于进程虚拟地址空间的叙述中,错误的是( )。
A. 每个进程都有自己独立的虚拟地址空间 B. C 语言中 malloc() 函数返回的是虚拟地址 C. 进程对数据段和代码段可以有不同的访问权限 D. 虚拟地址的大小由主存和硬盘的大小决定
[tag_link]
正确答案:D
A:虚拟地址空间是一个进程所使用的虚拟内存地址的集合,每个进程都有自己的虚拟 地址空间,这个空间是独立于其他进程的,每个进程都认为自己在访问整个系统的内存空间, 但实际上,它们只访问到了被分配给它们的部分内存。B:malloc 返回虚拟地址,当调用 malloc 时,分配出来的空间,只是在虚拟内存中是连续的,从实际的物理空间到虚拟内存空间还有一 个映射的关系。C:不同的段访问权限可以是不同的。一般来说,代码段可读可执行,并且只 能在特权模式下执行,但是不可写;数据段可以读写,不能执行。D:主存和硬盘的大小不直 接影响虚拟地址的实际大小,虚拟地址的大小由底层的虚拟内存管理机制和操作系统定义决定, 通常在不同的系统中有所不同。虚拟地址空间的大小可以在操作系统中进行配置和限制,而主 存和硬盘的大小影响的是实际可用的物理内存和存储容量,而非虚拟地址的大小,虚拟内存管 理机制通过将虚拟地址映射到物理内存或硬盘上的页面来提供更大的虚拟地址空间。因此,主 存和硬盘的大小可以影响实际可用的虚拟内存空间的大小,但并不直接决定虚拟地址的大小。 所以本题的答案为 D 选项。
下列方法中能够有效降低系统平均访存时间的是() I. TLB II. 多级页表III. 工作集概念IV. 页表缓冲队列
A. I、III B. II、III C. I、III、IV D. I、II、IV
[tag_link]
正确答案:C
【解析】 TLB(快表)能够缓存虚拟地址到物理地址的转换结果,在 TLB 命中时直接获取物理地址,避免访问内存中的页表,从而有效降低访存延迟。工作集概念用于指导页面置换算法,通过维持进程最近访问的页面集合在内存中,减少缺页中断的发生,降低缺页率,进而减少平均访存时间。页表缓冲队列可以缓存页表项,减少访问主存页表的次数,加速地址转换过程,也有助于降低平均访存时间。多级页表的主要目的是节省页表占用的内存空间,但可能增加地址转换的步数,导致访存延迟增加,因此不能有效降低平均访存时间。故正确选项为 I、III、IV,即 C。
下面关于虚拟存储器的论述中,正确的是( )。
A. 在段页式系统中以段为单位管理用户的逻辑空间,以页为单位管理内存的物理空间,有了虚拟存储器才允许用户使用比内存更大的地址空间 B. 为了提高请求分页系统中内存的利用率允许用户使用不同大小的页面 C. 为了能让更多的作业同时运行,通常只装入 10%~30% 的作业即启动运行 D. 最佳适应算法是实现虚拟存储器的常用算法
[tag_link]
正确答案:A
选项 A 正确描述了虚拟存储器的核心特性和段页式系统的管理方式。 > 在段页式系统中,用户的逻辑地址空间确实以段为单位进行组织和管理,这有助于反映程序的逻辑结构; > 而物理内存则以固定大小的页为单位进行分配和管理,提高了内存的利用效率。 > 虚拟存储器通过将部分数据暂存于磁盘等辅助存储中,允许程序使用比物理内存更大的逻辑地址空间,这正是虚拟存储器的基本定义和优势所在。 > 因此,A 的论述准确。 >
选项 B 不正确,因为请求分页系统通常采用固定大小的页面,以简化硬件设计和内存管理; > 若允许用户使用不同大小的页面,反而容易导致内存外部碎片,降低利用率,实践中并不常见。 >
选项 C 的表述不够严谨。 > 虚拟存储器确实允许作业仅部分装入内存即可启动运行,从而支持更多作业并发执行,但具体装入比例(如 10%~30%)并非固定或通用标准,它取决于程序的工作集特性和系统调度策略,因此不能作为一般性论述。 >
选项 D 错误,因为最佳适应算法主要用于动态分区内存管理中的空闲块分配,目的是减少外部碎片; > 而虚拟存储器的实现涉及页面置换算法(如 LRU、FIFO 等),最佳适应算法并非其常用算法。 >
进程 P1 和 P2 共享一个文件 R,该文件的页表项分别是 R1 和 R2,其在 2 个进程中的虚拟地址分别是 W1 和 W2,则下列说法中正确的是( )
A. 页表项 R1 和 R2 的内容完全不同 B. W1 和 W2 映射的物理地址相同 C. 进程 P1 对 W1 的修改不会影响 P2 对 W2 的访问 D. W1 和 W2 虚拟地址相同
[tag_link]
正确答案:B
**【解析】**进程 P1 和 P2 共享文件 R,这意味着它们通过各自的页表项 R1 和 R2 将虚拟地址 W1 和 W2 映射到相同的物理内存区域,因此 W1 和 W2 映射的物理地址相同。
- 选项 A 错误,因为页表项 R1 和 R2 至少物理地址部分相同,内容并非完全不同;
- 选项 C 错误,由于共享物理内存,P1 对 W1 的修改会影响 P2 对 W2 的访问;
- 选项 D 错误,虚拟地址是进程独立的,W1 和 W2 不一定相同。
进程 R 和 S 共享数据 data,若 data 在 R 和 S 中所在页的页号分别为 p1 和 p2,两个页所对应的页框号分别为 f1 和 f2,则下列叙述中,正确的是( )。
A. p1 和 p2 一定相等,f1 和 f2 一定相等 B. p1 和 p2 一定相等,f1 和 f2 不一定相等 C. p1 和 p2 不一定相等,f1 和 f2 一定相等 D. p1 和 p2 不一定相等,f1 和 f2 不一定相等
[tag_link]
正确答案:C
对于进程 R 和 S 共享数据 data 的情况,它们在各自的虚拟地址空间中有自己的页表, 虚拟地址到物理地址的转换是通过页表完成的。因此,对于同一虚拟地址,R 和 S 的页号 p1 和 p2 可能不相等,因为它们对应于各自的页表中的不同页项。然而,当数据 data 在内存中时, 它被映射到物理内存的同一页框中,即 f1 和 f2 是相等的,这是因为共享的数据页被映射到相 同的物理页框中,不同进程的虚拟地址映射到相同的物理地址。所以本题的正确选项为 C 选项。
已知计算机 M 字长为 32 位,按字节编址,采用请求调页策略的虚拟存储管理方式,虚拟地址为 32 位,页面大小为 4KB;数据 Cache 采用 4 路组相联映射,数据区大小为 8KB,主存块大小为 32B。现有 C 语言程序段如下:
for (i = 0; i < 24; i++)
for (j = 0; j < 64; j++) a[i][j] = 10;
已知二维数组 a 按行优先存放,在虚拟地址空间中分配的起始地址为 0042 2000H,sizeof(int)=4,假定在 M 上执行上述程序段之前数组 a 不在主存,且在该程序段执行过程中不会发生页面置换。请回答下列问题。
(1) 数组 a 分为几个页面存储?对于数组 a 的访问,会发生几次缺页异常?页故障地址各是什么?
(2) 不考虑变量 i 和 j,该程序段的数据访问是否具有时间局部性?为什么?
(3) 计算机 M 的虚拟地址(A31~A0)中哪几位用作块内地址?哪几位用作 Cache 组号?a[1][0] 的虚拟地址是多少?其所在主存块对应的 Cache 组号是多少?
(4) 数组 a 占用多少主存块?假设上述程序段执行过程中数组 a 的访问不会和其他数据发生 Cache 访问冲突,则数组 a 的 Cache 命中率是多少?若将循环中 i 和 j 的次序按如下方式调换:
for (j = 0; j < 64; j++)
for (i = 0; i < 24; i++) a[i][j] = 10;
则数组 a 的 Cache 命中率又是多少?
[tag_link]
1)数组 a 分布在 2 个页面中。缺页异常次数为 2。两个页故障地址分别是 0042 2000H、0042 3000H。
2)该程序段的数据访问没有时间局部性。因为每个数组元素仅访问 1 次。
3)虚拟地址中低 5 位 (A4A0) 用作块内地址;低 11 位虚拟地址中高 6 位 (A10A5) 用作 Cache组号。a[1][0]的虚拟地址为 0042 2000H+1×64×4+0×4=0042 2100H。a[1][0]所在主存块对应的 Cache 组号为 001000B=8。
4)数组 a 占 24×64×4B/32B=192 个主存块。每个主存块存放 32B/4B=8 个数组元素,访问数组 a 的 Cache 命中率为 (8-1)/8=87.5%。8 行数组元素占 8×64×4B/32B=64 个主存块,分别映射到 64 个 Cache 组的某 Cache 行,数组 a 共有 24 行,因此每个 Cache 组中只有 24/8=3 个 Cache行存放数组 a 中的数据,而每个 Cache 组有 4 行,因而不会发生替换,访问数组 a 的 Cache 命中率为 7/8=87.5%。
计算机 M 字长为 32 位,按字节编址,数据 cache 的数据区大小为 32KB,采 8 路组相联,主存块大小为 64B,cache 命中时间为 2 个时钟周期,缺失损失为 200 个时钟周期,采用页式虚拟存储,页大小为 4KB。数组 d 的起始地址为 0180 0020H(VA31~VA0)。
(1) 主存地址中的 Cache 组号,块内地址分别占几位?VA 中哪些位可以作为 Cache 索引。
(2) d[100] 的 VA 是多少?d[100] 所在主存块中对应的 Cache 组号是多少?
(3) 设代码已经在 cache 中,i,x 已装入内存,但不在 cache,则 d[0] 在其主存块内的偏移量是多少?执行 for 的过程中,访问 d 的 Cache 缺失率和数组元素的平均访问时间分别是多少?(缺失率用百分比表示,保留两位小数)
(4) d 分布在几个页中?若代码已在主存,d 不在主存,则执行 for 的过程中,访问 d 所引起的缺页次数是?
int x, d[2048], i;
for (i = 0; i < 2048; i++)
d[i] = d[i]/x;
[tag_link]
1)cache 块大小和主存块大小一致为 64B,所以块内偏移为 6 位(26=64)。cache 块的数量为 32KB / 64B = 512,由于采用 8 路组相连,所以总共有 512 / 8 = 64 个组,组号占 6 位(26=64)。所以第 6 位到第 11 位可以作为 Cache 索引(用来定位地址可能被哪一组所缓存)。
2)&d[100] = d + 100 * 4 = 0x0180 0020 + 400 = 0x0180 01B0,对应的二进制为 0000 0001 1000 0000 0000 0001 1011 0000,组号为 000110B 即 6。
3)物理地址的结构为:页内偏移 12 位,物理页号 20 位,所以 &d[0] 的页内偏移为 020H = 32。数组总共需要用 2048 * 4 / 64 = 128 个完整 cache 块存储,但由于数组第一个元素处于某个 cache 的中间(偏移为 32),所以总共需要 129 个 cache 块存储,在访问每个 cache 块中的第一个元素时会发生 Cache 缺失。另外需要注意一点,对于指令 d[i] = d[i] / x,实际上是访问了两次:一次读取,一次写入。所以在计算缺失率和平均访问时间的时候需要考虑这两次访问。缺失率 = 129 / (2048 * 2) ≈ 3.15%。数组的平均访问时间为 = (129 * 200 + (4096 - 129) * 2) / 4096 ≈ 8.24 个时钟周期。
4)数组 d 需要占用 8KB 的存储空间,占用两个页面。由于数组的起始地址处于页面内部(偏移 32B),所以数组 d 分布在三个页面中,触发的缺页次数为 3。
某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为 16MB,主存(物理)地址空间大小为 1MB,页面大小为 4KB:Cache 采用直接映射方式,共 8 行:主存与 Cache 之间交换的块大小为 32B。系统运行到某一时刻时,页表的部分内容和 Cache 的部分内容分别如题 44-a 图、题 44-b 图所示,图中页框号及标记字段的内容为十六进制形式。
请回答下列问题∶
(1) 虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位,哪几位表示页框号(物理页号)?
(2) 使用物理地址访问 Cache 时,物理地址应划分成哪几个字段?要求说明每个字段的位数及在物理地址中的位置。
(3) 虚拟地址 001C60H 所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否 Cache 命中?要求说明理由。
(4) 假定为该机配置一个 4 路组相连的 TLB,该 TLB 共可存放 8 个页表项,若其当前内容(十六进制)如题 44-c 图所示,则此时虚拟地址 024BACH 所在的页面是否在主存中?要求说明理由。
[tag_link]
1)存储器按字节编址,虚拟地址空间大小为 16B=24B,故虚拟地址为 24 位;页面大小为4KB=212B,故高 12 位为虚页号。主存地址空间大小为1MB=22B,故物理地址为 20 位;由于页内地址为 12 位,故高 8 位为页框号。
2)由于 Cache 采用直接映射方式,所以物理地址各字段的划分如下。
| Tag 标记 | Cache 行号 | 块内偏移 |
块大小为 32B,所以块内偏移为 5 位;Cache 共 8 行,故 Cache 行号为 3 位,标记字段为 20-5-3=12 位。
3)虚拟地址 001C60H 的前 12 位为虚页号,即 001H,查看 001H 处的页表项,其对应的效位为 1,故虚拟地址 001C60H 所在的页面在主存中。页表 001H 处的页框号为 04H,与页内偏移(虚拟地址后 12 位)拼接成物理地址为 04C60H.物理地址 04C60H=00000100110001100000B,主存块只能映射到 Cache 的第 3 行(即第 011B 行),由于该行的有效位=1,标记(值为 105H) ≠ 04CH(物理地址高 12 位),故不命中。
4)由于 TLB 采用四路组相联,故 TLB 被分为 8/4=2 个组,因此虚页号中高 11 位为 TLB 标记、最低 1 位为 TLB 组号。虚拟地址 024BACH=000000100100101110101100B,虚页号为 000000100100B,TLB 标记为 00000010010B(即 012H),TLB 组号为 0B,因此,该虚拟地址所对应物理页面只可能映射到 TLB 的第 0 组。组 0 中存在有效位=1、标记=012H 的项,因此访问 TLB 命中,即虚拟地址 024BACH 所在的页面在主存中。
某计算机采用页式虚拟存储管理方式,按字节编址。CPU 进行存储访问的过程如题 44 图所示。
根据题 44 图回答下列问题。
(1) 主存物理地址占多少位?
(2) TLB 采用什么映射方式?TLB 用 SRAM 还是 DRAM 实现?
(3) Cache 采用什么映射方式?若 Cache 采用 LRU 替换算法和回写(Write Back)策略,则 Cache 每行中除数据(Data)、Tag 和有效位外,还应有哪些附加位?Cache 总容量是多少?Cache 中有效位的作用是什么?
(4) 若 CPU 给出的虚拟地址为 0008C040H,则对应的物理地址是多少?是否在 Cache 中命中?说明理由。若 CPU 给出的虚拟地址为 0007C260H,则该地址所在主存块映射到的 Cache 组号是多少?
[tag_link]
1)物理地址 由实页号和页内地址拼接,因此其位数为 16+12=28 或直接可得 20+3+5=28。
2)TLB 采用全相联映射,可以把页表内容调入任一块空 TLB 项中,TLB 中每项都有一个比较器,没有映射规则,只要空闲就行。TLB 采用静态存储器 SRAM,读写速度快,但成本高,多用于容量较小的高速缓冲存储器。
3)从图中可以看到,Cache 中每组有两行,故采用 2 路组相联映射。因为是 2 路组相联并采用 LRU 替换算法,所以每行(或每组)需要 1 位 LRU 位;因为采用回写策略,所以每行有 1 位修改位(脏位),根据脏位判断数据是否被更新,若脏位为 1 则需要写回内存。28 位物理地址中 Tag 字段占 20 位,组索引字段占 3 位,块内偏移地址占 5 位,故 Cache共有23=8组,每组 2 行,每行有25=32 B,故 Cache 总容量为8×2×(20+1+1+1+32×8)=4464位= 558 字节。Cache 中有效位用来指出所在 Cache 行中的信息是否有效。
4)虚拟地址分为两部分:虚页号、页内地址;物理地址分为两部分:实页号、页内地址。利用虚拟地址的虚页号部分去查找 TLB 表(缺失时从页表调入),将实页号取出后和虚拟地址的页内地址拼接,就形成了物理地址。虚页号 008CH 恰好在 TLB 表中对应实页号 0040H(有效位为 1,说明存在),虚拟地址的后 3 位为页内地址 040H,则对应的物理地址是 0040040H。物理地址为 0040040H,其中高 20 位 00400H 为标志字段,低 5 位 00000B 为块内偏移量,中间 3 位 010B 为组号 2,因此将 00400H 与 Cache 中的第 2 组两行中的标志字段同时比较,可以看出,虽然有一个 Cache 行中的标志字段与 00400H 相等,但对应的有效位为 0,而另一 Cache 行的标志字段与 00400H 不相等,故访问 Cache 不命中。因为物理地址的低 12 位与虚拟地址低 12 位相同,即为 001001100000B。根据物理地址的结构,物理地址的后八位 01100000B 的前三位 011B 是组号,因此该地址所在的主存映射到 Cache 的组号为 3。
对于题 43 中的计算机 M,C 语言程序 P 包含的语句 sum+=a[i];,在 M 中对应的指令序列 S 如下:
slli r4, r2, 2 // R[r4] <- R[r2]<<2
add r4, r3, r4 // R[r4] <- R[r3]+R[r4]
lw r5, 0(r4) // R[r5] <- M[R[r4]+0]
add r1, r1, r5 // R[r1] <- R[r1]+R[r5]
已知变量 i,sum 和数组 a 都为 int 型,通用寄存器 r1 - r5 的编号为 01H-05H。请回答下列问题。
(1)根据指令序列 s 中每条指令的功能,写出存放数组 a 的首地址、变参 i 和 sum 的通用寄存器编号(3 分)
(2)已知 M 为小端方式,计算机采用页式存储管理方式。页大小为 4KB。若执行到指令序列 s 中第 1 条指令时,i=5 且 r1 和 r3 的内容分别为 0000 1332H 和 0013 DFF0H。从地址 0013 DFF0H 开始存储单元内容如题 44 图所示。则执行 sum+=a[i]; 语句后。a[i] 的地址、a[i] 和 sum 的机器数分别是什么(用十六进制表示)?a[i] 所在页的页号是多少?在此次执行中,数据组 a 至少存放在几页中?(5 分)
(3)指令 slli r4, r2, 2 的机器码是什么(用十六进制表示)?若数组 a 改为 short 类型,则指令序列存到 S 中 slli 指令的汇编形式应是什么?
[tag_link]
【答案】
1)a 的首地址存放在 r3;i 存放在 r2;sum 存放在 r1。
2)a[i] 的地址为 0013 E004H;a[i] 的机器数为 FFFF ECDCH;sum 的机器数为 0000 000EH;a[i] 所在页的页号是 0013EH;数组 a 至少存放在 2 页中。
3)指令机器码为 0021 2213H。汇编形式是 slli r4, r2, 1。【解析】
1)add r4,r3,r4:这条指令将寄存器 r3 和 r4 的值相加,结果存储在寄存器 r4 中。这对应于计算数组元素的内存地址(即&a[i])。因此,我们可以推断出寄存器 r3 存储的是数组 a 的首地址,即 a 的寄存器编号为 03H。slli r4,r2,2:这条指令将寄存器 r2 的值左移 2 位,2 结果存储在寄存器 r4 中。在 C 语言中,这对应于数组索引的计算(即 i*4,因为每个 int 类型占 4 字节)。因此,我们可以推断出寄存器 r2 存储的是变量 i 的值,即的寄存器编号位 02H。add r1,rl,r5:这条指令将寄存器 r1 和 r5 的值相加,结果存储在寄存器 r1 中。这对应于累加操作(即 sum+=a[i])。因此,我们可以推断出寄存器 r1 存储的是变量 sum 的值,即 sum 的寄存器编号为 01H。所以,数组 a 的首地址、变量 i 和 sum 的通用寄存器编号分别为 03H、02H 和 01H。
2)执行 sum+=a[i] 语句后,i 保持不变即 i = 5,每个数组元素占用四个字节
i=0时,a[0]占据存储单元 FF FF FF 7Ci=1时,a[1]占据存储单元 70 FE FF FFi=2时,a[2]占据存储单元 00 00 00 00i=3时,a[3]占据存储单元 3C 02 01 FFi=4时,a[4]占据存储单元 FF FF FF 7Ci=5时,a[5]占据存储单元 F0 F1 00 00i=6时,a[6]占据存储单元 DC EC FF FF所以a[i]的地址 = 首地址 + 偏移量 =0013 E000 + 4 * (5-1)= 0013 E004H。a[i]的机器数按照小端编址,所以 DC 作为最低位放在最右边,以此类推可得:a[i] 的机器数 = FFFF ECDCH。sum 的机器数 = 0000 1332H + FFFF ECDCH = (1) 0000 000EH。由于只有 32 位,所以最高位舍掉后答案为 0000 000EH。页大小为 4KB =212 B,所以页内地址占 12 位,去掉后 12 位剩余的则是 20 位页号,a[i] 所在页页号 = 0013EH。我们有 20 位页号,根据题目可知数组跨页号了 0013E 和 0013D,所以数组 a 至少存放在 2 页中。
3)slli r4,r2,2 // R[r4]←R[r2]<<2通用寄存器 r1→r5 的编号位 01H→05H。
- 6~0:由表可得:0010011
- 11~7:rd = r2 = 00010
- 14~12:由表可知为 010
- 19~15:rd = r4 = 00100
- 24~20:shamt = 2,可以为 2420:
- 31~25:由表可知为 000 0000机器码 = 0000 0000 0010 0001 0010 0010 0001 0011B = 0021 2213H。若 a 改为 short 类型,slli 指令的汇编形式应该是
slli r4, r2, 1。
假设对于题44中的计算机 M 和程序段P 的机器代码,M 采用页式虚拟存储管理;P 开始执 行时,(R1)=(R2)=0,(R6)=1000, 其机器代码已调入主存但不在Cache 中;数组A 未调入主存,且所有数 组元素在同一页,并存储在磁盘同一个扇区。请回答下列问题并说明理由。
(1)P 执行结束时,R2的内容是多少?
(2)M 的指令Cache和数据Cache分离。若指令Cache共有16行,Cache 和主存交换的块大小为32字节, 则其数据区的容量是多少?若仅考虑程序段P 的执行,则指令Cache的命中率为多少?
(3)P 在执行过程中,哪条指令的执行可能发生溢出异常?哪条指令的执行可能产生缺页异常?对于数组A 的访问,需要读磁盘和TLB 至少各多少次?
[tag_link]
该题涉及指令系统、存储管理以及 CPU 三个部分内容,考生应注意各章节内容之间的联系。
已知计算机 M 采用 32 位定长指令字,即一条指令占 4B,观察表中各指令的地址可知,每条指令的地址差为 4 个地址单位,即 4 个地址单位代表 4B,一个地址单位就代表了 1B,所以该计算机是按字节编址的。(2 分)
在二进制中某数左移两位相当于乘以 4,由该条件可知,数组间的数据间隔为 4 个地址单位,而计算机按字节编址,所以数组 A 中每个元素占 4B。(2 分)
由表可知,bne 指令的机器代码为 1446 FFFAH,根据题目给出的指令格式,后 2B 的内容为 OFFSET 字段,所以该指令的 OFFSET 字段为 FFFAH,用补码表示,值为 -6(1 分)。当系统执行到 bne 指令时,PC 自动加 4,PC 的内容就为 08048118H,而跳转的目标是 08048100H,两者相差了 18H,即 24 个单位的地址间隔,所以偏移址的一位即是真实跳转地址的 -24/-6=4 位(1 分)。可知 bne 指令的转移目标地址计算公式为 (PC)+4+OFFSETx4(1 分)。
由于数据相关而发生阻塞的指令为第 2、3、4、6 条,因为第 2、3、4、6 条指令都与各自前一条指令发生数据相关。(3 分) 第 6 条指令会发生控制冒险。(1 分) 当前循环的第五条指令与下次循环的第一条指令虽然有数据相关,但由于第 6 条指令后有 3 个时钟周期的阻塞,因而消除了该数据相关。(1 分)
【评分说明】对于第 1 问,若考生回答:因为指令 1 和 2、2 和 3、3 和 4、5 和 6 发生数据相关,因而发生阻塞的指令为第 2、3、4、6 条,同样给 3 分。答对 3 个以上给 3 分,部分正确酌情给分。
[tag_link]
某计算机采用页式虚拟存储管理方式,按字节编址,虚拟地址为 32 位,物理地址为 24 位,页大小为 8KB;TLB 采用全相联映射;Cache 数据区大小为 64KB,按 2 路组相联方式组织,主存块大小为 64B。存储访问过程的示意图如下。
请回答下列问题。
(1) 图中字段 A~G 的位数各是多少?TLB 标记字段 B 中存放的是什么信息?
(2) 将块号为 4099 的主存块装入到 Cache 中时,所映射的 Cache 组号是多少?对应的 H 字段内容是什么?
(3) Cache 缺失处理的时间开销大还是缺页处理的时间开销大?为什么?
(4) 为什么 Cache 可以采用直写 (Write Through) 策略,而修改页面内容时总是采用回写 (Write Back) 策略?
1)页大小为 8KB,页内偏移地址为 13 位,故 A = B = 32-13 = 19;D = 13;C = 24-13 = 11;主存块大小为 64B,故 G = 6。2 路组相联,每组数据区容量有 64B×2 = 128B,共有 64KB/128B = 512 组,故 F = 9;E = 24-G-F = 24-6-9 = 9。因而 A=19,B=19,C=11,D=13,E=9,F=9,G=6。(各 1 分,共 7 分)TLB 中标记字段 B 的内容是虚页号,表示该 TLB 项对应哪个虚页的页表项。(1 分)
2)块号 4099=000001000000000011B,因此,所映射的 Cache 组号为 000000011B=3,(1 分)对应的 H 字段内容为 000001000B。(1 分)
3)Cache 缺失带来的开销小,而处理缺页的开销大。(1 分)因为缺页处理需要访问磁盘,而 Cache 缺失只要访问主存。(1 分)【评分说明】对于
(3) 中第 2 问,若考生回答因为缺页需要软件实现而 Cache 缺失用硬件实现,则同样给分。
4)因为采用 直写法 时需要同时写快速存储器和慢速存储器,而写磁盘比写主存慢很多,所以,在 Cache-主存层次,Cache 可以采用直写策略,而在主存 - 外存(磁盘)层次,修改页面内容时总是采用 回写法。(2 分)
某计算机按字节编址,采用页式虚拟存储管理方式,虚拟地址和物理地址的长度均为 32 位,页表项的大小为 4 字节,页大小为 4MB,虚拟地址结构如下:
进程 Р 的页表起始虚拟地址为 B8C0 0000H,被装载到从物理地址 6540 0000H 开始的连续主存空间中。请回答下列问题:
(1)若 CPU 在执行进程 P 的过程中,访问虚拟地址 1234 5678H 时发生了缺页异常,经过缺页异常处理和 MMU 地址转换后得到的物理地址是 BAB4 5678H。在此次缺页异常的处理中,需要为新缺页分配页框并更新相应的页表项,则该页表项的虚拟地址和物理地址分别是什么?该页表项中的页框号更新后的值是什么?(3 分)
(2)进程 P 的页表所在页的页号是什么?该页对应的页表项的虚拟地址是什么?该页表项中的页框号是多少?(4 分)
[tag_link]
1)首先,我们需要确定虚拟地址 12345678H 对应页号。由于页号占 10 位,1234 5678H = 0001 0010 0011 0100 0101 0110 0111 1000B。计算得到:页内偏移量(22 位)= 11 0100 0101 0110 0111 1000B = 345678H页号(10 位)= 00 0100 1000B = 048H然后,我们需要找到这个页号对应的页表项的虚拟地址和物理地址。由于页表项的大小为字节,我们可以通过将页号乘以 4 得到页表项的偏移量。然后将这个偏移量加到页表的起始地址上,就可以得到页表项的虚拟地址和物理地址。进程 P 的页表起始虚拟地址为 B8C0 0000H,物理地址 654 0000H。计算得到:页表项虚拟地址 = 页表起始虚拟地址 + 页号×4 = B8C00000H + 048H×4 = B8C00120,页表项物理地址 = 页表起始物理地址 + 页号×4 = 65400000H + 048H×4 = 65400120H。最后,我们需要更新页表项中的页框号。由于经过 U 地址转换后得到的物理地址是 BAB4 5678H,我们可以通过右移 22 位得到页框号。计算得到:页框号 = 物理地址 BAB45678H 的前 10 位,即 10 1110 1010B = 2EAH。
2)首先,我们需要确定进程即的页表所在页的页号。由于页表起始虚拟地址位 B8C00000H,我们可以通过右移 22 位得到页号。计算得到:进程 P 的页表所在页的页号等于 B8C0 0000 的前 10 位,即 10 1110 0011B = 2E3H。然后,我们需要找到这个页号对应的页表项的虚拟地址。由于页表项的大小为 4 字节,我们可以通过将页号乘以 4 得到页表项的偏移量。然后将这个偏移量加到页表的起始地址上,就可以得到顷表项的虚拟地址。计算得到:该页对应的页表项的虚拟地址 = B8C0 0000H + 2E3H*4 = B8C0 0B8CH。最后,我们需要确定贡表项中的页框号。由于页表被装在到从物理地址 65400000 开始的连续主存空间中,我们可以通过右移 22 位得到页框号。计算得到:该页表项中的页框号等于物理地址 6540 0000H 的前 10 位,即 01 1001 0101B = 195H。
某计算机主存按字节编址,逻辑地址和物理地址都是 32 位,页表项大小为 4 字节。请回答下列问题。
(1) 若使用一级页表的分页存储管理方式,逻辑地址结构为:

则页的大小是多少字节?页表最大占用多少字节?
(2) 若使用二级页表的分页存储管理方式,逻辑地址结构为:

设逻辑地址为 LA,请分别给出其对应的页目录号和页表索引的表达式。
(3) 采用
(1) 中的分页存储管理方式,一个代码段起始逻辑地址为 0000 8000H,其长度为 8KB,被装载到从物理地址 0090 0000H 开始的连续主存空间中。页表从主存 0020 0000H 开始的物理地址处连续存放,如下图所示(地址大小自下向上递增)。请计算出该代码段对应的两个页表项的物理地址、这两个页表项中的页框号以及代码页面 2 的起始物理地址。

1)因为主存按字节编址,页内偏移量是 12 位,所以页大小为212 B=4 KB。(1 分)页表项数为220,故该一级页表最大为220×4 B =4 MB。(2 分)
2)页目录号可表示为:(((unsigned int)(LA)) >> 22) & 0x3FF。(1 分)页表索引可表示为:(((unsigned int)(LA)) >> 12) & 0x3FF。(1 分)【评分说明】①页目录号也可以写成 (unsigned int)(LA) > 22;如果两个表达式没有对 LA 进行类型转换,同样给分。②如果用除法和其他开销很大的运算方法,但对基本原理是理解的,同样给分。③参考答案给出的是 C 语言的描述,用其他语言(包括自然语言)正确地表述了,同样给分。
3)代码页面 1 的逻辑地址为 00008000H,表明其位于第 8 个页的位置,对应页表中的第 8 个页表项,所以第 8 个页表项的物理地址 = 页表起始地址 + 8×页表项的字节数 = 00200000H + 8×4 = 00200020H。由此可得如下图所示的答案。(3 分)【评分说明】共 5 个答数。物理地址 1 和物理地址 2 共 1 分;页框号 1 和页框号 2 共 1 分;物理地址 3 给 1 分。
[tag_link]
某计算机系统按字节编址,采用二级页表的分页存储管理方式,虚拟地址格式如下所示:
| 页目录号(10 位) | 页表索引(10 位) | 页内偏移量(12 位) |
|---|
请回答下列问题。
(1) 页和页框的大小各为多少字节?进程的虚拟地址空间大小为多少页?
(2) 假定页目录项和页表项均占 4 个字节,则进程的页目录和页表共占多少页?要求写出计算过程。
(3) 若某指令周期内访问的虚拟地址为 0100 0000H 和 0111 2048H,则进行地址转换时共访问多少个二级页表?要求说明坪由。
1)在分页存储管理方式 中,将用户程序的地址空间分为若干固定大小的区域,称为“页”或“页面”。相应地,将内存空间分为若干物理块或页框(frame),页和页框大小相同。因此,页和页框大小均为212 B =4 KB。进程的虚拟地址空间大小为232/212=220页。
2)(210×4)/212(页目录所占页数)+(220×4)/212(页表所占页数)=1025页。
3)需要访问一个二级页表。因为虚拟地址 01000000H 和 01112048H 的最高 10 位的值都是 4,页目录号相同,访问的是同一个二级页表。【评分说明】用其他方法计算,思路和结果正确同样给分。
某 32 位系统采用基于二级页表的请求分页存储管理方式,按字节编址,页目录项和页表项长度均为 4 字节,虚拟地址结构如下所示。
页目录号(10位) 页号(10位) 页内偏移量(12位)
某 C 程序中数组 a[1024][1024]的起始虚拟地址为 1080 0000H,数组元素占 4 字节,该程序运行时,其进程的页目录起始物理地址为 0020 1000H,请回答下列问题。
(1) 数组元素 a[1][2]的虚拟地址是什么?对应的页目录号和页号分别是什么?对应的页目录项的物理地址是什么?若该目录项中存放的页框号为 00301H,则 a[1][2]所在页对应的页表项的物理地址是什么?
(2) 数组 a 在虚拟地址空间中所占区域是否必须连续?在物理地址空间中所占区域是否必须连续?
(3) 已知数组 a 按行优先方式存放,若对数组 a 分别按行遍历和按列遍历,则哪一种遍历方式的局部性更好?
[tag_link]
1) ①页面大小=212 B = 4096B = 4KB。每个数组元素 4B,每个页面可以存放 4KB/4B=1024 个数组元素,正好是数组的一行,数组 a 按行优先方式存放。10800000H 的虚页号为 10800H,因此 a[0] 行存放在虚页号为 10800H 的页面中,a[1] 行存放在页号为 10801H 的页面中。a[1][2] 的虚拟地址为 10801000H+4×2=10801008H。②转换为二进制 0001 0000 1000 0000 0001 0000 0000 1000,根据虚拟地址结构可知,对应的页目录号为 042H,页号为 001H。③进程的页目录表起始地址为 00201000H,每个页目录项长 4B,因此 042H 号页目录项的物理地址是 00201000H+4×42H=00201108H。④页目录项存放的页框号为 00301H,二级页表的起始地址为 00301000H,因此 a[1][2]所在页的页号为 001H,每个页表项 4B,因此对应的页表项物理地址是 00301000H + 001H×4 = 00301004H。
2)根据数组的随机存取特点,数组 a 在虚拟地址空间中所占的区域必须连续,由于数组 a不止占用一页,相邻逻辑页在物理上不一定相邻,因此数组 a 在物理地址空间中所占的区域可以不连续。
3)由 1)可知每个页面正好可以存放一整行的数组元素,“按行优先方式存放”意味着数组的同一行的所有元素都存放在同一个页面中,同一列的各个元素都存放在不同的页面中,因此数组 a 按行遍历的局部性较好。