24-25-2-计算机组成与系统结构-期末

一、选择题(每题1分,共15分。请从下列各选项中选择1个最适合的答案)

  1. 完整的计算机系统应包括 ( )
  1. 冯·诺依曼计算机工作方式的基本特点是 ( )
  1. 下列说法中不正确的是 ( )
答案 / 解析

一二级都是硬件级

  1. 计算机系统中采用补码运算的目的是为了 ( )
  1. 假设由 S,E,MS,\,E,\,M 三个字段组成的一个 32 位二进制字所表示的非零规格化浮点数 xx,其中 EE 占用 8 位,真值为 x=(1)s×(1.M)×2E128x=(-1)^s\times(1.M)\times2^{E-128}。则其所表示的规格化的最大正数为 ( )
  1. 在定点运算器中,无论采用双符号位还是单符号位,必须有 ( ),它一般采用异或门来实现。
  1. 存储周期是指 ( )
  1. 寄存器间接寻址方式中,操作数处在 ( ) 中。
  1. 程序控制类指令的功能是 ( )
  1. 微程序控制器中,机器指令与微指令的关系是 ( )
  1. 下列各项中,( ) 是同步传输的特点。
  1. 系统总线中地址线的作用是 ( )
  1. 在中断系统中,CPU 一旦响应中断,则立即使能 ( ) 标志,以防止本次中断响应过程被其他中断源产生的另一次中断所干扰。
  1. 下面关于并行处理技术的论述,正确的是 ( )
  1. 浮点数的下溢指的是 ( )

二、判断题(每题1分,共10分)

请使用T标记正确的表述,F标记错误的表述。

  1. 采用变形补码进行加减法运算可以避免溢出。
答案 / 解析

变形补码不能避免溢出,但它通过简单的检查双符号位是否相同,提供了一种非常高效的溢出检测机制。这比单符号位补码的溢出检测(需要比较操作数和结果的符号,或判断最高有效位的进位和符号位的进位是否相同)要简单得多

  1. 若主存由 ROM 和 RAM 组成,容量分别为 2n2^n2m2^m,则主存地址共需要 n+mn+m 位。

  2. Cache 与主存统一编址,Cache 的地址空间是主存地址空间的一部分。

  3. 每个程序的虚地址空间可以远大于实地址空间,也可以远小于实地址空间。

  4. 存储器堆栈是主存的一部分,因而也可以按照地址随机进行读写操作。

  5. 若采用微程序控制方式,则可用 μPC 取代 PC。

答案 / 解析

PC 和 μPC 是计算机体系结构中两个完全不同层次、功能各异的部件,它们不能相互取代

  1. 磁盘是外部存储器,和输入输出系统没有关系。

  2. 流水 CPU 是以空间并行性为原理设计的处理器。

答案 / 解析

流水CPU是通过时间并行性原理设计的处理器

  1. 变址寻址中,操作数的有效地址等于堆栈指示器内容加上形式地址。
答案 / 解析

EA=形式地址+(变址寄存器内容)

  1. 活动磁头磁盘存储器的寻道时间通常是指最大寻道时间与最小寻道时间之间的平均值。
答案 / 解析

平均寻道时间约等于磁头移动全部磁道数的三分之一(1/3)所需的时间

三、填空题(每空1分,共20分)

  1. 在无符号数阵列乘法器的基础上,通过在输入端增加 、在输出端增加 ,以及增加符号位处理电路,可以得到简接补码阵列乘法器。

  2. 计算机系统中实现虚实地址转换的核心部件称为

  3. 在集中式总线仲裁中, 方式响应时间最快、 方式对电路故障最敏感。

  4. 某 4K 显示器分辨率为 3840×25603840\times2560 像素,像素的颜色深度是 24 位,帧频 144Hz144\,\mathrm{Hz},则刷新存储器的容量最小约为 MB\mathrm{MB},刷新存储器带宽约为 Gbps\mathrm{Gbps}

