总线(bus)

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

### 总线(bus)

总线是共享的信息传输介质,用于连接若干设备,由一组传输线组成,信息通过这组传输线在设备之间被传送。总线按其所在的位置分为片内总线、系统总线和通信总线。

### 片内总线(internal bus)

片内总线指芯片内部连接各元件的总线。例如,在 CPU 芯片内部,存在连接各个寄存器、ALU 等各元件之间的总线。

### 系统总线(system bus)

系统总线是用来连接计算机硬件系统中若干主要部件(如 CPU、主存、I/O 模块)的总线。系统总线上传输的有数据、地址和控制信息。因此,把系统总线也分成三组传输线:数据线、地址线和控制线,有时也把它们分别称为数据总线、地址总线和控制总线。系统总线可分为处理器总线、存储器总线和 I/O 总线。


<!-- page: 244 -->

注:Intel 公司推出的芯片组中,对系统总线赋予了特定的含义,把 CPU 连接到北桥芯片的总线称为系统总线,也称为处理器总线或前端总线(Front Side Bus,FSB)。CPU 通过前端总线连接到北桥芯片,进而通过北桥芯片和内存、显卡交换数据。

## 处理器总线(processor bus)

早期的 Intel 微处理器的处理器总线称为前端总线,它是主板上最快的总线,主要用作处理器与北桥芯片进行信息交换。

Intel 公司推出 Core i7 时,北桥芯片的功能被集成到 CPU 芯片内,CPU 通过存储器总线(即内存条插槽)直接和内存条相连,而在 CPU 芯片与其他 CPU 芯片之间,以及 CPU 芯片与 IOH(Input/Output Hub)芯片之间,则通过 QPI(QuickPath Interconnect)总线相连。

## 存储器总线(memory bus)

在 Intel 公司早期推出的芯片组中,在 CPU 和主存之间有一个北桥芯片组,CPU 连接到北桥芯片的总线称为处理器总线,也称为系统总线或前端总线;北桥芯片连到主存的总线称为存储器总线。Core i7 以后的处理器芯片中集成了原先北桥芯片中的功能逻辑,包括主存控制器等,因而,在这种处理器架构的系统中,处理器通过存储器总线(内存条插槽)直接连接到内存条上。

## I/O 总线(I/O bus)

I/O 总线用于各种外设控制器(即 I/O 接口,如显卡、网卡等)与主机相连,通常是标准总线,例如 PCI 总线、AGP 总线、PCI-e 总线等。

## 通信总线(communication bus)

通信总线用于主机和 I/O 设备之间或计算机系统之间的通信。由于这类连接涉及许多方面,包括距离远近、速度快慢、工作方式等,差异很大,所以通信总线的种类很多,例如 RS-232 串行总线、USB 串行总线、SCSI 总线等。

## 底板总线(backplane bus)

总线按连线类型可分为电缆式、主板式和底板式总线。通常,通信总线采用电缆式总线形式,处理器总线和存储器总线采用主板式形式,而 I/O 总线采用底板式总线形式。

底板式总线在主板上提供相应的扩展总线插槽,各种 I/O 接口模块(如网卡、显卡等)能以 I/O 插件板卡的形式插入相应的插槽,以便进行外部设备的扩展。为使各 I/O 插件板的插座之间具有通用性,底板总线通常是标准总线,使得不同厂家的 I/O 插件板可以互连、互换。

## 并行传输(parallel transfer)

并行传输指总线中传输的数据在数据线上同时有多位一起传送,每一位要有一位数据线,因此有多位数据线组成。并行传输的特点是同时可以传输多位数据,但数据位之间必须同步,而且因为数据线多,使得相互间干扰大,因而,数据传输的速度受到很大影响。

## 串行传输(serial transfer)

串行传输指总线中传输的数据在数据线上按位进行传输,因此只需要一位或两位数据信号线,线路的成本低,适合于远距离或者近距离快速数据传输。对于串行传输的总线,提高时钟速度比并行传输总线容易得多,而且几乎没有线间串扰。因而串行传输总线的速度可以比并行传输总线快得多。


