第六部分:总线与输入输出系统

6.1 总线概述

什么是总线? 总线是连接多个部件(CPU、内存、I/O设备)的一组公共信号线,各部件通过它共享信息。总线的特点是"分时共享":同一时刻只能有一个部件向总线发送数据(主控者),但可以有多个部件同时接收(从属者)。

总线类比:总线就像城市中的"主干道"——同一时刻只能有一个方向的车流(数据),但路边的各个建筑(部件)都可以从这条路上接收信息。如果多辆车同时上路就会发生"交通堵塞"(总线冲突)。

总线的分类(按所在位置和功能)

  1. 片内总线:CPU芯片内部连接寄存器、ALU、控制单元的总线。
  2. 系统总线:连接CPU、主存、I/O接口的主要总线。系统总线又分为:
    • 数据总线(DB):传输数据,双向。宽度(位数)决定一次能传多少数据。
    • 地址总线(AB):传输地址,单向(从CPU到内存或I/O)。宽度决定可寻址范围。
    • 控制总线(CB):传输控制信号(如读、写、中断请求、总线请求等),每根线方向固定。
  3. 通信总线:用于计算机与外部设备、或其他计算机之间的通信(如USB、RS-232)。

系统总线三条线的协同工作示例: CPU要从内存地址0x1000处读取一个字(32位):

  1. CPU在地址总线上输出地址 0x1000(32位地址线全为0...10000...0)。
  2. CPU在控制总线上输出"读"信号(MEMR=0或1,取决于定义)。
  3. 内存控制器译码地址,找到0x1000单元,将数据放在数据总线上。
  4. 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 总线操作与定时

总线传输的四个阶段

  1. 请求阶段:主控部件向总线控制器申请总线使用权。
  2. 仲裁阶段:总线控制器决定下一个主控者。
  3. 寻址阶段:主控者将地址和命令(读/写)放到总线上。
  4. 传送阶段:数据在主控者与从属者之间传输。
  5. 释放阶段:主控者释放总线。

总线定时方式(协调双方如何知道何时传输数据)

  1. 同步总线

    • 使用统一的时钟信号。所有操作在时钟边沿触发。
    • 优点:协议简单,实现容易。缺点:时钟频率受最慢设备限制;总线长度受限(时钟偏斜问题)。
    • 典型应用:早期的ISA总线、CPU与内存之间的并行总线。
  2. 异步总线

    • 没有统一时钟,通过握手信号(请求、应答)协调。
    • 常见握手协议:
      • 主控者发出"请求"信号,保持数据有效。
      • 从属者发出"应答"信号,表示已接收或已提供数据。
      • 主控者撤销请求,从属者撤销应答。
    • 优点:可以连接速度不同的设备,总线长度不受时钟限制。缺点:协议复杂,传输效率略低(握手开销)。
    • 典型应用: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端口编址方式

  1. 统一编址(内存映射I/O)

    • 将I/O端口看作内存单元的一部分,分配内存地址空间中的一块给I/O。
    • CPU使用访问内存的指令(如LOAD、STORE)来读写I/O端口。
    • 优点:不需要专门的I/O指令,指令丰富。缺点:占用内存地址空间。
  2. 独立编址(专用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执行其他程序,设备准备数据)。缺点:每次传输都需要保护现场、恢复现场,有额外开销。
  • 适用:中低速设备(如键盘、鼠标、串口)。

中断的详细流程(考研重点)

  1. 外设接口发出中断请求信号(IRQ)。
  2. CPU在每条指令执行结束后检测中断请求。
  3. 若允许中断(中断标志位=1),CPU向接口发送中断响应信号。
  4. 接口提供中断向量(中断类型号),CPU据此找到中断服务程序入口地址(通过中断向量表或IDT)。
  5. CPU自动保存断点(PC、PSW等,有的还会保存部分寄存器),然后跳转到中断服务程序。
  6. 中断服务程序执行数据传输等操作,最后执行中断返回指令(IRET),恢复断点。

中断响应过程示例: 某外设(键盘)产生一个中断,CPU正在执行程序A。

  1. 键盘接口发出IRQ信号。
  2. CPU执行完当前指令后(指令的最后一个时钟周期),检测到IRQ有效,且IF=1(中断允许)。
  3. CPU发出INTA(中断响应)信号给键盘接口。
  4. 键盘接口将中断向量号(如0x21)放在数据总线上。
  5. CPU根据中断向量号查找IDT(中断描述符表),得到中断服务程序入口地址。
  6. CPU自动保存当前PC和PSW到堆栈(保存断点)。
  7. CPU跳转到键盘中断服务程序执行。
  8. 服务程序读键盘数据,处理后执行IRET。
  9. IRET指令恢复之前保存的PC和PSW,CPU继续执行程序A。

中断相关概念

  • 中断屏蔽:通过设置中断屏蔽字,可以禁止某些中断被响应(用于优先级控制)。
  • 中断优先级:当多个中断同时请求时,优先级高的先响应。
  • 中断嵌套:高优先级中断可以打断低优先级的中断服务程序(若允许)。

中断优先级的示例: 设中断优先级:时钟中断 > 键盘中断 > 打印机中断。 当前CPU正在执行打印机中断服务程序,此时时钟中断产生:

  • 如果允许中断嵌套(且中断标志位为1),CPU会暂停打印机中断服务程序,响应时钟中断。
  • 时钟中断处理完后,返回打印机中断服务程序继续执行。

DMA方式(直接存储器存取)

  • DMA控制器(DMAC)接管总线,直接在内存与外设之间传输数据块,不需要CPU干预(仅传输开始和结束时CPU介入)。
  • 优点:传输速度快,适合大批量数据(如磁盘、显卡、网卡)。缺点:需要额外的DMA控制器硬件。

DMA工作过程

  1. CPU设置DMA控制器:传送方向(读/写)、内存起始地址、传送字节数、设备地址等。
  2. DMA控制器向CPU申请总线(通过总线请求/响应)。
  3. CPU释放总线控制权,DMA控制器接管总线,进行数据传输(每传一个字,内存地址加1,计数器减1)。
  4. 传输完成后,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中的常见考点

  1. 总线仲裁方式:判断给定场景下哪种仲裁最合适,或分析链式查询的优先级。
  2. 总线带宽计算:已知总线宽度、时钟频率、传输周期数,求带宽。
  3. 中断响应过程:写出中断响应的硬件和软件步骤,或分析中断屏蔽的作用。
  4. DMA与中断的区别:简答题常考(是否占用CPU、传输单位、适用场景)。
  5. 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 异步总线对比。

常见命题模式:

  1. 给定总线宽度、时钟频率、传输周期数,计算总线带宽(必考计算题之一)。
  2. 给出中断优先级和中断屏蔽字,分析中断响应顺序和中断嵌套情况。
  3. DMA传输对CPU性能影响的计算(周期窃取方式下)。
  4. 三种总线仲裁方式的优缺点比较。

学生常犯错误:

  • 总线带宽计算时忘记单位换算(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申请总线->传输->中断结束