在软考计算机组成原理的考纲里,系统总线是一个看似基础、实则极易失分的考点。很多考生背下了"数据总线、地址总线、控制总线"三个名词,却说不清它们各自传输什么、为什么必须分开、以及一台计算机里到底有几条总线。本文从定义出发,把系统总线这个知识点彻底拆开。
所谓总线,从字面理解就是一组公共的信息传输线。教材对总线的标准定义是:总线是连接计算机系统中多个功能部件的一组公共传输线,是各部件之间传输信息的公共通路。这一定义有两个关键词需要把握。第一个关键词是"公共",它强调总线是多个部件共享的通路,而不是某个部件私有的连线。第二个关键词是"一组",它说明总线不是一根线,而是由多根信号线按照约定组织起来的一个集合体。
理解了公共通路这个定位,就能理解为什么计算机要采用总线结构。早期的计算机采用的是以运算器为中心的分散连接方式,各部件之间两两直接连线,这种结构在部件数量少的时候还能勉强维持,一旦部件增多,连线的数量会以组合爆炸的方式增长,系统的扩展性和可维护性都急剧恶化。总线结构正是为了解决这个问题而诞生的:让所有部件都挂接到一条公共的总线上,任何一个部件要和其他部件通信,都通过这条公共通路进行。这样一来,增减外设变得非常方便,只需要把新设备挂到总线上即可,不需要为每一对新旧部件重新布线。这就是系统总线结构最本质的意义。
在完整的计算机系统中,总线并不是一个孤立的概念。按照所连接部件的层次和范围,教材通常把总线划分为三个层级:片内总线、系统总线和通信总线。片内总线位于 CPU 芯片内部,负责连接运算器、控制器与寄存器组,它属于芯片设计层面的概念,软考选择题偶尔会考到它与系统总线的区别。系统总线则是本文的主角,它位于 CPU 芯片之外、计算机主板之上,负责把 CPU、主存储器、输入输出接口等各大功能部件连接成一个完整的计算机系统,所以系统总线也被称为内总线或板级总线。通信总线则是计算机与外部设备之间、或者计算机与计算机之间进行数据通信的总线,属于更外层的概念。
这里要特别提醒一个极易混淆的点:CPU 内部的部件连接,走的是片内总线,而不是系统总线。软考真题曾经反复在这个地方挖坑,题目给出"运算器、控制器和寄存器组"与"运算器、控制器和系统总线"两个选项,让考生判断 CPU 主要由哪些部件构成。正确答案是"运算器、控制器和寄存器组",因为系统总线并不在 CPU 内部,它是 CPU 之外、连接各功能部件的公共通路。把系统总线误认为 CPU 的组成部件,是大量考生丢分的首要原因。
系统总线之所以能够胜任连接各大部件的任务,是因为它内部又按照所传输信息的性质,进一步分成了三种功能不同的总线,也就是考生最熟悉的数据总线、地址总线和控制总线。这三个名字是整个知识点的主干,后面每一个章节都会围绕它们展开。
数据总线负责在 CPU 与存储器、CPU 与输入输出设备之间传送数据,它是三大功能总线中唯一承担真正"数据搬运"职责的总线。数据总线的关键特征是双向传输,因为数据既可能从存储器读入 CPU,也可能从 CPU 写入存储器,两条方向都要支持,所以数据总线必然是双向的。
数据总线的宽度,也就是数据总线有多少根信号线,直接决定了一次总线操作能够传送多少位数据。如果数据总线宽度是 8 位,那么每次传送一个字节;如果是 32 位,每次传送 4 个字节;如果是 64 位,每次传送 8 个字节。这个宽度通常与 CPU 的字长或主存的存储单元位宽相匹配。软考命题人特别喜欢围绕数据总线宽度出题,尤其是把数据总线宽度和地址总线宽度放在一起,让考生根据宽度推算可寻址的空间或者一次传送的数据量。
一个需要深入理解的点是:数据总线的宽度决定了计算机的"吞吐粒度",但并不意味着计算机只能处理这个宽度的数据。当要传送的数据超过数据总线宽度时,会通过多次传送来完成,由总线控制器负责把大数据拆分成若干个总线周期依次传送。
地址总线负责传送地址信息,它把 CPU 要访问的存储单元或输入输出端口的地址,传送到存储器或接口电路,从而选中目标单元。与数据总线最大的不同在于,地址总线是单向的,它只由 CPU 向外输出,因为地址总是由发起访问的主设备产生,存储器或外设只需要被动接收地址并选中对应单元,不需要向 CPU 回传地址。
地址总线宽度与可寻址空间之间的关系,是整个计算机组成原理里最重要的计算公式之一。假设地址总线有 n 根,那么它能够产生 2 的 n 次方个不同的地址编码,也就是最多可以寻址 2 的 n 次方个存储单元。如果存储单元按字节编址,那么可寻址的存储空间就是 2 的 n 次方字节。例如地址总线宽度为 16 位,可寻址空间就是 2 的 16 次方等于 65536,即 64KB;地址总线宽度为 32 位,可寻址空间就是 2 的 32 次方等于 4GB。这条换算关系是软考历年真题的高频考点,几乎每年都会以直接或变形的方式出现。
这里有一个容易忽略的细节:可寻址空间由地址总线宽度决定,而与数据总线宽度无关。很多考生会下意识地把"能访问多大内存"和"一次能搬多少数据"混淆起来。内存空间的大小取决于地址总线的根数,一次传送数据的多少取决于数据总线的根数,两者是完全独立的两个维度。题目经常把这两个宽度放在一起,故意诱导考生张冠李戴。
控制总线负责传送控制信号和时序信号,它承载的既不是数据也不是地址,而是协调整个系统运行的各种命令和状态。控制总线上的信号种类非常多,常见的有存储器读信号、存储器写信号、输入输出读信号、输入输出写信号、中断请求信号、中断响应信号、总线请求信号、总线允许信号、时钟信号、复位信号等。
与数据总线和地址总线不同,控制总线上的每一根信号线方向是各自独立的,有的由 CPU 发出,有的由外部部件发出。例如存储器读写信号、输入输出读写信号是由 CPU 发出的输出信号,而中断请求信号、总线请求信号则是由外部设备发出的输入信号。因此,控制总线既不是单纯的双向,也不是单纯的单向,而是"按线定方向"的混合结构。软考选择题经常用"控制总线是双向的"或"控制总线是单向的"这类绝对化的表述来挖坑,正确答案是控制总线上不同信号线方向不同,不能一概而论。
把三大功能总线放在一起看,就能理解为什么系统总线必须同时包含这三种总线:一次完整的总线操作,需要地址总线先选中目标单元,再由控制总线发出读写命令,最后由数据总线完成数据的实际搬运。三者缺一不可,共同构成了一个完整的总线传输周期。
在三大功能总线之外,系统总线的运行还依赖两个重要的辅助机制,它们同样是软考选择题的考查点。第一个是总线仲裁机制。由于总线是多个部件共享的公共通路,同一时刻只能有一个主设备占用总线发起传输,当多个主设备同时请求使用总线时,就必须有一套仲裁机制来决定先后顺序。教材中常见的仲裁方式有链式查询、计数器定时查询和独立请求三种。链式查询方式用一根总线请求线把所有设备串成一条链,越靠近总线控制器的设备优先级越高,结构简单但优先级固定、故障影响面大;计数器定时查询方式由总线控制器按计数顺序轮询各设备,优先级可以灵活调整;独立请求方式为每个设备单独设置请求线和响应线,响应速度最快,但需要的信号线数量也最多。命题人常把三种仲裁方式的优缺点混在一起出对比题。
第二个辅助机制是总线通信的时序方式,即同步通信与异步通信。同步通信依赖统一的时钟信号,总线上所有事件都在时钟的固定节拍下发生,传输速度快、控制简单,但对各部件速度差异的适应性差;异步通信不依赖统一时钟,而是通过握手信号来协调发送方和接收方,能适应速度差异大的部件,但控制复杂、传输效率相对较低。同步与异步的选择,本质上是在传输效率与灵活性之间做权衡,这也是软考判断题经常考察的技术要点。
如果按照数据线的传输方式来划分,总线可以分为并行总线和串行总线两大类。并行总线同时用多根数据线传送多位数据,每个时钟周期可以传送一个字;串行总线则只用一根数据线,把数据一位一位地顺序传送。早期的系统总线几乎都是并行总线,因为并行传输在相同频率下能够获得更高的传输速率。
然而,并行总线在实际应用中暴露出一个严重的物理局限:当传输频率提高到一定程度后,多根数据线上的信号难以保持严格的同步,线间串扰、信号偏移等问题会随着频率和
本篇完!