第六部分:总线与输入输出系统
6.1 总线概述
什么是总线? 总线是连接多个部件(CPU、内存、I/O设备)的一组公共信号线,各部件通过它共享信息。总线的特点是"分时共享":同一时刻只能有一个部件向总线发送数据(主控者),但可以有多个部件同时接收(从属者)。
总线类比:总线就像城市中的"主干道"——同一时刻只能有一个方向的车流(数据),但路边的各个建筑(部件)都可以从这条路上接收信息。如果多辆车同时上路就会发生"交通堵塞"(总线冲突)。
总线的分类(按所在位置和功能)
- 片内总线:CPU芯片内部连接寄存器、ALU、控制单元的总线。
- 系统总线:连接CPU、主存、I/O接口的主要总线。系统总线又分为:
- 数据总线(DB):传输数据,双向。宽度(位数)决定一次能传多少数据。
- 地址总线(AB):传输地址,单向(从CPU到内存或I/O)。宽度决定可寻址范围。
- 控制总线(CB):传输控制信号(如读、写、中断请求、总线请求等),每根线方向固定。
- 通信总线:用于计算机与外部设备、或其他计算机之间的通信(如USB、RS-232)。
系统总线三条线的协同工作示例: CPU要从内存地址0x1000处读取一个字(32位):
- CPU在地址总线上输出地址 0x1000(32位地址线全为0...10000...0)。
- CPU在控制总线上输出"读"信号(MEMR=0或1,取决于定义)。
- 内存控制器译码地址,找到0x1000单元,将数据放在数据总线上。
- CPU从数据总线上读取数据到MDR。
整个过程:地址线决定"从哪读",控制线决定"读还是写",数据线传输"读到的内容"。
总线的性能指标
- 总线宽度:数据总线的位数(如32位、64位)。
- 总线时钟频率:总线上数据传输的基准频率(如100MHz)。
- 总线带宽:单位时间内最大数据传输量,公式 = 总线宽度 x 时钟频率 / 传输周期数。 例如:32位(4字节)总线,频率100MHz,每次传输需要1个时钟周期,带宽 = 4B x 100MHz = 400MB/s。
- 总线传输周期:一次完整总线操作(请求、寻址、传送、释放)所需时间。
总线带宽计算示例: 例1:某总线数据宽度为64位,时钟频率为200MHz,每次传输需要2个时钟周期,求总线带宽。 带宽 = (64/8)字节 x 200MHz / 2 = 8B x 100MHz = 800MB/s。
例2:假设总线带宽为1GB/s,数据宽度为32位,每次传输需要1个时钟周期,求总线时钟频率。 1GB/s = 1024MB/s = 1024 x 10^6 B/s 带宽 = 4B x f / 1 => f = 1024 x 10^6 / 4 = 256MHz。
例3(对比并行和串行):一条32位并行总线,频率100MHz,每周期传输一次,带宽 = 4B x 100MHz = 400MB/s。而一条串行总线(1位数据),频率2.5GHz,每周期传输1位,带宽 = 0.125B x 2500MHz = 312.5MB/s。虽然串行频率高很多,但带宽不一定超过并行。但串行总线频率可以做得更高(不受并行信号干扰限制),所以PCIe等串行总线的总带宽可以远超旧式并行总线。
总线主控与从属
- 主控(Master):能发起总线传输的部件(如CPU、DMA控制器)。
- 从属(Slave):只能响应主控请求的部件(如内存、I/O接口)。
💡 记忆技巧:
- 系统总线三总线:数据(DB)、地址(AB)、控制(CB),记作数地控。
- 数据总线双向,地址总线单向(从CPU向外),控制总线每根方向固定。
⚠️ 易错点:
- 总线带宽和存储器带宽的区别:总线带宽是理论最大值(受总线条数和频率限制),实际传输量往往小于该值。
- 地址总线宽度决定寻址范围(如32位地址总线最大寻址4GB),数据总线宽度决定单次传输量。
6.2 总线仲裁
当多个主控部件同时要求使用总线时,需要仲裁机制决定哪个获得使用权。
链式查询方式
- 所有主控部件通过一条"总线请求"线向总线控制器申请。
- 控制器发出"总线允许"信号,串行通过各个部件(一条链)。
- 离控制器最近的部件优先获得总线使用权。
- 优点:电路简单,易于扩展。缺点:优先级别固定(离得近的永远优先),且链路上某一部件故障会影响后面的部件。
链式查询示例: 假设有3个主控设备A(最近)、B(中间)、C(最远),A和C同时请求总线。 总线控制器发出总线允许信号,从A开始传递:
- A收到允许信号,检查自己是否请求?是,则A占用总线,信号不再向下传。
- 如果A没有请求,允许信号传给B,B再检查...如此传递到C。 在这个例子中,即使C先请求,A也会优先获得总线,因为A离控制器最近。
计数器定时查询方式
- 每个主控部件有独立的请求线,控制器内部有一个计数器。
- 当收到请求时,控制器从0开始计数,依次询问每个部件是否请求。
- 第一个匹配的部件获得总线。
- 优点:优先级可灵活改变(修改计数器起始值)。缺点:需要多根请求线,控制复杂。
独立请求方式
- 每个主控部件有独立的请求线和允许线。
- 控制器根据内部优先级策略(可编程)同时处理多个请求。
- 优点:响应快,优先级灵活。缺点:硬件连线多(每个部件两根线)。
三种仲裁方式对比:
| 特性 | 链式查询 | 计数器查询 | 独立请求 |
|---|---|---|---|
| 请求线数量 | 1根 | n根(每设备1根) | n根 |
| 允许线数量 | 1根(链式传递) | 无 | n根 |
| 优先级 | 固定(离控制器近优先) | 可编程(改计数器起始值) | 可编程 |
| 设备故障影响 | 影响后方设备 | 只影响自身 | 只影响自身 |
| 电路复杂度 | 简单 | 中等 | 复杂 |
总线仲裁在408中的考法:常与DMA或多处理器系统结合,判断在某种请求下哪个部件获得总线。
6.3 总线操作与定时
总线传输的四个阶段
- 请求阶段:主控部件向总线控制器申请总线使用权。
- 仲裁阶段:总线控制器决定下一个主控者。
- 寻址阶段:主控者将地址和命令(读/写)放到总线上。
- 传送阶段:数据在主控者与从属者之间传输。
- 释放阶段:主控者释放总线。
总线定时方式(协调双方如何知道何时传输数据)
-
同步总线
- 使用统一的时钟信号。所有操作在时钟边沿触发。
- 优点:协议简单,实现容易。缺点:时钟频率受最慢设备限制;总线长度受限(时钟偏斜问题)。
- 典型应用:早期的ISA总线、CPU与内存之间的并行总线。
-
异步总线
- 没有统一时钟,通过握手信号(请求、应答)协调。
- 常见握手协议:
- 主控者发出"请求"信号,保持数据有效。
- 从属者发出"应答"信号,表示已接收或已提供数据。
- 主控者撤销请求,从属者撤销应答。
- 优点:可以连接速度不同的设备,总线长度不受时钟限制。缺点:协议复杂,传输效率略低(握手开销)。
- 典型应用:USB、PCIe(其实PCIe采用高速串行+嵌入式时钟,混合方式)。
同步 vs 异步类比:
- 同步总线 = "阅兵式"——所有人都按照同一个鼓点(时钟)行动,整齐划一,但速度受限于走得最慢的人。
- 异步总线 = "搭档打球"——你发球(请求),对方接球(应答),你才发下一个。双方不用统一节奏,可以快慢搭配。
半同步总线:有统一时钟,但允许从属者插入等待周期(如用"READY"信号延长传输)。常见于某些系统总线。
三种定时方式对比:
| 特性 | 同步 | 异步 | 半同步 |
|---|---|---|---|
| 时钟 | 统一时钟 | 无时钟 | 统一时钟 |
| 速度 | 受最慢设备限制 | 各设备按自身速度 | 可插入等待周期 |
| 协议复杂度 | 简单 | 复杂(握手) | 中等 |
| 总线长度 | 受时钟偏斜限制 | 不受限制 | 中等 |
6.4 常见总线标准(了解级别)
考研可能以选择题形式考查以下总线的基本特点:
- PCI(Peripheral Component Interconnect):并行总线,同步,支持即插即用,多个设备共享带宽。
- PCIe(PCI Express):串行点对点,高速,采用分组传输,取代了PCI。
- USB(Universal Serial Bus):串行,支持热插拔,树形拓扑,集线器结构。
- SATA(Serial ATA):用于连接硬盘,串行点对点。
- SCSI:并行(早期)或串行,常用于服务器硬盘。
重点:区分并行总线和串行总线。并行总线(如旧PCI)数据线多但易受干扰,频率难提高;串行总线(如PCIe、USB)数据线少,频率可极高,总带宽反而更大。
总线发展趋势:从并行到串行。为什么串行反超并行?
- 并行总线信号同步困难(多根线之间的时间偏移问题,即skew)。
- 串行总线频率可提高到GHz级别,单线带宽巨大。
- 通过多通道(lane)串行增加总带宽(如PCIe x1, x4, x8, x16)。
6.5 输入输出接口(I/O接口)
I/O接口的作用
- 数据缓冲:协调CPU与外设的速度差异(用锁存器或缓冲器)。
- 信号转换:电平转换、串并转换(如串行口)。
- 地址译码:识别CPU要访问哪个设备或端口。
- 状态与控制:提供状态寄存器(让CPU查询设备是否就绪)和控制寄存器(让CPU启动设备)。
I/O接口的基本结构 每个I/O接口内部通常包含:
- 数据缓冲寄存器(如数据端口)。
- 状态/控制寄存器(状态端口、控制端口)。
- 地址译码电路。
- 与CPU侧的总线连接逻辑。
- 与外设侧的接口逻辑。
I/O端口编址方式
-
统一编址(内存映射I/O)
- 将I/O端口看作内存单元的一部分,分配内存地址空间中的一块给I/O。
- CPU使用访问内存的指令(如LOAD、STORE)来读写I/O端口。
- 优点:不需要专门的I/O指令,指令丰富。缺点:占用内存地址空间。
-
独立编址(专用I/O指令)
- I/O端口有自己的地址空间,与内存地址空间分开。
- CPU使用专门的I/O指令(如IN、OUT)访问端口。
- 优点:不占用内存地址空间,地址线较少。缺点:需要专用指令,程序阅读性稍差。
- 典型:x86架构(IN/OUT指令)。
编址方式对比:
| 特性 | 统一编址 | 独立编址 |
|---|---|---|
| 访问指令 | 内存指令(LD/ST) | 专用I/O指令(IN/OUT) |
| 地址空间 | 占用内存地址 | 独立地址空间 |
| 地址线是否区分 | 不区分 | 需区分(用M/IO信号) |
| 典型架构 | ARM、MIPS | x86 |
6.6 I/O控制方式
CPU如何与外设交换数据?主要有四种方式,从软件控制到硬件控制,效率逐渐提高。
程序查询方式
- CPU不断读取I/O接口的状态寄存器,检查设备是否就绪。若就绪,则进行一次数据传输;否则继续查询。
- 优点:硬件简单,易于实现。缺点:CPU与设备串行工作,CPU利用率极低(尤其慢速设备)。
- 适用:简单嵌入式系统,或CPU无事可做时。
程序查询方式示例: 打印机每秒打印100个字符,每个字符打印需要10ms。CPU采用程序查询方式与打印机通信。 CPU每传送一个字符需查询状态多次,假设每次查询需要100个时钟周期(2.5GHz CPU,即0.04us)。 如果CPU每次查询后都等待10ms再查询下一次,那么CPU利用率 = 0.04us / 10ms = 0.0004% ——几乎可以忽略不计。 但CPU实际无法"等待"——它必须不断查询,导致CPU在此期间不能做其他事,浪费大量算力。
程序中断方式
- 外设在准备好数据后,主动向CPU发送中断请求。CPU在执行完当前指令后,响应该中断,暂停当前程序,执行中断服务程序进行数据传输,然后返回原程序。
- 优点:CPU与设备可以并行工作(CPU执行其他程序,设备准备数据)。缺点:每次传输都需要保护现场、恢复现场,有额外开销。
- 适用:中低速设备(如键盘、鼠标、串口)。
中断的详细流程(考研重点)
- 外设接口发出中断请求信号(IRQ)。
- CPU在每条指令执行结束后检测中断请求。
- 若允许中断(中断标志位=1),CPU向接口发送中断响应信号。
- 接口提供中断向量(中断类型号),CPU据此找到中断服务程序入口地址(通过中断向量表或IDT)。
- CPU自动保存断点(PC、PSW等,有的还会保存部分寄存器),然后跳转到中断服务程序。
- 中断服务程序执行数据传输等操作,最后执行中断返回指令(IRET),恢复断点。
中断响应过程示例: 某外设(键盘)产生一个中断,CPU正在执行程序A。
- 键盘接口发出IRQ信号。
- CPU执行完当前指令后(指令的最后一个时钟周期),检测到IRQ有效,且IF=1(中断允许)。
- CPU发出INTA(中断响应)信号给键盘接口。
- 键盘接口将中断向量号(如0x21)放在数据总线上。
- CPU根据中断向量号查找IDT(中断描述符表),得到中断服务程序入口地址。
- CPU自动保存当前PC和PSW到堆栈(保存断点)。
- CPU跳转到键盘中断服务程序执行。
- 服务程序读键盘数据,处理后执行IRET。
- IRET指令恢复之前保存的PC和PSW,CPU继续执行程序A。
中断相关概念
- 中断屏蔽:通过设置中断屏蔽字,可以禁止某些中断被响应(用于优先级控制)。
- 中断优先级:当多个中断同时请求时,优先级高的先响应。
- 中断嵌套:高优先级中断可以打断低优先级的中断服务程序(若允许)。
中断优先级的示例: 设中断优先级:时钟中断 > 键盘中断 > 打印机中断。 当前CPU正在执行打印机中断服务程序,此时时钟中断产生:
- 如果允许中断嵌套(且中断标志位为1),CPU会暂停打印机中断服务程序,响应时钟中断。
- 时钟中断处理完后,返回打印机中断服务程序继续执行。
DMA方式(直接存储器存取)
- DMA控制器(DMAC)接管总线,直接在内存与外设之间传输数据块,不需要CPU干预(仅传输开始和结束时CPU介入)。
- 优点:传输速度快,适合大批量数据(如磁盘、显卡、网卡)。缺点:需要额外的DMA控制器硬件。
DMA工作过程
- CPU设置DMA控制器:传送方向(读/写)、内存起始地址、传送字节数、设备地址等。
- DMA控制器向CPU申请总线(通过总线请求/响应)。
- CPU释放总线控制权,DMA控制器接管总线,进行数据传输(每传一个字,内存地址加1,计数器减1)。
- 传输完成后,DMA控制器向CPU发送中断请求,通知CPU传输结束。
DMA与中断对比:如果说中断就像"你找同事帮忙,同事每次都要停下来问你做什么"(每次传输都中断CPU),那么DMA就像"你把任务交代给助理,助理自己做完再来汇报"(只有开始和结束需要CPU介入)。
DMA传送方式(如何占用总线)
- 停止CPU访问内存:DMA期间完全让出总线,CPU停止访问内存(效率低,但简单)。
- 周期窃取:DMA控制器在CPU不访问内存时(如CPU内部执行不需要访问内存的指令周期)插入一个总线周期进行DMA传输。常用。
- 交替访问:将总线时间划分为多个时间片,CPU和DMA轮流使用(类似分时)。
周期窃取示例: CPU执行程序,其中约30%的时钟周期需要访问内存(访存指令),70%的周期不需要(如ALU指令)。 DMA控制器可以在CPU不访问内存的时钟周期插入自己的传输。 如果DMA需要传输1MB数据,每次传输4字节,单次传输需要1个总线周期(假设50ns),则: 总传输时间 = (1MB / 4B) x 50ns = 262144 x 50ns = 13.1ms 由于DMA只"窃取"CPU不用的周期,对CPU程序执行速度影响很小(约30%的性能损失)。
通道方式与I/O处理器(了解)
- 通道:一种更智能的DMA,能执行通道程序(包含多个I/O命令),处理更复杂的I/O操作。
- I/O处理器:独立的处理器,专门处理I/O任务,可以执行操作系统中的I/O相关代码。
四种I/O方式对比
| 方式 | 数据传输单位 | CPU介入程度 | 适用设备 | 优缺点 |
|---|---|---|---|---|
| 程序查询 | 字/字节 | 每次传输都介入 | 简单低速 | 硬件简单,CPU效率极低 |
| 程序中断 | 字/字节 | 每次传输都中断 | 中低速 | CPU可并行,但仍有开销 |
| DMA | 块 | 仅开始和结束 | 高速块设备 | 传输快,需DMA控制器 |
| 通道/IOP | 块/程序 | 很少 | 大型机 | 更智能,硬件更复杂 |
四种方式的CPU利用率对比(传送1000个字符,每个字符传输需要1us设备时间):
- 程序查询:CPU 100%占用(不断查询等待,不能做其他事)-> 总耗时1000us。
- 程序中断(每次中断开销5us):CPU只在中断时占用,利用率 ~5/1005 = 0.5%。
- DMA(设置和中断共10us开销,一次传送1000字符):CPU利用率 ~10/(1000+10)=1%。
- 通道:CPU利用率更低(通道自己管理I/O过程)。
6.7 总线与I/O在408中的常见考点
- 总线仲裁方式:判断给定场景下哪种仲裁最合适,或分析链式查询的优先级。
- 总线带宽计算:已知总线宽度、时钟频率、传输周期数,求带宽。
- 中断响应过程:写出中断响应的硬件和软件步骤,或分析中断屏蔽的作用。
- DMA与中断的区别:简答题常考(是否占用CPU、传输单位、适用场景)。
- I/O端口编址:统一编址与独立编址的优缺点。
综合示例: 某计算机采用程序中断方式与打印机通信,每次中断服务程序需执行50条指令,平均每条指令CPI=2,CPU主频2GHz。打印机每秒打印100个字符。问CPU用于打印的利用率是多少?
解: 每次中断的CPU时间 = 50条 x 2 CPI / (2x10^9) = 100 / 2x10^9 = 5x10^(-8)秒 = 50ns。 打印机每秒中断100次(每打印一个字符中断一次),总CPU时间 = 100 x 50ns = 5000ns = 5us。 CPU利用率 = 5us / 1s = 0.0005% = 5x10^(-6)。 结论:打印机中断对CPU性能的影响微乎其微。
📌 408考点提示
考查形式:
- 选择题:总线概念(三总线类型)、仲裁方式、DMA和中断的特点、总线带宽计算。
- 简答题/综合题:中断响应过程(写步骤)、DMA工作流程、总线带宽的综合计算。
- 对比题:中断 vs DMA优缺点对比、同步 vs 异步总线对比。
常见命题模式:
- 给定总线宽度、时钟频率、传输周期数,计算总线带宽(必考计算题之一)。
- 给出中断优先级和中断屏蔽字,分析中断响应顺序和中断嵌套情况。
- DMA传输对CPU性能影响的计算(周期窃取方式下)。
- 三种总线仲裁方式的优缺点比较。
学生常犯错误:
- 总线带宽计算时忘记单位换算(MB/s和MBps的区别,1B=8b等)。
- 中断响应流程中,中断服务程序结束后是执行IRET而不是RET。
- DMA与中断的主要区别不是"快和慢",而是"是否需要CPU参与每次传输"。
- 认为DMA传输不需要CPU参与 = DMA不需要地址总线——实际上DMA需要地址总线来指定内存地址。
备考建议:
- 总线带宽公式必须熟练,注意单位(字节和位、Hz和MHz)的换算。
- 中断的处理流程建议默写几遍(请求->响应->保护断点->服务->恢复->返回)。
- DMA和中断的对比要能从"传输单位、CPU介入程度、适用场景、硬件需求"四个维度回答。
- 408中总线与I/O部分通常与其他章节(如存储器、CPU)组合出综合题,不要孤立备考。
第六部分小结
| 主题 | 核心要点 |
|---|---|
| 总线概念 | 数据总线、地址总线、控制总线;分时共享 |
| 总线仲裁 | 链式查询、计数器定时、独立请求 |
| 总线定时 | 同步、异步、半同步 |
| I/O接口 | 数据/状态/控制寄存器;统一编址 vs 独立编址 |
| I/O控制方式 | 程序查询、中断、DMA、通道;各自特点与适用场景 |
| 中断流程 | 请求->响应->保护断点->服务->恢复->返回 |
| DMA流程 | CPU设置->DMAC申请总线->传输->中断结束 |