第29题

第 3 版 · OCR 辅助 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照

## 第29题

无效操作码是由CPU在对某条指令译码的时候发现的,因而是内部异常,而不是外部中断。定时采样中的定时时间到、打印机缺纸、键盘缓冲慢都是与任何指令的执行无关的、由CPU外部的中断源发出的外部中断请求事件。答案为选项B。

## 第30题

外部中断请求事件通常是由于外部设备完成 I/O 任务或遇到像打印机缺纸之类的异常情况需要 CPU 进行处理时向 CPU 发出的一种请求信号,CPU 在每条指令执行结束时会检测这个请求信号。显然,一条指令执行结束、一次总线传输结束和一次中断处理结束都不可能引起外部请求事件,而 DMA 操作结束时需要 CPU 进行数据校验等处理,因而会引起外部中断请求事件。答案是选项 D。

## 第31题

CPU在每条指令执行结束时会检测中断请求信号,若该信号有效,则CPU进入中断响应周期。因而答案为选项A。

## 第32题

CPU在每条指令执行结束时检测中断请求信号,若检测到中断请求信号有效,则进入中断响应周期;若检测到中断请求信号无效,则不会进入中断响应周期。因此,选项A的说法是错误的。答案为选项A。

在中断响应周期中,CPU会发出“中断回答”信号,该信号启动中断控制器进行中断查询,中断控制器根据判优电路和编码器,将当前未被屏蔽的中断源中具有最高优先权的中断源的类型号送给CPU,CPU根据中断源的类型号得到相应中断服务程序的首地址,从而转中断服务程序执行。在中断响应过程中,CPU将关中断,并保存断点和程序状态,这里,断点是指被中断的程序在中断返回后继续执行时开始执行的指令处,显然,这里断点应该是进行中断请求信号检测时刚刚执行完的指令后面一条指令的地址。综上所述,选项B、C、D的说法都是正确的。

## 第33题

单级中断系统不允许在中断服务程序执行过程中响应新的中断请求,因此,在整个中断服务程序执行过程中,CPU应该一直处于关中断状态。在进入中断服务程序执行之前,CPU在中断响应过程中已经保存断点和关中断,所以进入中断服务程序后,无需再保存断点和关中断,最后在中断返回之前再开中断。因此,单级中断系统的中断服务程序中的处理顺序是:保护现场→中断事件处理→恢复现场→开中断→中断返回。答案是选项A。

## 第35题

保护断点的工作只能在中断响应期间由硬件(CPU)完成,否则,一旦进入中断服务程序执行,则断点(PC的值)就会因为执行指令而改变,导致断点被破坏。现场信息是指通用寄存器的内容,通用寄存器组包含有几个或几十个寄存器,保存这些寄存器的内容涉及多次访问存储器,不适合在中断响应过程中完成,否则会大大延长中断响应过程。通常的做法是,在中断服务程序中用压栈指令来保护现场,同样,设置中断屏蔽字的工作也是在中断服务程序中用指令实现,用输出指令(如IA-32中的OUT指令)直接将屏蔽字输出到中断屏


<!-- page: 266 -->

蔽寄存器,从 I/O 接口中的数据缓冲寄存器取数或向其中写入数据,也是在中断服务程序中用输入或输出指令实现的。

综上所述,答案为选项 A。

## 第 36 题

首先,不存在中断查询优先级和中断返回优先级的概念。

中断查询过程是在 CPU 检测到中断请求信号(INTR)后向中断控制器发出“中断回答”信息所启动的。一旦启动中断查询,则中断控制器中的判优电路就会把所有未被屏蔽的中断请求源进行并行判优,选择优先级最高的中断源类型号送给 CPU 予以响应,这里的优先级指中断响应优先级,即表示被 CPU 优先响应的顺序。

中断返回是指中断服务程序执行结束后返回到被中断程序执行的过程,这个过程是通过执行中断服务程序的最后一条指令(如 IA-32 中的 IRET 指令)实现的。

中断处理优先级反映的是正在处理的中断是否比新发生的中断的处理优先级低(即屏蔽位为“0”,对新中断开放),如果是,就中止正在处理的中断,转到新中断服务程序去执行,处理完后回到原被中止的中断服务程序继续执行。中断处理优先级可以由中断屏蔽字来动态改变。

综上所述,答案为选项 C。

## 第 38 题

选项 A 的说法显然是正确的,中断请求就是要求 CPU 执行程序来处理发生的相关事件。

