🏷️ 知识点:Cache概念
一个C 语言程序在一台32位机器上运行。程序中定义了三个变量x,y 和z, 其中x 和z 是int 型,y 为 short 型。当x=127,y=-9 时,执行赋值语句z=x+y 后 ,x 、y和z 的值分别是()。
A.x=0000007FH,y=FFF9H,z=00000076H
B.x=0000007FH,y=FFF9H,z=FFFF0076H
C.x=0000007FH,y=FFF7H,z=FFFF0076H
D.x=0000007FH,y=FFF7H,z=00000076H
[tag_link]
正确答案:D
C 语言中的整型数据为 补码表示 ,int 为 32 位,short 为 16 位,故 x、y 转换成十六进制为 0000007FH、FFF7H。执行 z=x+y 时,由于 x 是 int 型,y 为 short 型,需将短字长数据转换成长字长数据,称之为“符号扩展”。由于 y 的符号位为 1,故在 y 的前面添加 16 个 1,即可将 y 上升为 it 型,其十六进制形式为 FFFFFFF7H。最后执行加法,即 O0OO007FH+FFFFFFF7H=00000076H,其中最高位的进位 1 自然丢弃。故选 D。【排除法】对于 x 的值,4 个选项都一样,无须计算;z=x+y=127-9=118>0,前 4 个字节必然全 0,排除 BC;只需算出 y=-9 的值即可,其十六进制形式为 FFF7H,排除 A。【提示】解题时,应先排除明显错误的选项,然后再推敲剩下的选项。
对机器数 1010 0110B 先执行算术右移 3 位,再执行算术左移 2 位,最终结果是( )。
A. 1101 0000B
B. 1101 0011B
C. 0101 0000B
D. 0101 0011B
[tag_link]
正确答案:A
**【解析】**机器数 1010 0110B 是一个 8 位有符号数(二进制补码表示)。先执行算术右移 3 位,再执行算术左移 2 位。
算术右移 3 位:符号位(最高位为 1)被保留并向左扩展。原始位从高位到低位记为A0到A7(A0为符号位),右移后得到B0到B7,其中B0到B3均填充为A0 (1),B4到B7依次为A1 (0)、A2 (1)、A3 (0)、A4 (0),结果为
1111 0100B(即 -12 的二进制补码)。算术左移 2 位:将
1111 0100B左移 2 位,高位丢弃,低位补 0,得到1101 0000B(即 -48 的二进制补码)。
最终结果为 1101 0000B,对应选项 A。
由3个“1”和5个“0”组成的8位二进制补码,能表示的最小整数()。
A.-126
B.-125
C.-32
D.-3
[tag_link]
正确答案:B
使用 补码 表示整数时,负数的符号位为 1, 数值位按位取反,末位加 1, 因此剩下的 2 个 1 在最低位时,表示的是最小整数,为 10000011, 转换成真值为 -125。
已知用 IEEE 754 单精度浮点数表示浮点型变量,采用就近舍入(中间值取偶数)。若浮点型变量x为12.1,则x的机器数是( )
A. 4141 9999H
B. 4141 999AH
C. 41E0 CCCCH
D. 41E0 CCCDH
[tag_link]
正确答案:B
**【解析】****1. 确定数量级(指数部分)**12.110∈[8,16)⇒12.1=1.5125×23- 符号位:0
- 指数:(3 + 127 = 130 = 1000,0010_2)2. 计算尾数把 1.5125 转成二进制小数:1.5125=1+0.5125对小数部分反复乘 2:
| 步骤 | 值 |
|---|---|
| 0.5125 × 2 = 1.025 | 1 |
| 0.025 × 2 = 0.05 | 0 |
| 0.05 × 2 = 0.1 | 0 |
| 0.1 × 2 = 0.2 | 0 |
| 0.2 × 2 = 0.4 | 0 |
| 0.4 × 2 = 0.8 | 0 |
| 0.8 × 2 = 1.6 | 1 |
| 0.6 × 2 = 1.2 | 1 |
| … | … |
得到二进制近似:
1.10000001100110011001100…₂
**3. 就近舍入(中间值取偶)**IEEE 754 单精度尾数 23 位,截断时:
…10011001100110011001100 1100…
- 被舍弃部分 > 0.5 ULP
- 或者正好在中间且最低位为奇数👉 需要进 1因此尾数末位变为
…100110104. 拼装 IEEE 754 单精度
| 部分 | 内容 |
|---|---|
| 符号 | 0 |
| 指数 | 10000010 |
| 尾数 | 10000011001100110011010 |
转换为十六进制:
0 | 10000010 | 10000011001100110011010
↓
4141999A₁₆
最终答案****B 4141 999AH
某 C 语言程序段如下:
for (i = 0; i <= 9; i++) {
temp = 1;
for (j = 0; j <= i; j++)
temp *= a[j];
sum += temp;
}
下列关于数组 a 的访问局部性的描述中,正确的是( )。
A. 时间局部性和空间局部性皆有 B. 无时间局部性,有空间局部性 C. 有时间局部性,无空间局部性 D. 时间局部性和空间局部性皆无
[tag_link]
正确答案:A
时间局部性 是一旦一条指令被执行,则在不久的将来它可能再次被执行。空间局部性 是一旦一个存储单元被访问,那么它附近的存储单元也很快被访问。显然,这里的循环指令本身具有时间局部性,它对数组 a 的访问具有空间局部性,故选 A。
某计算机的Cache 共有16块,采用2路组相联映射方式(即每组2块)。每个主存块大小为32字节, 按字节编址。主存129号单元所在主存块应装入到的Cache 组 号 是 ( ) 。
A.0
B.1
C.4
D.6
[tag_link]
正确答案:C
由于 Cache 共有 16 块,采用 2 路组相联,因此共分为 8 组,组号为 0,1,2,…,7。主存的 某一字块按模 8 映射到 Cache 某组的任一字块中,即主存的第 0,8,l6,…字块可以映射到 Cache 第 0 组的任一字块中。每个主存块大小为 32 字节,故 129 号单元位于第 4 块主存块(注意是从 0 开始),因此将映射到 Cache 第 4 组的任一字块中。
用 8 个 64 M×8 bit 的 DRAM 芯片按交叉编址方式构成主存储器,并与一个宽度为 64 bit 的存储器总线相连。主存每次最多读写 64 bit,且按字节编址。则下列地址中,与主存地址 0018 001DH 位于同一芯片中的是( )
A. 0000 01D5H
B. 000F A020H
C. 0018 001EH
D. 0101 0011B
[tag_link]
正确答案:A
**【解析】**由 8 个 64M×8bit 的 DRAM 芯片按交叉编址方式构成主存储器,每个芯片容量为 64MB,总容量为 512MB。按字节编址,地址线共 29 位。交叉编址时,地址的低位用于选择芯片,高位用于芯片内地址。由于有 8 个芯片,地址的低 3 位(模 8)决定芯片编号。给定地址 0018 001DH 的十六进制值为 0x0018001D,低 3 位二进制为 101(因为 0x1D 的低 3 位为 101),即模 8 余 5。因此,与它位于同一芯片的地址必须模 8 余 5。
- 选项 A:
0000 01D5H,低 3 位为 101(0xD5 的低 3 位为 101),余 5,符合。 - 选项 B:
000F A020H,低 3 位为 000,余 0,不符合。 - 选项 C:
0018 001EH,低 3 位为 110(0x1E 的低 3 位为 110),余 6,不符合。 - 选项 D:
0101 0011B为二进制数,低 3 位为 011,余 3,不符合。故只有选项 A 与给定地址位于同一芯片。
有如下 C 语言程序段:
for (k = 0 ;k< a[k]=a[k]+
1000;k++) 32;
若数组 a 以及变量 k 均为 int 型 ,int 型数据占4B, 数据 Cache 采用直接映射方式,数据区大小是 1KB, 块大小是16B, 该程序段执行前 Cache 为空,则该程序段执行过程中,访问数组 a 的 Cache 的 缺失率是()。
A. 1.25% B. 2.5% C. 12.5% D. 25%
[tag_link]
正确答案:C
分析语旬 a[k] = a[k] + 32 : 首先读取 a[k] 需要访问一次 a[k] ,之后将结果赋值给 a[k] 需要访问一次,共访问两次。第一次访问 a[k] 未命中,并将该字所在的主存块调入 Cache 对应的块中,对于该主存块中的 4 个整数的两次访问中只在访问第一次的第一 个元素时发生缺失,其他 的 7 次访问中全部命中,故该程序段执行过程中访问数组 a 的 Cache 缺失率约为 1/8(即 12.5%)。
下列关于TLB 和Cache的叙述中,错误的是()。
A. 命中率都与程序局部性有关 B. 缺失后都需要去访问主存 C. 缺失处理都可以由硬件实现 D. 都由DRAM存储器组成
[tag_link]
正确答案:D
Cache 由 SRAM 组成;TLB 通常由相联存储器组成,也可由 SRAM 组成。DRAM 需要不断刷新,性能偏低,不适合组成 TLB 和 Cache 选项 A、B 和 C 都是 TLB 和 Cache 的特点。
下列不是由指令集体系结构规定的是()
A. 输入输出指令 B. 采用向量中断 C. 虚拟存储管理方式 D. 指令流水线是否使用超级流水线技术
[tag_link]
正确答案:D
指令集体系结构(ISA)定义了软件与硬件之间的接口规范,包括指令集、寄存器、内存模型、中断机制等,但不涉及硬件实现细节。选项 A 的输入输出指令是 ISA 的一部分,用于控制 I/O 设备;选项 B 的向量中断属于中断处理机制,通常由 ISA 规定中断向量表和处理流程;选项 C 的虚拟存储管理方式与 ISA 相关,ISA 可能规定虚拟内存的基本支持(如地址转换机制),但具体管理方式部分由硬件和操作系统实现;选项 D 的指令流水线是否使用超级流水线技术是微架构(microarchitecture)的实现选择,属于处理器内部设计优化,不属于 ISA 的规定范畴,因此 D 不是由指令集体系结构规定的。
下列关于闪存( Flash Memory) 的叙述中,错误的是()。
A. 信息可读可写,并且读、写速度一样快
B. 存储元由MOS管组成,是一种半导体存储器
C. 掉电后信息不丢失,是一种非易失性存储器
D. 采用随机访问方式,可替代计算机外部存储器
[tag_link]
正确答案:A
闪存 是 EEPROM 的进一步发展,可读可写,用 MOS 管的浮栅上有无电荷来存储信息。闪存依然是 ROM 的一种,写入时必须先擦除原有数据,故写的速度比读的速度要慢不少(硬件常识)。闪存是一种非易失性存储器,它采用随机访问方式。现在常见的 SSD 固态硬盘,即由Flash 芯片组成。
采用指令Cache 与数据Cache 分离的主要目的是()。
A. 降低 Cache 的缺失损失
B. 提 高Cache 的命中率
C. 降低CPU 平均访存时间
D. 减少指令流水线资源冲突
[tag_link]
正确答案:D
把指令 Cache 与数据 Cache 分离后,取指和取数分别到不同的 Cache 中寻找,那么指令流水线中取指部分和取数部分就可以很好地避免冲突,即减少了指令流水线的冲突,选 D。
某存储器容量为64KB, 按字节编址,地址4000H~5FFFH为ROM 区,其余为RAM 区。若采用8K ×4位的SRAM芯片进行设计,则需要该芯片的数量是()。
A. 7 B. 8 C. 14 D. 16
[tag_link]
正确答案:C
参考 主存容量的扩展 ,5FFFH - 4000H + 1 = 2000H,即 ROM 区容量为 2 13 B = 8KB(2000H = 2 × 1 6 3 = 2 13 ),RAM 区容量为 56KB(64KB-8KB=56KB),则需要 8 Kx4 位的 SRAM 芯片的数量为 14(56KB/(8Kx4bit)=14)。
某机器字长16位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字 段,第二字节为相对位移量字段。假定取指令时,每取一个字节PC 自动加1。若某转移指令所在主存地 址为2000H, 相对位移量字段的内容为06H, 则该转移指令成功转移后的目标地址是()。
A. 2006H B.2007H C.2 008H D.2009H
[tag_link]
正确答案:C
相对寻址 EA = (PC)+A,首先要求的是取指令后 PC 的值。转移指令由两个字节组成,每取一个字节 PC 值自动加 1,因此取指令后 PC 值为 2000H+2H = 2002H, 故 EA = (PC)+A = 2002H+06H = 2008H。【易错点】本题易误选 A 或 B。选项 A 没有考虑 PC 值的自动更新,选项 B 虽然考虑了 PC 值要自动更新,但没有注意到该转移指令是一条两字节指令,PC 值仅仅“+1”而不是“+2”。
哪些指令可能不改变程序下一条指令的地址?Ⅰ. 条件转移Ⅱ. 过程调用Ⅲ. 陷入指令Ⅳ. 返回
A. Ⅰ、Ⅱ B. Ⅰ、Ⅳ C. Ⅱ、Ⅲ D. Ⅱ、Ⅳ
[tag_link]
正确答案:B
**【解析】**条件转移指令(Ⅰ)根据条件决定是否跳转:当条件不满足时,程序继续顺序执行,下一条指令地址不变,因此可能不改变地址。返回指令(Ⅳ)通常改变地址,但理论上若返回地址恰好是当前指令地址,则可能不改变地址。过程调用指令(Ⅱ)和陷入指令(Ⅲ)总是跳转到目标地址,一定会改变下一条指令地址,不可能不改变。因此,可能不改变下一条指令地址的指令是Ⅰ和Ⅳ。
某计算机按字节编址,数据 Cache 共有 1024 行,采用 4 路组相联映射,主存块大小为 32 B,若访问主存地址为 1028 的 4 字节数据,则该数据所在主存块对应的组号为( )
A. 4 B. 16 C. 32 D. 64
[tag_link]
正确答案:C
**【解析】**Cache 共有 1024 行,采用 4 路组相联映射,因此组数为1024/4=256组。主存块大小为 32 B,块内偏移地址占 5 位(25=32)。访问主存地址为 1028(十进制),按字节编址。组号由块地址对组数取模得到:块地址为地址除以块大小的整数部分,即
1028/32=32(整数除法)组索引
=32mod256=32因此,该数据所在主存块对应的组号为 32。
某计算机的指令流水线由四个功能段组成,指令流经各功能段的时间(忽略各功能段之间的缓存时间) 分别为90 ns 、80 ns 、70 ns、和60ns, 则该计算机的CPU 时钟周期至少是()。
A.90ns
B.80ns
C.70ns
D.60ns
[tag_link]
正确答案:A
流水线的时钟周期应以最长的执行时间为准,否则用时长的流水段的功能将不能正确完成。
某计算机按字节编址,虚拟地址为 16 位,页大小为 256B,页表项中包含装入位(P)、页框号(PPN)等字段。TLB 采用 4 路组相联映射,共有 16 个页表项,TLB 表项中包含标记(Tag)、有效位(V)等字段。在主存页表与 TLB 表项同步后,若主存页表中页号 22 对应的页表项中P=0,PPN=2AH,则下列不可能出现在组号为 2 的 TLB 表项中的是( )
A. Tag-05H, V-1, PPN=1CH B. Tag=06H,V=1,PPN=2AH C. Tag=16H,V=0,PPN=2AH D. Tag-1AH,V=0,PPN-1CH
[tag_link]
正确答案:A
**【解析】**虚拟地址为 16 位,页大小为 256 B,因此页内偏移占 8 位,页号占 8 位。TLB 为 4 路组相联,共 16 个表项,故分为 4 组,组索引占 2 位,标记占 6 位。页号 22 的二进制为 00010110,高 6 位标记为 05H,低 2 位组索引为 10(即 2),因此页号 22 属于组 2。已知主存页表中页号 22 对应的表项 P=0、PPN=2AH,同步后 TLB 中若存在该页表项,则有效位 V 应与 P 一致(即 V=0),且 PPN 应为 2AH。选项 A 的标记为 05H,对应页号 22,但 V=1、PPN=1CH,与页表项冲突,不可能出现在组 2 的 TLB 中。其他选项对应不同页号(如 B 对应页号 26,C 对应页号 90,D 对应页号 106),其页表项未知,故可能出现在 TLB 中。
相对于微程序控制器,硬布线控制器的特点是()。
A. 指令执行速度慢,指令功能的修改和扩展容易
B. 指令执行速度慢,指令功能的修改和扩展难
C. 指令执行速度快,指令功能的修改和扩展容易
D. 指令执行速度快,指令功能的修改和扩展难
[tag_link]
正确答案:D
微程序控制器 采用了“存储程序”的原理,每条机器指令对应一个微程序,因此修改和扩充容易,灵活性好,但每条指令的执行都要访问控制存储器,所以速度慢。硬布线控制器 采用专门的逻辑电路实现,其速度主要取决于逻辑电路的延迟,因此速度快,但修改和扩展困难,灵活性差。
下列选项中,用于提高 RAID 可靠性的措施有( )。
I. 磁盘镜像
Ⅱ. 条带化
Ⅲ. 奇偶校验
Ⅳ. 增加 Cache 机制
A.仅 I、Ⅱ
B.仅 I、Ⅲ
C.仅 I、Ⅲ和Ⅳ
D.仅Ⅱ、Ⅲ和Ⅳ
[tag_link] 正确答案:B本题考察 RAID ,RAID0 方案是无几余和无校验的磁盘阵列,而 RAID1~5 方案均是加入了冗余(镜像)或校验的磁盘阵列。条带化技术就是一种自动地将 IO 的负载均衡到多个物理磁盘上的技术,条带化技术就是将一块连续的数据分成很多小部分并把它们分别存储到不同磁盘上去。这就能使多个进程同时访问数据的多个不同部分但不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/0 并行能力,从而获得非常好的性能。故能够提高 RAID 可靠性的措施主要是对磁盘进行镜像处理和奇偶校验,其余选项不符合条件。
假设某系统总线在一个总线周期中并行传输4字节信息, 一个总线周期占用2个时钟周期,总线时钟 频率为10M Hz, 则 总 线 带 宽 是 ( ) 。
A.10MB/S B.20MB/S
C.40 MB/S D.80 MB/S
[tag_link]
正确答案:B
总线带宽是指单位时间内总线上传输数据的位数,通常用每秒钟传送信息的字节数来衡量,单位 Bs。由题意可知,在 1 个总线周期(=2 个时钟周期)内传输了 4 字节信息,时钟周期=1/10MHz=0.1μs,故总线带宽为 4B/(2×0.1μs)=4B/(0.2×10⁻⁶s)=20MB/s。
假设某计算机的存储系统由Cache 和主存组成,某程序执行过程中访存1000次,其中访问Cache缺 失(未命中)50次,则Cache 的命中率是()。
A.5%
B.9.5%
C.50%
D.95%
[tag_link]
正确答案:D
命中率 = Cache 命中次数/总访问次数。需要注意的是看清题,题中说明的是缺失 50 次,而不是命中 50 次,仔细审题是做对题的第一步。
(本题满分 10 分)某 16 位计算机按字节编址,通用寄存器 R0~R15 的编号为 0~15,存储器地址为 16 位,采用定长指令字,指令格式有 R 型、I 型、M 型三种,如下表所示。