答案 / 解析

容量 = 水平像素 × 垂直像素 × 颜色深度

带宽 = 每帧图像数据量 × 帧频

  1. 在同一个 CPU 周期中,可以并行执行的微操作称为 ,不可以并行执行的微操作称为

  2. 浮点数的加减法运算器一般需要实现 四部分流程。

  3. 除法器在每次减法运算完成后可以恢复余数,也可以不恢复余数而采用 法。阵列除法器可以基于可控加法减法单元进行实现。假设其单个单元的进位延迟是 ΔT\Delta T,那么对于一个 2n2n 位除以 nn 位的阵列除法器来说,其除法执行时间是 ΔT\Delta T

  4. 中断服务程序入口地址的获取,有 两种方式。

  5. 在指令流水线中,后续指令无法按照设计的时钟周期执行的现象称为相关,大致可以分为 相关、 相关、 相关三类。

四、简答题(每题3分,共9分)

1.

请简述直接内存访问(DMA)方式的特点。

答案 / 解析

基本思想是:通过硬件控制实现主存与I/O设备间的直接数据传送,在传送过程中无需CPU的干预。数据传送是在DMA控制器控制下进行的。

DMA是一种完全由硬件执行I/O交换的工作方式。在这种方式中,DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和I/O设备之间进行。

优点:速度快。有利于发挥CPU的效率。在数据传送过程中,没有保存现场、恢复现场之类的工作。

DMA方式的主要特点:

数据传输直接

数据在I/O设备和主存之间直接传送,不经过CPU的寄存器。这大大加快了传输速度,因为数据路径更短,且不受CPU执行速度的限制。

CPU占用率极低,并行性高

在整个数据块的传输过程中,CPU几乎不参与。CPU只需在传输开始前设置好DMA控制器(DMAC),并在传输结束后响应一个中断信号即可。在DMA进行数据传输的同时,CPU可以继续执行其他程序,实现了I/O操作与CPU计算的并行工作。

适用于高速、批量数据传输

DMA方式的开销主要在于启动和结束时的CPU指令,对于单字节传输来说并不划算。但对于硬盘、固态硬盘、高速网卡、显卡等需要一次性传输大量数据(数据块)的高速设备,DMA的效率远超程序I/O和中断方式。

需要专门的硬件支持

该方式的实现依赖于DMA控制器(DMAC)。DMAC是一个专门的硬件模块,它能临时接管系统总线的控制权,管理数据传输的源地址、目标地址、传输字节数等信息,并处理实际的数据传送过程。

以“块”为单位进行传输

DMA是面向数据块的。CPU向DMAC下达的指令是传输一个数据块,而DMAC也只在整个数据块传输完成后,才通过一次中断通知CPU任务完成。这与中断方式下每个字节(或字)都可能产生一次中断形成了鲜明对比,极大地减少了中断开销。

2.

请简述 Cache 的三种映射机制与特点。

答案 / 解析

将主存块和Cache行按照以下三种方式进行映射

全相联(Full Associate):每个主存块映射到Cache的任意行中

直接(Direct):每个主存块映射到Cache的固定行中

组相联(Set Associate):每个主存块映射到Cache的固定组中的任意一行中

3.

请简述总线仲裁中,链式查询方式的特点。

答案 / 解析

链式查询方式:离中央仲裁器最近的设备具有最高优先权,离总线控制器越远,优先权越低。

优点:只用很少几根线就能按一定优先次序实现总线控制,并且这种链式结构很容易扩充设备。

缺点:是对询问链的电路故障很敏感,优先级固定。

五、计算题(每题6分,共12分)

1.

已知 x=2011×0.100101x=2^{-011}\times0.100101, y=2010×(0.011110)y=2^{-010}\times(-0.011110)。请给出 IEEE754 单精度格式的定义,并用十六进制表示这两个数据的单精度浮点数机器码。

答案 / 解析