选项 B 的说法也是正确的,如果可以在一条指令执行的中途响应中断请求,那么中断返回后该从一条指令执行的中途开始继续执行,这显然是无法做到的。

选项 C 的说法也是正确的,CPU 响应中断后会调出中断服务程序,在中断服务程序执行过程中,CPU 会执行相应的输入输出指令,实现 CPU 中的通用寄存器和外设接口(设备控制器)中的 I/O 端口之间的直接数据交换。

选项 D 的说法是错误的,在以下两种情况下不正确:① 关中断(禁止中断)时,虽然有中断请求发生并在一条指令执行结束,CPU 因为不允许响应中断而不会进入中断响应周期;② 当有中断请求的请求源被屏蔽(由中断控制器的中断屏蔽字寄存器的相应屏蔽位进行屏蔽)时,因为对应的中断请求源被屏蔽掉了,因此,中断控制器无法向 CPU 发出中断请求信号。

## 第 44 题

叙述①显然是正确的。DMA 控制器向 CPU 提出 DMA 请求,是希望 CPU 让出总线控制权,由 DMA 控制器控制总线,完成外设和主存之间的数据传送。

叙述②显然是错误的。DMA 方式适合用于进行块传送的高速设备。

叙述③是错误的。DMA 方式下,在 DMA 控制器进行具体的数据传送之前,需要 CPU 执行初始化程序,来对 DMA 控制器进行初始化处理,包括设置传送数据个数、内存起始地址等参数。

叙述④是正确的。DMA 方式下,当 DMA 控制器完成具体的数据传送之后,会向 CPU 发送“DMA 结束”中断请求,CPU 执行相应的中断服务程序,进行数据校验等后处理工作。

答案是选项 B。


<!-- page: 267 -->

## 第46题

选项 D 的说法是不正确的。中断服务程序需要完成 CPU 与 I/O 接口之间的数据交换,因而要能够通过发送控制命令字来启动外设,即能够直接控制 I/O 硬件。因此,驱动程序和中断服务程序属于和设备相关的 I/O 软件部分。答案为选项 D。

## 8.6 分析应用题

1. 假设一个 32 位的处理器连接了一个 32 位宽的处理器总线,总线的时钟频率为 $400\mathrm{MHz}$,支持多种总线事务类型。其中,最短的总线事务类型是存储器读事务,需要 4 个时钟周期完成,第 1 个时钟周期送地址和读命令,第 4 个时钟周期取数据;最长的总线事务类型是突发传送 8 次数据,需要 11 个时钟周期完成,第 1 个时钟周期送地址和读命令,第 4 个时钟周期开始连续传送 8 个数据,每个时钟周期传送一次。请回答下列问题:

(1)该总线是同步总线还是异步总线,为什么?
(2)该总线的最大数据传输率为多少?
(3)若处理器一直持续发起最短总线事务类型,则此时总线的数据传输率是多少?
(4)若处理器一直持续发起最长总线事务类型,则此时总线的数据传输率是多少?
(5)若将总线宽度扩展为 64 位,则该总线的最大数据传输率提高到多少?
(6)若将总线时钟频率提高到 $800\mathrm{MHz}$,则该总线的最大数据传输率提高到多少?
(7)加倍总线宽度和加倍总线时钟频率相比,哪种更好?

## 【分析解答】

(1)该总线是同步总线,因为所有总线操作都在总线时钟的控制下进行。
(2)总线最大数据传输率就是总线带宽,表示在总线上传输数据时单位时间内传输的最大数据量,它由总线宽度 $W$、总线时钟频率 $F$ 和一个时钟周期内传输的数据个数 $M$ 确定。其值等于 $W \times F \times M$。因此,该总线的最大数据传输率为 $32b \times (400M/s) \times 1 = 12.8Gb/s = 1.6GB/s$。
(3)进行最短总线事务类型时,总线数据传输率为 $4\mathrm{B} \times (400\mathrm{M/s}) / 4 = 400\mathrm{MB/s}$。
(4)进行最长总线事务类型时,总线数据传输率为 $4\mathrm{B} \times 8 \times (400\mathrm{M/s}) / 11 = 518\mathrm{MB/s}$。
(5)若总线宽度扩展一倍,则总线最大数据传输率提高一倍,为 3.2GB/s。
(6)若总线时钟频率提高一倍,则总线最大数据传输率提高一倍,为 3.2GB/s。
(7)加倍总线宽度和加倍总线时钟频率的措施对于总线速度来说,效果是一样的。