<!-- page: 245 -->

## 信号线复用 (signal multiplexing)

信号线复用指同一组线在不同的时刻传送不同的信号。例如,数据/地址线复用时,用同一组线在总线事务的地址阶段传送地址信息,在数据阶段传送数据信息,这样就使得地址和数据通过同一组线进行传输。

## 总线事务 (bus transaction)

通常把在总线上一对设备之间的一次信息交换过程称为一个总线事务。把发出事务请求的部件称为主控设备或主设备 (master),又称启动者 (initiator),另一个部件称为从设备 (slave),又称目标 (target)。总线事务类型由其操作性质来定义。例如,存储器读事务是指将数据从主存取出到处理器,存储器写事务是指将数据写到主存。典型的总线事务类型有存储器读、存储器写、I/O 读、I/O 写、中断响应等。

## 总线传输周期 (bus transmission cycle)

总线传输周期是在总线上完成一次总线事务所用的时间,通常由若干总线时钟周期组成,简称总线周期。

## 总线宽度 (bus width)

总线中数据线的位数称为总线的宽度,即总线能同时传送的数据位数,它决定了每次能同时传输的数据信息的位数。用位表示时,也称为总线位宽;用字节表示时,其值为总线位宽/8。

## 总线时钟频率 (bus clock frequency)

总线中用于定时的公共时钟信号的频率就是总线时钟频率,常以 $\mathrm{MHz}$、$\mathrm{GHz}$ 等为单位,这里 $\mathrm{M}$ 和 $\mathrm{G}$ 都是 10 的幂次。

## 总线传输速率 (bus transfer speed)

总线传输速率是单位时间内传输数据的次数,也称为总线工作频率,常以 $\mathrm{MT/s}$、$\mathrm{GT/s}$ 等为单位,分别表示每秒传输多少 $\mathrm{M}$ 次或多少 $\mathrm{G}$ 次数据。也有人会用 $\mathrm{MHz}$、$\mathrm{GHz}$ 来作为总线工作频率,早期的总线通常一个时钟周期传送一次数据,因此,总线工作频率等于总线时钟频率。现在有些总线一个时钟周期可以传送 2 次或 4 次数据,因此,总线工作频率是总线时钟频率的 2 倍或 4 倍。

## 总线带宽 (bus bandwidth)

总线带宽就是总线的最大数据传输率,即总线在进行数据传输时单位时间内在总线上可传输的最大数据量。它与总线宽度、总线工作频率等有关。用公式表示为 $B = W \times F / N$,式中 $B$ 为总线带宽,$W$ 为总线宽度,$F$ 为总线时钟频率,$N$ 为传输一个数据所用的总线时钟周期数,因此 $F / N$ 实际上为总线工作频率。

## 突发传送方式 (burst transmission)

突发传送方式是一种连续的、成批数据传送方式。只需在传送开始时给出数据块的首地址,然后连续传送多个数据,后续数据的地址默认为前面数据地址加 1,实际上这些连续的数据一般在存储阵列的同一行上。在主存储器中有一个行缓冲 (row buffer),在突发传送事务中,每次访问第一个数据时,都会读出一行数据到行缓冲,后面的连续数据就只要从行缓冲中源源不断地取出即可。所以,这种方式下,总线上能够实现一个时钟周期内传送多个数据。在总线宽度和工作频率相同的情况下,数据传输率大大高于不支持突发传送的总线。这种方式也称为背对背 (back-to-back) 传送方式。


<!-- page: 246 -->

总线裁决 (bus arbitration)

决定哪个总线主控设备将在下次得到总线使用权的过程称为总线裁决。进行总线裁决有多种方案,主要分为集中式和分布式两大类。

总线裁决器 (bus arbiter)

总线裁决器又称总线控制器,当多个设备同时请求使用总线时,需要通过总线裁决器决定由哪个设备控制总线。

总线请求信号 (bus request signal)

总线请求信号是在总线上传输的一种控制信号,设备要求使用总线时发出,用于表明发出该请求信号的设备需要使用总线。

总线响应/总线允许信号 (bus acknowledge/bus grant signal)