IEEE 754 单精度格式定义

IEEE 754 单精度浮点数是一种标准的32位浮点数表示法。其32位二进制数被分为三个部分:

  • 符号位 (Sign, S): 1位。 第31位。0 代表正数,1 代表负数。
  • 阶码 (Exponent, E): 8位。 第30位至第23位。采用移码表示,偏置量(bias)为 127。阶码的实际值等于 E127E - 127
  • 尾数 (Mantissa/Fraction, M): 23位。 第22位至第0位。对于规格化数,其形式为 1.M,其中 1 是隐藏位(不存储),只存储小数点后的 M 部分。

一个规格化的单精度浮点数的真值 V 可以表示为:

V=(1)S×(1.M)×2E127V = (-1)^S \times (1.M) \times 2^{E-127}

数据 x 的转换

1. 符号位 (S)

x 是一个正数,所以 S = 0

2. 规格化和计算阶码 (E)

首先,将尾数 0.100101 规格化为 1.M 的形式。

0.100101=1.001010×210.100101 = 1.001010 \times 2^{-1}

现在,将这个结果代回原式。已知二进制 -011 等于十进制的 -3

x=23×(1.001010×21)x = 2^{-3} \times (1.001010 \times 2^{-1})

x=1.00101×2(3)+(1)=1.001010×24x = 1.00101 \times 2^{(-3) + (-1)} = 1.001010 \times 2^{-4}

此时,我们得到实际的阶值为 -4

根据公式 实际阶值 = E - 127,我们可以计算出阶码 E

E=4+127=123E = -4 + 127 = 123

将十进制的 123 转换为8位二进制:

12310=(01111011)2123_{10} = (01111011)_2

所以,E = 01111011

3. 确定尾数 (M)

从规格化形式 1.00101 中,我们取小数点后的部分作为尾数 MM 需要补足23位。

M = 00101000000000000000000

4. 组合并转换为十六进制

将 S, E, M 拼接在一起:

S | E        | M
0 | 01111011 | 00101000000000000000000

按4位分组:

0011 1101 1001 0100 0000 0000 0000 0000

转换为十六进制:

3    D    9    4    0    0    0    0

因此,x 的单精度浮点数机器码为 3D940000H

数据 y 的转换

1. 符号位 (S)

y 是一个负数,所以 S = 1

2. 规格化和计算阶码 (E)

我们对 y 的绝对值进行规格化。

0.011110=0.011110=1.111000×22|-0.011110| = 0.011110 = 1.111000 \times 2^{-2}

现在,将这个结果代回原式。已知二进制 -010 等于十进制的 -2

y=22×(1.111000×22)|y| = 2^{-2} \times (1.111000 \times 2^{-2})

y=1.11100×2(2)+(2)=1.111000×24|y| = 1.11100 \times 2^{(-2) + (-2)} = 1.111000 \times 2^{-4}

实际的阶值为 -4

计算阶码 E

E=4+127=123E = -4 + 127 = 123

E=(01111011)2E = (01111011)_2

所以,E = 01111011

3. 确定尾数 (M)

从规格化形式 1.111000 中,取小数点后的部分作为尾数 M,并补足23位。

M = 11100000000000000000000

4. 组合并转换为十六进制

将 S, E, M 拼接在一起:

S | E        | M
1 | 01111011 | 11100000000000000000000

按4位分组:

1011 1101 1111 0000 0000 0000 0000 0000

转换为十六进制:

B    D    F    0    0    0    0    0

因此,y 的单精度浮点数机器码为 BDF00000H

2.

某计算机系统的内存储器由 Cache 的主存构成。Cache 的存取周期为 45ns45\,\mathrm{ns},主存的存取周期为 200ns200\,\mathrm{ns}。已知在一段给定的时间内,CPU 共访问 4500 次,其中 340 次访问主存。求:

  1. Cache 的命中率;
  2. CPU 访问的平均时间;
  3. Cache-主存系统的效率。(保留3位有效数字)