2. 存储器总线采用同步通信方式,假定时钟频率为 $50\mathrm{MHz}$ 时钟,每个总线事务以突发方式传输 8 个字,以支持块长为 8 个字的 Cache 行读和 Cache 行写,每字 4B。对于读操作,访问顺序是 1 个时钟周期接收地址,3 个时钟周期等待存储器读数,8 个时钟周期用于传输 8 个字。对于写操作,访问顺序是 1 个时钟周期接收地址,2 个时钟周期延迟,8 个时钟周期用于传输 8 个字,3 个时钟周期恢复和写入纠错码。

(1)该存储器总线的带宽是多少?
(2)当全部访问为连续的读操作时,该存储器总线的数据传输率是多少?
(3)当全部访问为连续的写操作时,该存储器总线的数据传输率是多少?


<!-- page: 268 -->

# 【分析解答】

(1) 因为读操作和写操作时,在该存储器总线中都是 8 个时钟传输 8 个字,即每个时钟传输 1 个字,所以该存储器总线的带宽为 $1 \times 4\mathrm{B} / (1 \times 1 / 50\mathrm{M} / \mathrm{s}) = 200\mathrm{MB} / \mathrm{s}$。

(2) 读取 8 个字用了 $1 + 3 + 8 = 12$ 个时钟周期,故数据传输率为 $8 \times 4\mathrm{B} / (12 \times 1 / 50\mathrm{M} / \mathrm{s}) = 133.3\mathrm{MB} / \mathrm{s}$。

(3) 写入 8 个字用了 $1 + 2 + 8 + 3 = 14$ 个时钟周期,故数据传输率为 $8 \times 4\mathrm{B} / (14 \times 1 / 50\mathrm{M} / \mathrm{s}) = 114.3\mathrm{MB} / \mathrm{s}$。

3. 在一个字长为 32 位的计算机系统中,假定存储器分别连接以下两种不同的同步总线。

总线 1 是 64 位数据和地址复用的总线。能在一个时钟周期中传输一个 64 位的数据或地址,支持最多连续 8 个字的存储器读和存储器写总线事务。任何一次读写操作总是先用 1 个时钟周期传送地址,然后有 2 个时钟周期的延迟等待,从第 4 时钟周期开始,存储器准备好数据,总线以每个时钟周期 2 个字的速度传送,最多传送 8 个字。

总线 2 是分离的 32 位地址和 32 位数据的总线,支持最多连续 8 个字的存储器读和存储器写总线事务。读操作过程是:1 个时钟周期传送地址,2 个时钟周期延迟等待,从第 4 时钟周期开始,存储器准备好数据,总线以每时钟一个字的速度传输最多 8 个字。对于写操作,在第一个时钟周期内第一个数据字与地址一起传输,经过 2 个时钟周期的延迟等待后,第一个字写入存储器,并在后面 7 个时钟周期中,以每个时钟一个字的速度最多传输 7 个余下的数据字。

假定这两种总线的时钟频率都为 $100\mathrm{MHz}$,请回答下列问题:

(1) 两种总线的最大数据传输率(总线带宽)分别为多少?

(2) 连续进行单个字的存储器读总线事务时,两种总线的数据传输率分别是多少?

(3) 连续进行单个字的存储器写总线事务时,两种总线的数据传输率分别是多少?

(4) 每次传输 8 个字的数据块,$60\%$ 是读操作总线事务,$40\%$ 是写操作总线事务,两种总线的数据传输率分别是多少?

(5) 通过对以上各种数据的分析对比,给出相应的结论。

# 【分析解答】

(1) 总线 1 在传送数据时以每个时钟周期 2 个字的速度进行,所以它的最大数据传输率为 $32\mathrm{b} \times 2 \times 100\mathrm{M/s} = 6400\mathrm{Mb/s} = 800\mathrm{MB/s}$。

总线 2 在传送数据时以每个时钟周期 1 个字的速度进行,所以它的最大数据传输率为 $32\mathrm{b} \times 100\mathrm{M/s} = 3200\mathrm{Mb/s} = 400\mathrm{MB/s}$。

(2) 总线 1 虽然每个时钟周期可传 2 个字,但在单字传输总线事务中每次只需要传送 1 个字,每个总线事务占 $1 + 2 + 1 = 4$ 个时钟周期,因此,连续进行单个字的存储器读总线事务时,总线 1 的数据传输率为 $4\mathrm{B} \times (100\mathrm{M/s}) / 4 = 100\mathrm{MB/s}$。