总线响应/总线允许信号是在总线上传输的一种控制信号,总线控制器在接收到设备的总线请求后,根据优先级选择向一个设备发送总线响应信号,表示允许该设备在下个总线周期使用总线。

集中裁决 (centralized arbitration)

集中裁决方式将总线控制逻辑做在一个专门的总线控制器或总线裁决器中,通过将所有的总线请求集中起来利用一个特定的裁决算法进行裁决。

分布裁决 (distributed arbitration)

分布裁决方式没有专门的总线控制器,其控制逻辑分散在各个总线部件或设备中。

同步总线 (synchronous bus)

同步总线指各部件采用时钟信号进行同步,协议简单,因而速度快,接口逻辑很少。但总线上的每个部件必须在规定的时间内完成要求的动作,因此一般按最慢的部件来设计公共时钟。

异步总线 (asynchronous bus)

为了协调异步总线在发送和接收者之间的数据传送,异步总线使用一种握手协议(应答信号)进行通信。允许各设备之间的速度有较大的差异,所以异步总线大多用于具有不同存取速度的设备之间进行通信。通常,异步方式被通信总线采用。

握手信号 (handshaking signal)

握手协议由一系列步骤组成,在每个步骤中,只有当双方都同意时,发送者或接收者才会进入到下一步,协议是通过一组附加的控制线来实现的。握手协议中的信号称为握手信号或应答信号。

半同步总线 (semi-synchronous bus)

半同步总线既保留了同步通信的特点,又能采用异步应答方式连接速度相差较大的设备。通过在异步总线中引入时钟信号,其就绪和完成等应答信号都在时钟的上升沿或下降沿被采样。底板式的 I/O 总线大多采用半同步方式。

分离事务协议 (split transaction protocol)

分离事务协议将一个事务过程分成两个子过程,在第一个子过程中,主控设备 A 在获得总线使用权后,将请求的事务类型(总线命令)、地址以及其他有关信息(如标识主控设备身份的编号)发送到总线上,从设备 B 记录下这些信息。主控设备发完这些信息后便立即释放总线,这样其他设备便可使用总线;在第二个子过程中,从设备 B 收到主控设备 A 发来


<!-- page: 247 -->

的信息后,就按照其请求的命令进行相应的操作,当准备好主控设备所需的数据后,从设备B便请求使用总线,一旦获得使用权,则从设备B就将主控设备A的编号及所需的数据等送到总线上,这样主控设备A便可接收数据。这种事务分离方式的优点是:通过在不传送数据期间释放总线,使得其他申请者能使用总线。但是,这种方式的控制相当复杂,开销也大,并且事务响应时间也会变长。

## 即插即用(plug and play)

即插即用功能是指任何扩展卡只要插入系统的插座上就能工作。这种技术通过自动配置计算机中的板卡和其他设备,将物理设备和软件(设备驱动程序)相配合,并在每个设备和它的驱动设备之间建立通信信道。

## I/O 接口(I/O interface, I/O module)

I/O接口(I/O模块)是主机和外设之间传送信息的“桥梁”,介于主机和外设之间。主机控制外设的命令信息、传送给外设的数据或从外设取来的数据以及外设送给主机的状态信息等都要先存放到I/O接口。对每种具体的设备来说,就是介于底板总线和通信总线(电缆式总线)之间的扩展卡或插件板,如网卡、显示卡等。也有很多设备的接口电路集成在主板上,如声卡、打印机控制卡、磁盘控制器、键盘/鼠标控制电路等已经基本上集成在主板上,只留一些电缆插座,以连接相应的外部设备。

## I/O 控制器(I/O controller)

I/O控制器指I/O接口中的控制电路,不包含I/O接口中的连接器插座。

## I/O 端口(I/O port)

I/O 接口中一些可被程序访问的寄存器用来存放控制(命令)、数据和状态等信息,这些寄存器称为 I/O 端口。

## 命令(控制)端口(command/control port)

在I/O接口中,用来存放CPU送来的控制信息的寄存器称为命令端口或控制端口,只可以对其进行写操作。