答案 / 解析

1. Cache 的命中率

首先计算访问 Cache 的次数。

  • CPU 总访问次数 (NtotalN_{total}) = 4500 次
  • 访问主存次数 (NmissN_{miss}) = 340 次
  • 访问 Cache 的次数 (NhitN_{hit}) = 总访问次数 - 访问主存次数

计算过程如下:

Nhit=4500340=4160N_{hit} = 4500 - 340 = 4160

接下来计算 Cache 的命中率(H),即访问 Cache 的次数占总访问次数的比例。

数学公式:

H=NhitNtotalH = \frac{N_{hit}}{N_{total}}

计算:

H=416045000.924H = \frac{4160}{4500} \approx 0.924

所以,Cache 的命中率为 0.924

2. CPU 访问的平均时间

CPU 访问的平均时间(TaT_a)由 Cache 的命中率、Cache 的存取周期和主存的存取周期共同决定。

数学公式:

Ta=H×Tc+(1H)×TmT_a = H \times T_c + (1 - H) \times T_m

其中:

  • HH = 0.924 (Cache 命中率)
  • TcT_c = 45 ns (Cache 存取周期)
  • TmT_m = 200 ns (主存存取周期)

计算:

Ta=0.924×45ns+(10.924)×200nsT_a = 0.924 \times 45ns + (1 - 0.924) \times 200ns

Ta=41.58ns+0.076×200nsT_a = 41.58ns + 0.076 \times 200ns

Ta=41.58ns+15.2nsT_a = 41.58ns + 15.2ns

Ta56.8nsT_a \approx 56.8 ns

更精确的计算:

Ta=(41604500)×45ns+(3404500)×200ns56.711nsT_a = (\frac{4160}{4500}) \times 45ns + (\frac{340}{4500}) \times 200ns \approx 56.711 ns

所以,CPU 访问的平均时间约为 56.711 ns

3. Cache-主存系统的效率

Cache主存系统的效率(E)是指有 Cache 时的平均访问时间与无 Cache(即直接访问主存)时访问时间的比值的倒数,也就是 Cache 的存取周期与平均访问时间的比值。

数学公式:

E=TcTaE = \frac{T_c}{T_a}

计算:

E=45ns56.711ns0.793E = \frac{45ns}{56.711ns} \approx 0.793

所以,Cache主存系统的效率约为 0.793

六、(9分)

某指令系统的指令字长 16 位,每个地址码占 6 位。若二地址指令有 15 条,一地址指令有 48 条,则剩下的零地址指令最多有多少条?

答案 / 解析

剩下的零地址指令最多有 1024 条

七、(10分)

某计算机主存地址空间大小 8MB8\,\mathrm{MB},分成 32768 个主存块,按字节编址。Cache 数据区大小为 8KB8\,\mathrm{KB},采用直接映射方式。

  1. Cache 共有多少行?主存地址如何划分?要求说明每个字段的含义、位数和在主存地址中的位置。
答案 / 解析

(1) 基础计算

主存地址总位数:

主存大小为 8MB,按字节编址。

8MB=8×220B=23×220B=223B8\text{MB} = 8 \times 2^{20}\text{B} = 2^3 \times 2^{20}\text{B} = 2^{23}\text{B}

因此,主存地址需要 23 位。

主存块大小:

主存空间被分成 32768 个块。

32768=21532768 = 2^{15}

主存块大小 = 主存总大小 / 主存块数量 = (223B)/(215)=28B/块=256 B/块(2^{23}\text{B}) / (2^{15} \text{块}) = 2^8 \text{B/块} = \text{256 B/块}

Cache 行大小:

在直接映射中,Cache 的行大小等于主存块的大小。

因此,Cache 行大小 = 256 字节

(2) Cache 总行数

Cache 总行数 = Cache 数据区大小 / Cache 行大小