总线 2 每个时钟周期读一个字,一个单字存储器读总线事务占 $1 + 2 + 1 = 4$ 个时钟周期,因此,连续进行单个字的存储器读总线事务时,总线 2 的数据传输率也为 $100\mathrm{MB/s}$。

(3) 总线 1 的单字存储器写总线事务和单字存储器读总线事务的情况一样,因此,连续进行单个字的存储器写总线事务时,数据传输率也是 $100\mathrm{MB/s}$。

总线 2 的单字存储器写总线事务占 $1 + 2 = 3$ 个时钟周期,因此连续进行单个字的存储


<!-- page: 269 -->

器写总线事务时,其数据传输率为 $4\mathrm{B} \times (100\mathrm{M / s}) / 3 = 133.3\mathrm{MB / s}$。

(4)通过总线1进行存储器读或写8个字所用时间都为 $1 + 2 + 8 / 2 = 7$ 个时钟周期,所以在连续进行多个8字突发传送总线事务时,总线1的数据传输率为 $8 \times 4\mathrm{B} \times (100\mathrm{M / s}) / 7 = 457\mathrm{MB / s}$。

总线2的存储器读事务和存储器写事务所用时间不等,突发读8个字所用的时间为 $1 + 2 + 8 = 11$ 个时钟周期,突发写8个字所用的时间为 $1 + 2 + 7 = 10$ 个时钟周期,因此,当 $60\%$ 是读操作总线事务,$40\%$ 是写操作总线事务时,总线2的数据传输率为 $8 \times 4\mathrm{B} \times (100\mathrm{M / s}) / 11 \times 60\% + 8 \times 4\mathrm{B} \times (100\mathrm{M / s}) / 10 \times 40\% = 303\mathrm{MB / s}$。

(5)总线1和总线2的数据线和地址线总数都是64位,总线1采用数据/地址线复用,总线2采用分离的数据线和地址线。以下是对两种总线在各种情况下的分析以及得出的结论。

① 根据(1)中对两种总线最大数据传输率的计算可知,采用数据/地址线复用技术,能够得到更大的峰值数据传输率。因为,一旦进入到数据传输阶段,用64位数据线传输数据肯定比用32位数据线传输数据要快一倍。

② 根据(2)和(3)中对两种总线在单字传输情况下数据传输率的计算可知,采用数据/地址线分离技术,可以得到更大的单字传输数据速率。因为单字传输时,数据/地址线复用时得到的两倍宽度的数据线只能传送一个字,同时信号线复用而不能将数据和地址同时送出,使得写事务所用时间延长,因而,采用数据/地址线复用技术的情况下,得到的单字传输数据速率更低。

③ 根据(4)中对突发传送8个数据时数据传输率的计算可知,采用数据/地址线复用技术,能够得到更大的突发数据传输率。因为在突发传送事务中需要连续传送多个数据,此时64位数据线肯定比32位数据线传得快。

4. 若前端总线(FSB)的工作频率为 $1333\mathrm{MHz}$(实际时钟频率为 $333\mathrm{MHz}$),总线宽度为64位,则总线带宽为多少?若存储器总线为三通道总线,总线宽度为64位,内存条的型号为DDR3-1333,则整个存储器总线的总带宽为多少?若内存条型号改为DDR3-1066,则存储器总线的总带宽是多少?

【分析解答】

前端总线工作频率为 $1333\mathrm{MHz}$,说明总线上每秒传送1333M次数据,每次在总线上传送64位,因而总线带宽为 $8\mathrm{B} \times 1333\mathrm{M / s} = 10.664\mathrm{GB / s}$。

若内存条型号为DDR3-1333,说明存储器总线的工作频率为 $1333\mathrm{MHz}$,即每秒传送1333M次数据,因而每个通道的带宽为 $8\mathrm{B} \times 1333\mathrm{M / s} \approx 10.67\mathrm{GB / s}$,存储器总线的总带宽为 $3 \times 10.67\mathrm{GB / s} = 32\mathrm{GB / s}$。

若内存条型号为DDR3-1066,说明存储器总线的工作频率为 $1066\mathrm{MHz}$,即每秒传送1066M次数据,因而每个通道的带宽为 $8\mathrm{B} \times 1066\mathrm{M / s} \approx 8.5\mathrm{GB / s}$,因此存储器总线的总带宽为 $3 \times 8.5\mathrm{GB / s} = 25.5\mathrm{GB / s}$。

