--- title: "06-总线" created: 2026-08-29 tags: - 基础与理论 - 计算机组成原理 - "408" --- # 06 总线 > 📚 本文是 [[00-计算机组成原理总览|计算机组成原理]] 的第 6 篇,相关系列见 [[00-基础与理论|基础与理论]]。 CPU、主存、外设都各干各的,**总线是把它们连起来共用的"高速公路"**。感性的带宽对比和接口大全在 [[03-总线与接口|总线与接口]] 讲过,本篇讲计组考点:**三类仲裁**(谁先上路)、**定时方式**(什么节奏走)、**带宽算术**(一秒运多少货)。 ## 一、总线三分类 | 类型 | 连接对象 | 传输内容 | |---|---|---| | 数据总线 DB | 各部件 | 数据(双向) | | 地址总线 AB | CPU → 主存/外设 | 地址(**单向**) | | 控制总线 CB | 各部件 | 命令/时序/中断/应答(混合方向) | - **片内总线**:芯片内部(寄存器之间) - **系统总线**:CPU/主存/IO 各大部件之间(计算机系统级) - **通信总线**:计算机之间(如 USB/网络) ⚠️ 地址总线单向、数据总线双向——判断题常客。地址线 n 根 → 寻址空间 2ⁿ 单元。 ### 性能算术 $$\text{总线带宽} = \text{工作频率} \times \text{位宽} / 8$$ 💡 例:32 位(4B)数据总线、100MHz、每周期传一次 → 带宽 = 4B × 100M = **400 MB/s**;若 DDR(上下沿都传)翻倍到 800 MB/s。 ## 二、总线仲裁:多个主人抢一条路 总线上多个主设备(CPU、DMA 控制器都能发起传输)要抢总线——仲裁分**集中式**(有个中央裁判)和**分布式**(大家自商量)。 ### 集中式三方式(408 必考) | 方式 | 原理 | 优先级 | 优点 | 缺点 | |---|---|---|---|---| | **链式查询** | 总线同意信号 BG **串着往后传**,谁先拿到谁用 | **离控制器越近越固定地高**;后面的可能饿死 | 只用 3 根线(BR/BG/BS),线少省 | 优先级死板、对故障敏感(断一个全瘫) | | **计数器查询** | 控制器计数器往设备号线上发号,报号者认领 | 可从上次终止点继续(循环优先级) | 灵活,优先级可调 | 要 log₂n 根设备号线 + 控制逻辑 | | **独立请求** | **每个设备单独一对** BR/BG 线直连控制器 | 控制器可编程任意调度 | 最快最灵活 | 线最多(2n 根),成本最高 | 💡 记忆锚点:**链式=一串糖葫芦(省线但死板),计数器=点名报到(中等),独立=专线电话(豪横)**。 ### 分布式仲裁 无中央控制器,各设备自己比较仲裁号——**号小的赢**(获胜者把仲裁号留在总线上,别人比对后自动退让)。如 CAN 总线、SCSI。 ## 三、总线定时:什么节奏交换数据 ### 1. 同步定时 统一时钟信号,双方按节拍行动。 - 优点:规约简单、速度快(不用等待应答) - 缺点:**必须迁就最慢的设备**;时钟漂移在高频下致命 - 适用:总线短、速度接近的部件(CPU—主存) ### 2. 异步定时 无统一时钟,靠**握手(应答)**:主方发请求,从方回应答。 | 方式 | 握手规则 | 特点 | |---|---|---| | 不互锁 | 请求/应答各发各的,不等待确认 | 最快,但不可靠(可能撞车/丢失) | | 半互锁 | 主方等应答才撤销请求;从方不等主方 | 折中 | | **全互锁** | 请求↔应答**完全互相确认**,双方都等对方动作 | 最可靠,最慢 | 💡 记忆:**互锁 = 谁锁谁**。全互锁像"你说'我到了',我说'收到',你才把请求撤掉,我确认后才算完"——每一步都确认。 ### 3. 半同步(了解) 同步里加一条 WAIT 应答线:跟不上就拉 WAIT 插入等待周期——同步的骨架、异步的妥协(x86 总线的 READY 信号)。 ## 四、总线的数据传输:一次事务的分解 一次总线事务(Bus Transaction)四阶段: 1. **申请分配**:仲裁(上一节) 2. **寻址**:主方发地址 + 命令(读/写) 3. **传输**:数据一个节拍一个节拍地上 4. **结束**:撤信号、释放总线 ⚠️ 突发传输(Burst):给首地址后**连续传多个字**,地址自动 +1——DDR、PCIe 全靠它吃满带宽,和 [[03-存储系统]] 的"低位交叉 + 局部性"是一套组合拳。 ## 五、盲点自测 1. 地址总线方向?n 根地址线寻址多少?(单向;2ⁿ 个单元) 2. 链式查询为什么可能饿死?优点是什么?(BG 串行传递固定优先级,后面的设备可能永远抢不到;只用 3 根线) 3. 独立请求方式最贵在哪?(每设备 2 根专用线,2n 根) 4. 同步总线为什么必须迁就最慢设备?(统一节拍,快设备只能等) 5. 全互锁为什么最可靠?代价?(双向确认,无动作丢失;每次传输都要多次往返,慢) 6. 64 位总线 200MHz 每周期传一次,带宽多少?(8B × 200M = 1600 MB/s) ## 六、动手玩 ```bash # 看一眼你这台机器的"总线树" system_profiler SPHardwareDataType SPPCIDataType # macOS:PCI 设备挂在哪 lspci -tv # Linux:树状总线拓扑 ``` 你会看到 PCIe 树状结构——根复杂、分支挂 GPU/NVMe/网卡,正是"总线分层"的现实版。 ## 参考资料 - 王道《计算机组成原理考研复习指导》第 6 章 - 《Code: The Hidden Language》第 17 章起——总线与中断的极简讲法 - [[03-总线与接口]]——真实世界的接口带宽表(USB4/雷雳/PCIe 5.0) - [[07-输入输出系统]]——下一站:IO 设备怎么通过总线跟 CPU 说话 ⬅️ [[05-CPU|CPU]] 🏠 [[00-基础与理论|00-基础与理论]] ➡️ [[07-输入输出系统|输入输出系统]]