Cache 数据区大小 = 8KB = 8×210B=23×210B=213B8 \times 2^{10}\text{B} = 2^3 \times 2^{10}\text{B} = 2^{13}\text{B}

Cache 行大小 = 256 B = 28B2^8\text{B}

总行数 = (213B)/(28B/行)=25=32 行(2^{13}\text{B}) / (2^8\text{B/行}) = 2^5 \text{行} = \text{32 行}

所以,Cache 共有 32 行

(3) 主存地址划分

由于采用直接映射,23位的主存地址被划分为三个字段:标记 (Tag)行号 (Index)块内地址 (Word Offset)

块内地址 (Word Offset):

含义: 用于指明所需数据在主存块(或 Cache 行)内的具体字节位置。

位数: 块大小为 256 字节 (28B2^8\text{B}),因此需要 8 位来寻址块内的每一个字节。即 log2(256)=8\log_2(256) = 8 位。

位置: 地址的最低位,即第 0-7 位。

行号 (Index):

含义: 用于确定主存块应该映射到 Cache 的哪一行。

位数: Cache 共有 32 行 (252^5\text{行}),因此需要 5 位来选择其中一行。即 log2(32)=5\log_2(32) = 5 位。

位置: 位于块内地址之上,即第 8-12 位。

标记 (Tag):

含义: 用于区分映射到同一 Cache 行的不同主存块。当一个主存块被调入 Cache 时,其地址的高位部分作为标记存储在对应 Cache 行的标记字段中。

位数: 主存地址总位数减去其他字段的位数。即 2358=1023 - 5 - 8 = 10 位。

位置: 地址的最高位,即第 13-22 位。

地址结构图示:

字段标记 (Tag)行号 (Index)块内地址 (Word Offset)
位数10 位5 位8 位
位置22 … 1312 … 87 … 0
  1. 若直写 (write through) 方式,cache 的标记部分包含哪些字段?各个字段的位数是多少?
答案 / 解析

在 Cache 的每一行中,除了存储从主存加载的 256 字节数据外,还需要额外的存储空间来存放标记信息。对于采用 直写 (Write-Through) 方式的 Cache,标记部分至少包含以下字段:

有效位 (Valid Bit):

含义: 用来标识当前 Cache 行中的数据是否有效。当系统启动或 Cache 行被替换后,有效位为 0(无效);当数据从主存加载到该行后,有效位置为 1(有效)。

位数: 1 位

标记字段 (Tag Field):

含义: 存储了来自主存地址的标记部分,用于在 CPU 访问时与地址中的标记进行比较,以判断是否命中。

位数: 根据上面的计算,该字段为 10 位

关于“脏位 (Dirty Bit)”的说明:

直写 (Write-Through) 方式下,每次对 Cache 进行写操作时,数据会同时写入主存,从而始终保持 Cache 与主存的数据一致性。因此,Cache 中的数据块永远不会比主存“脏”(更新),不需要在替换时将数据写回主存。所以,采用直写方式的 Cache 不需要脏位

综上所述,Cache 标记部分(也称为 Cache 行的开销部分)包含 有效位标记字段,总位数为:

1位 (有效位) + 10位 (标记) = 11位

八、(15分)

第8题图

第8题图

某 32 位中央处理器的数据通路如图所示。某中包含一个累加寄存器 AC、一个状态寄存器和其他 4 个寄存器,各部分之间的连线表示数据通路。箭头表示信息传送方向。

  1. 请说明图中 a, b, c, d 这 4 个寄存器的中文名称、英文缩写并简述其功能。
  2. 设计存地址空间大小为 512MB512\,\mathrm{MB},按字节编址,指令字长 16 位。a, b, c, d 这 4 个寄存器的位数至少分别为多少?
  3. 简述指令从主存取到控制器的数据通路;
  4. 简述 Load 和 Store 指令中数据在累加器和主存之间进行传送的数据通路。