5. 总线的速度通常是指每秒传输多少次,例如,QPI总线的速度单位为 $\mathrm{GT / s}$,表示每秒传输多少个10亿($1\mathrm{G} = 10^{8}$)次。若QPI总线的时钟频率为 $2.4\mathrm{GHz}$,则其速度为多少?总带宽是多少 $\mathrm{GB / s}$?QPI总线的速度也称为QPI频率,QPI频率为 $6.4\mathrm{GT / s}$ 时的总带宽是多少?


<!-- page: 270 -->

# 【分析解答】

QPI 总线是一种基于包传输的串行高速点对点连接协议,有 20 条数据线,其中 16 位是有效数据,4 位用于 CRC 校验,发送 (TX) 和接收方 (RX) 有各自的时钟信号,每个时钟周期传输两次数据,并且发送方和接收方可以同时传输,因此总带宽的计算公式是:

$$
\text{每秒传输次数} \times \text{每次传输的有效数据} \times 2
$$

若 QPI 的时钟频率为 $2.4\mathrm{GHz}$,则速度为 $4.8\mathrm{GT/s}$,表示每秒传输 4.8G 次数据,即 QPI 频率为 $4.8\mathrm{GT/s}$。此时总带宽是 $4.8\mathrm{GT/s} \times 2\mathrm{B} \times 2 = 19.2\mathrm{GB/s}$。QPI 频率为 $6.4\mathrm{GT/s}$ 时的总带宽是 $6.4\mathrm{GT/s} \times 2\mathrm{B} \times 2 = 25.6\mathrm{GB/s}$。

6. PCI-e 总线采用串行传输方式,PCI-e $\times n$ 表示具有 $n$ 个通路的 PCI-e 链路。PCI-e 1.0 规范支持通路中每个方向的发送或接收速率为 $2.5\mathrm{Gb/s}$,则 PCI-e $\times 8$ 和 PCI-e $\times 32$ 的总带宽分别为多少?

# 【分析解答】

PCI-e 的每条通路由发送和接收数据线构成,在发送和接收两个方向上都各有两条差分信号线,可同时发送和接收数据。在发送和接收过程中,每个数据字节实际上被转换成了 10 位信息传输。PCI-e 1.0 规范支持通路中每个方向的发送或接收速率为 $2.5\mathrm{Gb/s}$。因此,PCI-e 1.0 总线的总带宽计算公式(单位为 GB/s)是:

$$
\text{总带宽} = 2.5 \times 2 \times \text{通路数} / 10
$$

在 PCI-e 1.0 规范下,PCI-e $\times 8$ 的总带宽为 $2.5 \times 2 \times 8 / 10 = 4(\mathrm{GB/s})$。PCI-e $\times 32$ 的总带宽为 $16\mathrm{GB/s}$。

7. 某终端通过 RS-232 串行通信接口与主机相连,采用起止式异步通信方式,传输速率为 1200baud(波特率),采用两相调制技术,通信协议为 8 位数据、无校验位、停止位为 1 位。请回答下列问题:

(1) 传送一个字符所需时间约为多少?

(2) 若传输速率为 2400baud,停止位为 2 位,其他条件不变,则传输一个字符的时间约为多少?

(3) 若采用四相调制技术,其他条件不变,则传输一个字符的时间约为多少?

# 【分析解答】

(1) 采用两相调制技术,故比特率等于波特率。1200baud 说明每秒传输 1200 个信息位。每个字符都有一个起始位,故一个字符有 $1 + 8 + 1 = 10$(位),因而,传输一个字符所需时间约为 $10 \times (1/1200) \times 1000 \approx 8.3(\mathrm{ms})$。

(2) 一个字符有 $1 + 8 + 2 = 11$(位),传输一个字符所需时间约为 $11 \times (1/2400) \times 1000 \approx 4.6(\mathrm{ms})$。

(3) 采用四相调制技术,则每个码元调制出 2 位信息,因而比特率是波特率的 2 倍,故传输一个字符所需时间约为 $10 \times (1/2400) \times 1000 \approx 4.15(\mathrm{ms})$。

8. 假定采用独立编址方式对 I/O 端口进行编号,那么必须为处理器设计哪些指令来专门用于进行 I/O 端口的访问?连接处理器的总线必须提供哪些控制信号来表明访问的是 I/O 空间?