总线的基本概念

总线的定义只有一句话:一组能为多个部件分时共享的公共传输线路。

这句话里有三个词是判据,而且每一个词都直接生出本章后面的一节:

  • 公共——多个部件接在同一组线上,于是要问「这次是发给谁的」→ 地址线与寻址
  • 分时——同一时刻只允许一个部件驱动,于是要问「这次轮到谁」→ 仲裁(6.2.1)
  • 传输线路——线只是物理载体,两端还得约定含义,于是要问「什么时候算传完」→ 定时(6.2.2)

全章剩下的内容,都是「分时共享」这四个字要付的代价。 这一节先把参与者(主设备/从设备)、线(三类信号线)和约定(四大特性)这三件事定下来。

机制

分时与共享是两个独立的约束

共享说的是空间:一根线上挂着多个部件的接口。 分时说的是时间:同一时刻只能有一个部件驱动这根线。

后者是硬约束,理由在 5.3.2 已经讲过——总线上每个发送方都通过三态门接入,同一时刻若有两个三态门都处于导通状态且输出电平相反,就形成了一条从电源到地的低阻通路,这不是”数据错了”,而是电气故障。

所以「同一时刻只能有一个发送者」是不可协商的。但接收方可以有多个——一次总线传送在电气上天然是广播,只是通常只有被地址选中的那个从设备会响应。

主设备与从设备

定义判据
主设备(主模块)能发起一次总线事务并控制其全过程看谁发出地址
从设备(从模块)只能响应主设备给出的地址和命令被地址选中后才动作

三条容易错的地方:

  • 主设备不等于 CPU。 DMA 控制器取得总线控制权后就是主设备,此时 CPU 反而是让出总线的那一方——这一点在 5.1.1 说 CPU 五项功能时已经埋过:总线控制权并不总在 CPU 手里。
  • 角色是按事务定的,不是按部件定的。 同一个 I/O 接口,被 CPU 读状态寄存器时是从设备,自己发起 DMA 时是主设备。
  • 主存永远是从设备。 它没有发起事务的能力,只会被动响应。这是判断”谁需要参与仲裁”的快捷方式:只有可能成为主设备的部件才需要仲裁。

三类信号线

flowchart LR
    CPU["CPU<br/>(主设备)"]
    MEM["主存<br/>(从设备)"]
    IO["I/O 接口"]
    DMA["DMA 控制器<br/>(可成为主设备)"]

    CPU --- BUS
    MEM --- BUS
    IO --- BUS
    DMA --- BUS

    subgraph BUS["系统总线"]
        direction TB
        AB["地址线 当前主设备 → 从设备(单向)"]
        DB["数据线 双向"]
        CB["控制线 各条方向不一"]
    end

    classDef master fill:#e8f0fe,stroke:#4285f4,stroke-width:2px
    classDef slave fill:#f1f3f4,stroke:#9aa0a6
    classDef busline fill:#fff8e1,stroke:#f9ab00
    class CPU,DMA master
    class MEM,IO slave
    class AB,DB,CB busline

地址线:由当前主设备输出,指向主存单元或 I/O 端口。 根地址线可编码 个地址,但实际可寻址空间还取决于编址单位(见 3.3.2)。

数据线:双向,传送的是”被搬运的内容”。宽度决定一次并行传送的位数,是 6.1.5 带宽公式里的 。

控制线:方向不统一,这是最容易错的一条。

控制信号方向
读命令 / 写命令主设备 → 从设备
就绪 / 应答(READY、ACK)从设备 → 主设备
总线请求(BR)设备 → 仲裁器
总线允许(BG)仲裁器 → 设备
时钟、复位单点 → 全体

所以「地址线单向、数据线双向、控制线双向」这个说法只对了前两句:控制总线整体既不能说单向也不能说双向,只能逐条看。

边界辨析:数据线上的「命令字」与控制线上的「写使能」

往 I/O 接口的命令寄存器里写一个控制字,这个字走数据线——它是被搬运的内容。 而这次写操作本身的”写”信号走控制线——它是动作。

判据与 5.1.2 的「数据线 / 控制线二分」完全一样:控制线上跑的是开合命令(通常 1 位),数据线上跑的是内容(成组的位)。区别只在作用域——5.1.2 讲的是 CPU 芯片内部,这里讲的是芯片之间。

片内总线与系统总线的争用,解法不同

同一个”分时共享”问题,在两个作用域里用了两套完全不同的解法:

CPU 内部总线系统总线
争用者CPU 内的各个寄存器CPU、DMA 控制器等多个主设备
谁来决定顺序控制器直接排拍(5.3.3 三条规则)仲裁器(6.2.1)
顺序何时确定设计时就定死,写在微程序或硬布线逻辑里运行时动态决定

根本差别是「争用者是不是事先已知」。 CPU 内部的寄存器就那么几个,什么时候谁上总线在设计阶段就排好了,不需要任何运行时机制;系统总线上挂几个设备、谁什么时候要用,编译期无法知道,只能运行时裁决。

总线的四大特性

一个总线标准必须规定四类内容,缺一条就无法互换:

特性规定什么违反的后果
机械特性接插件形状、尺寸、引脚数量与排列插不进去
电气特性电平、驱动能力、阻抗、信号传输速率烧芯片
功能特性每根线传什么信息含义对不上,乱套
时间特性信号何时有效、按什么顺序出现、保持多久采样到垃圾