## 数据端口(data port)

在I/O接口中,用于存放接收和发送数据的寄存器称为数据端口,可以对其进行读或写操作。

## 状态端口(status port)

在I/O接口中,用来记录外部设备或I/O接口的状态的寄存器称为状态端口,通常只可以对其进行读操作。有些接口电路,将命令端口和状态端口合二为一,作为命令端口时,从CPU写入控制信息;作为状态端口时,存入外设或接口的状态信息,供CPU读取。

## I/O 地址空间(I/O address space)

所有I/O端口号组成的地址空间称为I/O地址空间,简称I/O空间。

## 独立编址(special address space)

独立编址将I/O端口和主存单元分别编号,不占用主存单元的地址空间,因而主存单元和I/O端口可能会有相同的编号,但地址位数大多不同,主存单元多,地址空间大,因而地址位数多;I/O端口少,地址空间小,因而地址位数少。因为可能有相同的编号,指令中无法靠地址来区分要访问的是主存单元还是I/O端口,所以,需要有和访存指令不同的操作码,因此,需要设计专门的I/O指令。


<!-- page: 248 -->

# 统一编址(united address space)

统一编址是将 I/O,端口和主存单元统一编址,所以也称为存储器映射 I/O (memory-mapped I/O, MMI/O) 方式。一个地址空间分成了两部分,各在不同的地址段中,但地址的位数是相同的,可根据地址范围的不同来区分访问的是主存单元还是 I/O 端口,所以无须专门的输入输出指令。

## 并行接口(parallel interface)

并行接口在设备和接口之间同时传送一个字节或一个字的所有位。

## 串行接口(serial interface)

串行接口在设备和接口之间按位来传送数据。

## 可编程接口(programmable interface)

可编程接口能用程序来改变或选择接口的功能和操作方式。

## 不可编程接口(non-programmable interface)

不可编程接口不能用程序来改变其功能和操作方式,但可通过硬连线路来实现不同的功能。

## I/O 指令(I/O instruction)

I/O 指令是指用来访问 I/O 端口的指令。指令中的操作码必须指出是读还是写,地址码必须说明信息在哪个端口和哪个通用寄存器之间进行传送,所以,地址码中要给出端口号和通用寄存器编号。例如,80x86 中的 IN 指令和 OUT 指令等。

## 程序查询 I/O 方式(I/O polling)

程序查询 I/O 方式下,将 CPU 通过执行查询程序来完成对外设的控制,实现和外设的数据传送。在查询程序中,CPU 首先通过读取状态端口中的状态信息,了解接口是否已“就绪”(或“完成”),如果接口已经就绪,就通过数据端口进行新的数据传送,并查询外设是否空闲,在外设空闲的情况下,通过发送控制信息到命令端口,然后由接口发“启动”命令送外设;如果接口没有就绪,或外设不空闲,则 CPU 继续查询,以等待接口就绪或外设空闲。所有信息(包括控制、数据、状态)的交换由查询程序中的 I/O 指令完成。

## 就绪状态(ready)

对于输入设备而言,就绪状态意味着 I/O 接口中的数据缓冲器已准备好,CPU 可以从 I/O 接口取数据;对于输出设备而言,就绪状态则说明 I/O 接口中的数据缓冲器已空,CPU 可以将数据送到 I/O 接口中。

## 程序中断 I/O 方式(I/O interrupt)

程序中断 I/O 方式下,CPU 启动外设后,就转到另外一个程序执行,此时外设和 CPU 并行工作。一旦外设完成任务,便发中断请求给 CPU,告知 CPU 上次任务已经完成。此时,CPU 暂停正在执行的程序,转到一个中断服务程序进行中断处理,在中断处理过程中,进行外设下一步的准备工作(如传送下一个要打印的数据,或者取走键盘数据或采样数据,为下次输入腾空数据缓冲寄存器),最后启动外设,并回到原程序继续执行。此时,CPU 和外设又能并行工作。

## 可屏蔽中断(maskable interrupt)