其中:
- OP1 为 0001、0010 分别表示加、左移指令;
- OP2 为 0100 表示加立即数指令;
- OP3 为 1110、1111 分别表示取数、存数指令;
- R[r] 表示寄存器 r 中的内容;
- mm 表示移位位数;
- M[addr] 表示存储器地址 addr 中的内容。请回答下列问题:
(1) 主存单元和通用寄存器的宽度各为多少位?(2 分)
(2) op1 和 op2 的编码是否可以相同?op2 和 op3 的编码是否可以相同?(2 分)
(3) 若 R(2)=ABCDH,R(9)=F001H,则指令 0000 0010 1001 0001 执行后,R2 和 R9 中的内容分别是多少?(2 分)
(4) 若变量x、y均为 16 位带符号整数,在存储器中依次从低地址向高地址连续存放,x的地址在 R15 中。实现y=16x−5的 4 条指令 11–14 如题 43 表所示,写出 ①~④ 处的内容。(4 分)题 43 表:
| 地址 | 内容 |
|---|---|
| 11 | 1 0000 0000 0000 |
| 12 | 0000 2 0010 |
| 13 | 0100 0000 3 |
| 14 | 1111 4 |
[tag_link]
【答案】
(1) 主存单元和通用寄存器的宽度
该计算机是 按字节编址→ 所以主存单元存储的是字节即 8 位
通用寄存器R0∼R15用于参与算术、移位、访存等运算,且指令中的运算(如加法、移位、取数/存数)都是以“字”为基本操作单位→ 寄存器必须能容纳一个完整的字。
结论:
- 主存单元宽度:8 位
- 通用寄存器宽度:16 位
(2) op1 和 op2 可以相同,因为两者在指令中占据不同位。op2 和 op3 不能相同,因为两者在指令中占据相同位,若相同会导致指令冲突。 (3) 0000 0010 1001 0001 属于 R 型指令,下表中给出了每个字段的具体含义:
| 字段 1 | 字段 2 | 字段 3 | 字段 4 |
|---|---|---|---|
| 0000 | 0010 | 1001 | 0001 |
| R 型指令前缀 | 目标寄存器为 R[2] | 源寄存器为 R[9] | op 字段为加 |
| 所以这个指令的实际含义为: |
R[2] ← R[2] + R[9]-R[2] = ABCDH + F001H = 9BCEH
所以 R2 中的内容变为 98CEH,R9 中的内容保持不变为 F001H。
(4) y = x * 16 需要通过四个步骤得到:
- 从
x的地址中获取x的值:通过取数指令 - 通过移位指令实现
x * 16的乘法操作 - 通过减法指令实现
- 5的操作 - 将
x * 16 - 5的值存储到y中:通过存数指令所以四条指令的二进制如下: R[0] ← M[R[15]]:1110 0000 0000 0000R[0] ← R[0] << 4:0000 0000 0100 0010R[0] ← R[0] + (-5):0100 0000 1111 1011M[R[15] + 2] ← R[0]:1111 0000 0000 0010所以 ① = 1110,② = 0000 0100,③ = 1111 1011,④ = 0000 0000 0010。
假定某计算机的 CPU 主频为 80MHz,CPI 为 4,平均每条指令访存 1.5 次,主存与 Cache 之间交换的块大小为 16B,Cache 的命中率为 99%,存储器总线宽度为 32 位。请回答下列问题。
(1) 该计算机的 MIPS 数是多少?平均每秒 Cache 缺失的次数是多少?在不考虑 DMA 传送的情况下,主存带宽至少达到多少才能满足 CPU 的访存要求?
(2) 假定在 Cache 缺失的情况下访问主存时,存在 0.0005% 的缺页率,则 CPU 平均每秒产生多少次缺页异常?若页面大小为 4KB,每次缺页都需要访问磁盘,访问磁盘时 DMA 传送采用周期挪用方式,磁盘 I/O 接口的数据缓冲寄存器为 32 位,则磁盘 I/O 接口平均每秒发出的 DMA 请求次数至少是多少?
(3) CPU 和 DMA 控制器同时要求使用存储器总线时,哪个优先级更高?为什么?
(4) 为了提高性能,主存采用四体低位交叉存储模式,工作时每 1/4 个存储周期启动一个体。若每个体的存储周期为 50ns,则该主存能提供的最大带宽是多少?
[tag_link]
本题综合涉及多个考点:计算机的性能指标、存储器的性能指标、DMA 的性能分析,DMA 方式的特点,多体交叉存储器的性能分析。
1)平均每秒 CPU 执行的指令数为:80M/4 = 20M,故 MIPS 数为 20;(1 分)平均每条指令访存 1.5 次,故平均每秒 Cache 缺失的次数 = 20M×1.5×(1-99%) = 300k;(1 分)当 Cache 缺失时,CPU 访问主存,主存与 Cache 之间以块为传送单位,此时,主存带宽为16B×300k/s = 4.8MB/s。在不考虑 DMA 传送的情况下,主存带宽至少达到 4.8MB/s 才能满足 CPU 的访存要求。(2 分)
2)题中假定在 Cache 缺失的情况下访问主存,平均每秒产生缺页中断 300000×0.0005% = 1.5 次。因为存储器总线宽度为 32 位,所以每传送 32 位数据,磁盘控制器发出一次 DMA 请求,故平均每秒磁盘 DMA 请求的次数至少为 1.5×4KB/4B = 1.5K = 1536。(2 分)
3)CPU 和 DMA 控制器同时要求使用存储器总线时,DMA 请求优先级更高;(1 分)因为 DMA 请求得不到及时响应,I/O 传输数据可能会丢失。(1 分)
4)四体交叉存储模式能提供的最大带宽为 4×4B/50ns=320MB/s。(2 分)
某 32 位计算机,CPU 主频为 800MHz,Cache 命中时的 CPI 为 4,Cache 块大小为 32 字节;主存采用 8 体交叉存储方式,每个体的存储字长为 32 位、存储周期是 40ns;存储器总线宽度为 32 位,总线时钟频率为 200MHz,支持突发传送总线事务。每次读突发传送总线事务的过程包括:送首地址和命令、存储器准备数据、传送数据。每次突发传送 32 字节,传送地址或者 32 位数据均需要一个总线时钟周期。请回答下列问题,要求给出理由或者计算过程。
(1) CPU 和总线的时钟周期各是多少?总线的带宽(即最大数据传输率)为多少?
(2) Cache 缺失时,需要用几个读突发传送总线事务来完成一个主存块的读取?
(3) 存储器总线完成一次读突发传送总线事务所需的时间是多少?
(4) 若程序 BP 执行过程中,共执行了 100 条指令,平均每条指令需要 1.2 次访存,Cache 缺失率是 5%,不考虑替换等开销,则 BP 的 CPU 执行时间是多少?
1)CPU 的时钟周期是主频的倒数,即 1/800MHz=1.25ns。总线的时钟周期是总线频率的倒数,即 1/200MHz=5ns。总线宽度为 32 位,故总线带宽为 4B×200MHz=800MB/s 或 4B/5ns=800MB/s。
2)Cache 块大小是 32B,因此 Cache 缺失时需要一个读突发传送总线事务读取一个主存块。
3)本题重点考查多体交叉存储器的 并行性。一次 读突发总线传输事务 包括一次地址传送和 32B 数据传送:用 1 个总线时钟周期传输地址;每隔 40ns/8=5ns 启动一个体工作(各进行 1 次存取),第一个体读数据花费 40ns,之后数据存取与数据传输重叠;用 8 个总线时钟周期传输数据。读突发传送总线事务时间:5ns+40s+8×5ns=85ns
4)BP 的 CPU 执行时间包括 Cache 命中时的指令执行时间和 Cache 缺失时带来的额外开销。命中时的指令执行时间:100×4×1.25ns=500ns。指令执行过程中 Cache 缺失时的额外开销:1.2×100×5%×85ns=510ns。BP 的 CPU 执行时间:500ns+510ns=1010ns。【评分说明】① 执行时间采用如下公式计算时,可酌情给分。执行时间=指令条数×CPI×时钟周期×命中率 + 访存次数×缺失率×缺失损失② 计算公式正确但运算结果不正确时,可酌情给分。
(15分)某CPU 中部分数据通路如图所示,其中,GPRs 为通用寄存器组;FR 为标志寄存器,用于 存放ALU产生的标志信息;带箭头虚线表示控制信号,如控制信号ReaD.Wr|te 分别表示主存读、主存 写 ,MDR|n 表示内部总线上数据写入MDR,MDRout 表示MDR的内容送内部总线。
(2)为什么要设置暂存器Y和Z?
(5)图中控制信号由什么部件产生?图中哪些寄存器的输出信号会连到该部件的输入端?
44 . (8分)假设某磁盘驱动器中有4个双面盘片,每个盘面有20000个磁道,每个磁道有500个扇区,每 个扇区可记录512字节的数据,盘片转速为7200rpm ( 转/分),平均寻道时间为5ms, 请回答下列问题。
(1)每个扇区包含数据及地址信息,地址信息分为3个字段,这3个字段的名称格式什么?对于该磁盘, 各字段至少占多少位?
(2)一个扇区的平均访问时间约为多少?
(3)若采用周期挪用DMA 方式进行磁盘与主机之间的数据传送,磁盘控制器中的数据缓冲区大小为64位, 则在一个扇区读写过程中,DMA 控制器向CPU 发送了多少次总线请求?若CPU 检测到DMA 控制器的 总线请求信号时也需要访问主存,则DMA 控制器是否可以获得总线使用权?为什么?
[tag_link]
[tag_link]
1)符号标志 SF 表示运算结果的正负性,因此 SF = F 15 对于加法运算 A + B → F ,若 A 、 B 为负,且 F 为正,则说明发生溢出:或者,若 A 、 B 为正, 且 F 为负,也说明发生溢出。因此,加运算时,溢出标志 OF = A 15 ⋅ B 15 ⋅ F 15 + A 15 ⋅ B 15 ⋅ F 15 。 对于减法运算 A − B → F ,若 A 为负、 B 为正,且 F 为正,则说明发生溢出:或者,若 A 为正、 B 为负,且 F 为负,也说明发生溢出。因此,减运算时,溢出标志 OF = A 15 ⋅ B 15 ⋅ F 15 + A 15 ⋅ B 15 ⋅ F 15 。 2)因为在单总线结构中,每一时刻总线上只有一个数据有效,而 ALU 有两个输入端和一个 输出端。因此,当 ALU 运算时,需要先用暂存器 Y 缓存其中一个输入端的数据,再通过 总线传送另一个输入端的数据。与此同时,ALU 的输出端产生运算结果,但由于总线正 被占用,因此需要暂存器 Z,以缓存 ALU 的输出端数据。 3)由图可知,rs 和 rd 都是 4bit,因此 GPRs 中最多有 2 4 = 16 个通用寄存器;rs 和 rd 来自指令寄 存器 IR;rd 表示寄存器编号,应连接地址译码器。 4)取指阶段需要根据程序计数器 PC 取出主存中的指令,并将指令写入指令寄存器 R 中。控制 信号序列如下: ①PCout,MARin // 将指令的地址写入 MAR ②Read // 读主存,并将读出的数据写入 MDR ③MDRout,Rin // 将 MDR 的内容写入指令寄存器 R 步骤①需要 1 个时钟周期,步骤②需要 5 个时钟周期,步骤③需要 1 个时钟周期,因此取指 令阶段至少需要 7 个时钟周期。 5)图中控制信号由控制部件(CU)产生。指令寄存器 IR 和标志寄存器 FR 的输出信号会连 到控制部件的输入端。 44 假设某磁盘驱动器中有 4 个双面盘片,每个盘面有 20000 个磁道,每个磁道有 500 个扇区,每个扇区可记录 512 字节的数据,盘片转速为 7200rpm(转/分),平均寻道时间为 5ms,请回答下列问题。
(1) 每个扇区包含数据及地址信息,地址信息分为 3 个字段,这 3 个字段的名称格式什么?对于该磁盘,各字段至少占多少位?
(2) 一个扇区的平均访问时间约为多少?
(3) 若采用周期挪用 DMA 方式进行磁盘与主机之间的数据传送,磁盘控制器中的数据缓冲区大小为 64 位,则在一个扇区读写过程中,DMA 控制器向 CPU 发送了多少次总线请求?若 CPU 检测到 DMA 控制器的总线请求信号时也需要访问主存,则 DMA 控制器是否可以获得总线使用权?为什么? CHS地址 DMA 查看答案与解析 收藏
已知计算机 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%。
(8分)某计算机的 CPU 主频为500MHz,CPI 为5(即执行每条指令平均需5个时钟周期)。假定 某外设的数据传输率为0.5MB/s, 采用中断方式与主机进行数据传送,以32位为传输单位,对应的中断 服务程序包含18条指令,中断服务的其他开销相当于2条指令的执行时间。请回答下列问题,要求给出 计算过程。
(1)在中断方式下,CPU 用于该外设I/O 的时间占整个CPU 时间的百分比是多少?
(2)当该外设的数据传输率达到5M B/s时,改用DMA方式传送数据。假定每次DMA传送块大小为5000B, 且DMA预处理和后处理的总开销为500个时钟周期,则CPU用于该外设I/O 的时间占整个CPU 时间的 百分比是多少?(假设DMA与 CPU 之间没有访存冲突)
[tag_link]
[tag_link]
1)按题意,外设每秒传送 0.5MB,中断时每次传送 4B。中断方式下,CPU 每次用于数据传送的时钟周期为 5×18+5×2 = 100。(2 分) 为达到外设 0.5MB/s 的数据传输率,外设每秒申请的中断次数为 0.5MB/4B = 125000。(1 分) 1s 内用于中断的开销为 100×125000 = 12500000 = 12.5M 个时钟周期。(1 分) CPU 用于外设 I/O 的时间占整个 CPU 时间的百分比为 12.5M/500M = 2.5%。(1 分)
2)当外设数据传输率提高到 5MB/s 时,改用 DMA 方式传送,每次 DMA 传送 5000B,1s 内需产生的 DMA 次数为 5MB/5000B=1000。(1 分) CPU 用于 DMA 处理的总开销为 1000×500 = 500000 = 0.5M 个时钟周期。(1 分) CPU 用于外设 I/O 的时间占整个 CPU 时间的百分比为 0.5M/500M = 0.1%。(1 分)
【评分说明】如果考生只给出正确的计算结果,未给出计算过程,每个给 2 分。
某计算机的主存地址空间大小为 256MB,按字节编址。指令 Cache 和数据 Cache 分离,均有 8 个 Cache 行,每个 Cache 行大小为 64B,数据 Cache 采用直接映射方式。现有两个功能相同的程序 A 和 B,其伪代码如下所示:
// 程序 A
int a[256][256];
.....
int sum_array1()
{
int i, j, sum=0;
for (i=0; i<256; i++)
for (j=0; j<256; j++)
sum += a[i][j];
return sum;
}
// 程序 B
int a[256][256];
.....
int sum_array2()
{
int i, j, sum=0;
for (j=0; j<256; j++)
for (i=0; i<256; i++)
sum += a[i][j];
return sum;
}
假定 int 类型数据用 32 位补码表示,程序编译时 i,j,sum 均分配在寄存器中,数组 a 按行优先方式存放,其首地址为 320(十进制数)。请回答下列问题,要求说明理由或给出计算过程。
(1) 若不考虑用于 cache 一致性维护和替换算法的控制位,则数据 Cache 的总容量为多少?
(2) 数组元素 a[0][31] 和 a[1][1] 各自所在的主存块对应的 Cache 行号分别是多少(Cache 行号从 0 开始)?
(3) 程序 A 和 B 的数据访问命中率各是多少?哪个程序的执行时间更短?
[tag_link]
1)每个 Cache 行对应一个标记项,如下所示:| 有效位 | 脏位 | 替换控制位 | 标记位 |不考虑用于 Cache 一致性维护和替换算法的控制位。地址总长度为 28 位(228=256 M),块内地址 6 位(26=64),Cache 块号 3 位(23=8),故 Tag 的位数为 28-6-3=19 位,还需使用一个有效位,故题中数据 Cache 行的结构如下图所示。
数据 Cache 共有 8 行,因此数据 Cache 的 总容量为8×(64+20/8)B= 532B。
2)数组 a 在主存的存放位置及其 与 Cache 之间的映射关系如下图所示。
数组按行优先方式存放,首地址为 320,数组元素占 4 字节。a[0][31] 所在的主存块对应的 Cache 行号为(320+31×4)/64=6;a[1][1] 所在的主存块对应的 Cache 行号为(320+256×4+1×4)/64%8=5。
3)数组 a 的大小为256×256×4B=218 B, 占用218/64=212个主存块,按行优先存放,程序A逐行访问数组,共需访问的次数为216次,未命中次数为212次(即每个字块的第一个数未命中),因此程序A的命中率为(216−212)/216×100%=93.75%。【另解】数组 a 按行存放,程序 A 按行存取。每个字块中存放 16 个 int 型数据,除访问的第一个不命中,随后的 15 个全都命中,访问全部字块都符合这一规律,且数组大小为字块大小的整数倍,故程序 A 的命中率为 15/16=93.75%。程序 B 逐列访问数组 a,Cache 总容量为 64Bx8=512B,数组 a 一行的大小为 1KB,正好是 Cache 容量的 2 倍,可知不同行的同一列数组元素使用的是同一个 Cache 单元,故逐列访问每个数据时,都会将之前的字块置换出,也即每次访问都不会命中,命中率为 0。由于从 Cache 读数据比从主存读数据快很多,所以程序 A 的执行比程序 B 快得多。注意:本题考查 Cache 容量计算,直接映射方式的地址计算,以及命中率计算(注意:行优先遍历与列优先遍历命中率差别很大)。
某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为 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 所在的页面在主存中。
假设对于题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 分)