答案 / 解析
  1. 寄存器 a, b, c, d 的名称与功能

寄存器 a:

中文名称: 数据寄存器

英文缩写: MDR (Memory Data Register)

功能: 该寄存器是CPU与主存储器 M 之间信息交换的中转站。DR暂时存放ALU的运算结果、由数据存储器读出的一个数据字或者来自外部接口的一个数据字

寄存器 b:

中文名称: 指令寄存器

英文缩写: IR (Instruction Register)

功能: 当执行一条指令时,先把它从指令Cache读出,然后再传送到IR。IR 用于存放当前正在执行的指令,指令的操作码部分送往“微操作信号发生器”(即控制单元)进行译码,地址码部分则可能送往 MAR 用于寻址操作数。

寄存器 c:

中文名称: 地址寄存器

英文缩写: MAR (Memory Address Register)

功能: 该寄存器直接与主存储器 M 的地址线相连,用于存放将要被访问的主存单元的地址。

寄存器 d:

中文名称: 程序计数器

英文缩写: PC (Program Counter)

功能: 程序执行前,必须将它的起始地址,即程序的第一条指令所在的存储单元地址送入PC。当执行指令时,CPU将自动修改PC的内容,使得PC总是保存将要执行的下一条指令的地址。

  1. 各寄存器位数计算

寄存器 c (MAR) 和寄存器 d (PC) 的位数:

这两个寄存器都用于存放内存地址,因此它们的位数取决于地址空间的大小。

地址空间大小为 512 MB,按字节编址。

512MB=512×220B=29×220B=229B;512 \text{MB} = 512 \times 2^{20} \text{B} = 2^9 \times 2^{20} \text{B} = 2^{29} \text{B};

因此,地址总线的宽度为 29 位。

MAR (c) 和 PC (d) 的位数均为 29 位。

寄存器 b (IR) 的位数:

指令寄存器用于存放一条指令,其位数等于指令字长。

题目给定指令字长为 16 位。

IR (b) 的位数是 16 位。

寄存器 a (MDR) 的位数:

题目描述这是一个 “32 位中央处理器”,这通常指其数据总线宽度和ALU处理数据的能力。MDR 的位数等于数据总线的宽度。

MDR (a) 的位数是 32 位。

  1. 指令的取指数据通路

取指令(取指周期)的过程是将指令从主存取出并送到指令寄存器的过程。

将程序计数器 (PC) 的内容送到地址寄存器 (MAR)。

数据通路: d (PC) → c (MAR)

控制单元向主存 M 发出读信号,主存根据 MAR 中的地址定位到指令,并将指令读出到数据总线上。主存通过数据总线将指令传送到数据寄存器 (MDR)。

数据通路: M → a (MDR)

将 MDR 中的指令传送到指令寄存器 (IR) 中,准备译码。

数据通路: a (MDR) → d (IR)

之后,PC 的内容加 1,指向下一条指令。

数据通路: b (IR) → +1 单元 → b (PC)

  1. Load 和 Store 指令的数据通路

Load 指令 (从主存加载数据到累加器 AC)

指令寄存器 (IR) 中的地址码部分送到地址寄存器 (MAR)。

数据通路: b (IR) → c (MAR)

控制单元向主存 M 发出读信号。

主存 M 根据 MAR 中的地址,将数据读出到数据寄存器 (MDR)。

数据通路: M → a (MDR)

将 MDR 中的数据通过 ALU 送到累加器 AC。

数据通路: a (MDR) → ALU → AC

Store 指令 (将累加器 AC 的数据存储到主存)

指令寄存器 (IR) 中的地址码部分送到地址寄存器 (MAR)。

数据通路: b (IR) → c (MAR)

将累加器 AC 的内容送到数据寄存器 (MDR)。

数据通路: AC → a (MDR)

控制单元向主存 M 发出写信号,主存根据 MAR 的地址和 MDR 的数据执行写操作。

数据通路: a (MDR) → M