疑问点:机械特性、电气特性、功能特性、时间特性——「我去,这不也是计网的」

四条定义你自己全部写对了,而且这个联想成立:就是同一套东西。

组成原理(总线)计算机网络(物理层)
机械特性机械特性
电气特性电气特性
功能特性功能特性
时间特性规程特性(过程特性)

只有第四条名字不同,内容是一样的——都是”信号按什么顺序出现、什么时候有效、保持多久”。计网那一侧见 物理层接口的四类特性。

更值得记住的是这四条为什么恰好是四条。 它们不是”总线的四个方面”这种分类学罗列,而是**「两家厂商各做一半,要能插在一起,必须事先约定哪些事」的完整清单**——形状、电平、含义、时序,少任何一条都无法互换。

所以 6.1.4 遇到任何一个总线标准(PCIe、USB、SATA),都可以拿这四条去套;套不满的地方,就是那个标准交给上层去管的部分。

仲裁:目录里没有这一节,但它没有消失

疑问点:我看目录上好像没有总线仲裁;又想起了令牌环网和以太网的介质访问控制,「只能说有一点点共同点」

两个观察都对。而且第二个观察远不止”一点点”——那是结构上的同一个问题。

先说目录。 王道 2026《复习指导》第 6 章的三级节是 6.1.16.1.5 与 6.2.16.2.2,确实没有独立的”总线仲裁”一节,这个观察准确。但仲裁并没有从考纲里消失,它换了两种形式留着:

  1. 作为一次总线事务的第二个阶段——请求 → 仲裁 → 寻址 → 传输 → 释放(6.2.1);
  2. 三种判优方式的实体内容你已经在 5.5.3 学过了——中断判优的链式查询和独立请求,与总线仲裁连名字都一样,判据也一样。

所以本章只需补一种(计数器定时查询),不必重讲电路。

再说类比,这才是重点。 把四种机制摆在一起:

争什么谁裁决冲突怎么处理
总线仲裁(集中式)总线使用权中央仲裁器事前裁决,不会冲突
总线仲裁(分布式)总线使用权各设备互相比较优先级事前裁决,不会冲突
令牌环介质使用权令牌本身,无中心事前排队,不会冲突
以太网 CSMA/CD介质使用权没有裁决者允许冲突,检测到再退避重传

真正的分界线不是”总线 vs 网络”,而是「事前预约」还是「事后补救」。 总线仲裁和令牌环在同一侧,以太网单独在另一侧(见 随机访问介质访问控制)。你说的”共同点”,准确讲就是前三行共享的那条:先取得使用权,再发送。

那总线为什么不用 CSMA/CD 这种省掉仲裁器的做法? 两条理由,都指向物理尺度:

  • 冲突检测需要时间窗口。 CSMA/CD 要求发送时间不小于 (往返传播时延),发送方才可能在发完之前听到冲突。以太网上 是微秒量级,够用;板级总线上 是纳秒量级,窗口小到检测电路本身的开销超过传一次数据。
  • 总线冲突的代价不可接受。 以太网丢一帧可以重传;总线上两个三态门同时驱动同一根线是电气故障,而且总线协议里没有帧校验和重传这一层——数据错了就是错了。

一句话:以太网敢碰撞,是因为它上面还有一层重传;总线没有那一层,所以必须事前裁决。

边界

「总线」不等于「主板上的线」。 总线是一组协议加线路,它同时存在于芯片内部(片内总线)、芯片之间(系统总线)和机器之间(通信总线)。反过来,现代主板上 CPU 到内存、CPU 到显卡是点对点链路,并不是多个设备电气并联的经典总线。

「分时」不否定「广播」。 分时约束的是发送方只能有一个,接收方可以是全体——总线上的写操作在电气上就是广播,靠地址译码决定谁真正锁存。

「共享」不等于「等长等宽」。 同一个系统里地址线、数据线的根数常常不同,且都可以与 CPU 字长不同(3.3.4)。

「需要仲裁」的判据是「有多个可能的主设备」,不是「挂了多个设备」。 一条只挂 CPU 和若干从设备的总线不需要仲裁,因为永远只有 CPU 会发起事务。

四大特性里的”时间特性”不等于 6.2.2 的”总线定时”。 前者是标准文本里必须写清的一类条款,后者是具体的定时方式(同步/半同步/异步)——后者是前者的一部分内容。

对照速查

问题判据
谁是主设备谁发出地址
这条总线要不要仲裁有没有第二个可能的主设备
这个信号走数据线还是控制线它是被搬运的内容,还是这次动作的命令
内部总线争用怎么解决控制器排拍,设计时定死
系统总线争用怎么解决仲裁器,运行时裁决
总线仲裁与 CSMA/CD 的分界事前预约 vs 事后补救
四大特性缺一条会怎样插不进去 / 烧芯片 / 含义乱套 / 采样到垃圾

考点

  • 主/从设备判断:给一个部件关系图,问谁可以是主设备、谁必须是从设备、谁需要参与仲裁。主存必为从设备、DMA 控制器可为主设备是两个高频答案。
  • 信号线方向:「地址线单向、数据线双向、控制线双向」这句话错在第三段。
  • 四大特性对号入座:给一条具体规定(如”引脚 12 为写使能”),问它属于哪一类特性。功能特性管”这根线是什么”,时间特性管”什么时候有效”。
  • 概念辨析:分时 ≠ 只有一个接收方;共享 ≠ 位宽一致。

链接