如果某个中断事件不是很紧急,可以被延缓响应,那么在处理其他中断时,就可以屏蔽这个中断,让正在处理的中断执行完,再来响应这个中断,这种中断称为可屏蔽中断。一般


<!-- page: 249 -->

外设中断源引起的中断都是可屏蔽中断。

不可屏蔽中断(Non-Maskable Interrupt, NMI)

不可屏蔽中断是指重要或紧急的硬件故障事件,如电漂掉电等。这类中断发生时,必须立即响应,不能把这类中断屏蔽掉。

中断请求寄存器(interrupt request register)

中断请求寄存器是中断控制器中专门用来存放每个设备对应的中断请求信号的寄存器。

中断屏蔽寄存器(interrupt mask register)

中断屏蔽寄存器是中断控制器中专门用来存放每个中断源对应的中断屏蔽字的寄存器。

向量中断(vector interrupt)

向量中断是指一种识别中断源的技术或方式。识别中断源的目的就是要找到中断源对应的中断服务程序的入口地址,即获得向量地址。采用向量中断进行中断源识别的做法是,采用某种硬件排队线路(如菊花链、并行判优),对所有未被屏蔽的中断请求进行排队,选出优先级最高的中断源,然后对其编码,得到该中断源的编号(有些书中称其为向量地址),通过总线将其取到CPU中,转换成向量地址,从而从中断向量表中取出中断服务程序入口地址,或直接跳转到中断服务程序。还有一种中断源识别方式是用程序(称为中断查询程序)进行识别的软件方法。

中断向量(interrupt vector)

每个中断源都有对应的处理程序,称这个处理程序为中断服务程序,其入口地址称为中断向量。

中断向量表(interrupt vector table)

所有中断(包括异常)的中断服务程序入口地址构成一个表,这个表称为中断向量表。也有的机器把中断服务程序入口的跳转指令构成一个表,这个表称为中断向量跳转表。

向量地址(vector address)

中断向量表或中断向量跳转表中每个表项所在的地址称为向量地址。

中断类型号(interrupt number)

中断向量表或中断向量跳转表中每个表项所在的表项索引值称为中断类型号。

中断响应优先级(interrupt response priority)

中断响应优先级是指当多个中断请求发生时,优先响应哪个中断请求。它是由硬件排队线路或中断查询程序的查询顺序决定的,不可动态改变。

中断处理优先级(interrupt process priority)

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

中断响应(interrupt response)

中断响应是指CPU发现有中断请求到取出中断服务程序的入口地址准备执行中断服务程序的过程。CPU总是在一条指令执行完、取下条指令之前去查询有无中断请求。如果


<!-- page: 250 -->

此时是开中断状态,并有未被屏蔽的中断请求发生,则CPU自动执行一条隐指令,进入中断响应周期,以完成关中断、保护断点、取中断向量三个操作。

## 中断服务程序(interrupt handler)

中断服务程序也称为中断处理程序、异常处理程序等。当CPU发现中断或异常时,就会把当前正在执行的用户程序停下来,调出处理异常或中断的程序来执行,这个程序就是中断服务程序。中断服务程序属于操作系统内核部分,所以,发生中断或异常时,CPU的状态要从用户态(即执行用户程序的状态,又称目态)切换到管理态(即执行操作系统管理程序,又称管态或内核态)。

## DMA I/O 方式

DMA是Direct Memory Access(直接存储器存取)的缩写。DMA I/O方式下,每次需要进行外设数据读写时,首先CPU把要传送的数据个数、数据块在内存的首址、数据传送的方向(是读操作还是写操作)、设备的地址等参数送给DMA控制器,然后发送一个命令给DMA接口,启动外设进行数据准备工作。在这些工作完成后,CPU就继续进行其他工作。此时,外设和CPU并行工作。而I/O设备和主存交换数据的事情就交给了DMA控制器。DMA控制器在需要的时候申请总线控制权,占用总线完成I/O设备和主存间的数据传送。传送结束后,向CPU发送“DMA结束”中断请求,让CPU进行数据校验等后处理工作。

DMA方式适合于像磁盘一类的高速设备(外存),以成批的方式和内存直接交换数据。