第六章 总线和输入 / 输出系统
6.1 总线
- 总线的基本概念
- 总线的组成及性能指标
- 总线事务和定时
6.2 I/O 接口(I/O 控制器)
- I/O 接口的功能和基本结构
- I/O 端口及其编址
6.3 I/O 方式
- 程序查询方式
- 程序中断方式
- 中断的基本概念
- 中断响应过程
- 中断处理过程
- 多重中断和中断屏蔽的概念
- DMA 方式
- DMA 控制器的组成
- DMA 传送过程
6.1.1总线的基本概念:
(一)总线的基本概念
-
概念定义:
总线是 连接计算机多个部件的信息传输线路,作为各部件共享的传输介质(多个部件共用同一组线路通信,而非各自拉线)。 -
核心特点:
-
① 分时性(针对 “发送信息” 的规则):
同一时刻,总线 只允许一个部件向总线发送信息(若多个部件同时发,电信号会干扰,导致数据错误);多个部件需轮流占用总线发送数据(“分时” 发送)。 -
② 共享性(针对 “接收信息” 的规则):
总线连接多个部件,部件间通过总线分时共享传输能力;当一个部件向总线发送信息时,连接在总线上的 多个部件可同时接收相同信息(无需排队等待,提升传输效率)。
-
类比理解(辅助记忆):
- 分时发送 → 话筒只能一人拿(同一时间 1 个 “发声音”);
- 共享接收 → 广播可同时听(同一时间多个 “收声音”)。
6.1.1总线的组成及性能指标:
据总线是 系统总线中负责在各功能部件(如 CPU、主存、I/O 接口)之间传输数据信息的总线。
2. 传输的 “数据” 范畴
数据总线传输的 “数据” 并非仅指数值,还包括各类二进制信息:
- CPU ↔ 主存:
- 程序运行时的 数据 / 指令(指令本质是存放在内存的二进制代码,通过数据总线读取);
- CPU ↔ I/O 接口:
- 输入信息:I/O 设备的 状态信息(如硬盘是否就绪)、中断类型号(如键盘中断的唯一标识);
- 输出信息:CPU 向 I/O 发出的 控制命令(如启动硬盘读写操作);
- 特殊场景:
- 地址信息(当地址线与数据线 “复用” 时,地址会通过数据总线分时传输,即同一组线先传地址、再传数据)。
模拟流程:键盘触发中断的全过程
Step 1:外设发请求(控制总线)
- 键盘按下 → 向中断控制器发 IRQ0 信号(控制总线传输,相当于 “按门铃”)→ 信号存入 中断请求寄存器(前台记录 “键盘客户求助”)。
Step 2:检查屏蔽(过滤无效请求)
- 屏蔽寄存器里,CPU 没屏蔽键盘中断(否则请求直接被忽略)→ 判优线路开始工作。
Step 3:判优(选最紧急的客户)
- 假设同时有键盘(IRQ0)和鼠标(IRQ1)请求 → 判优线路根据优先级,选 键盘(假设优先级更高) → 触发 “服务号打印机”。
Step 4:生成中断类型号(数据总线准备)
- 中断类型号形成线路生成 32+0(键盘的唯一 ID) → 这个 ID 是二进制数据,准备通过 数据总线 传给 CPU。
Step 5:CPU 采样中断请求(控制总线)
- CPU 执行完一条指令后,会检查 INT 信号(控制总线传输,相当于 “老板问客服:‘有人找我吗?’”)→ 发现 INT 有效(有客户求助)。
Step 6:CPU 发中断查询(控制总线)
- CPU 进入 中断响应周期 → 发 中断查询请求信号(控制总线,相当于 “老板喊:‘谁要找我?报号!’”)。
Step 7:中断控制器传类型号(数据总线)
- 中断控制器收到查询信号后,在固定时间内,把 32+0(键盘的服务号) 通过 数据总线 传给 CPU(相当于 “客服报号:‘32 号客户找您!’”)。
Step 8:CPU 处理中断
- CPU 根据 32+0 查 中断向量表(相当于 “查服务手册”)→ 找到键盘中断的处理程序 → 开始处理按键事件。
关键细节:为什么中断类型号走数据总线?
- 中断类型号是 “数据(二进制 ID)” ,属于 “要传输的内容” → 走 数据总线;
- 而 INT 信号、中断查询信号 是 “控制指令”(告诉对方 “有请求”“该报号了”)→ 走 控制总线。
总线特性
- 双向传输:支持数据 “从 CPU 发往外设 / 内存” 和 “从外设 / 内存发往 CPU”;
- 位宽(数据总线宽度):数据线的条数,与 机器字长(CPU 一次运算的位数)、存储字长(内存单元的位数)相关,是系统性能的核心指标(宽度越大,一次传输数据越多,效率越高)。
2. 关键部件关联
- MDR(存储器数据寄存器):
CPU 与总线间的 “数据中转站”,其位数 必须与数据总线宽度相等(确保数据能完整传输); - 存储字长:
内存一个存储单元的位数(即 CPU 一次从内存某地址读取的数据量),可与数据总线宽度不同(如总线 32 位、存储字长 64 位时,内存一次读 64 位,分两次通过总线传给 CPU)。
我们可以用 “乐队演奏” 和 “双人舞蹈” 做类比,理解总线的时序控制逻辑:
核心问题:总线传输数据时,设备间如何 “同步动作”?
总线上的设备(如 CPU、内存、硬盘)速度不同,必须协调 “何时发数据、何时收数据” —— 这就是时序控制的核心。
一、同步总线:听同一个指挥的 “乐队”
1. 定义
所有设备 共享同一个时钟信号(像乐队听指挥的节拍),每个总线操作(读、写)必须在 规定的时钟节拍内完成。
2. 类比理解
- 时钟 → 指挥的 “打拍”(比如每秒打 2 拍);
- 设备 → 乐手(吉他手、鼓手),必须按 “节拍” 动作:
- 第 1 拍:CPU 给内存发地址;
- 第 2 拍:内存把数据传给 CPU;
- 动作必须严格对齐节拍,晚了 / 早了都会出错。
3. 优缺点
- 优点:简单高效(不用额外沟通,按节奏来);
- 缺点:“一刀切” —— 若有设备速度慢(如硬盘),会拖慢整个总线(像乐队里有乐手跟不上节拍,全队得等)。
二、异步总线:互相打手势的 “双人舞”
1. 定义
没有统一时钟,设备靠 “握手信号” 沟通(像舞者互相眼神、手势交流):
- 设备 A 发 “就绪信号”(比如 “我数据准备好了!”);
- 设备 B 发 “应答信号”(比如 “好的,我来拿!”);
- 双方轮流发信号,完成一次传输。
2. 类比理解
- CPU(舞者 A)和硬盘(舞者 B)跳舞:
- A:“我要读数据啦(发请求)!”
- B:“好的,我慢慢找… 找到了!(发就绪信号)”
- A:“收到,我来拿(发应答信号,读数据)!”
- 节奏由双方协商,B 慢就多等,B 快就少等。
3. 优缺点
- 优点:灵活适配速度(快慢设备互不影响,像街舞里自由发挥);
- 缺点:复杂(需要额外的握手信号线路,还要处理信号交互逻辑,像舞者得时刻关注对方动作)。
三、半同步总线:“带指挥的即兴舞蹈”
1. 定义
既有统一时钟,又支持握手信号:
- 平时按时钟节奏运行(像乐队默认打拍);
- 若设备没准备好(如显卡还没渲染完画面),可以发 “暂停信号” 让时钟 “暂时停拍”,等准备好再继续。
2. 类比理解
- 指挥(时钟)默认打拍,乐手(设备)平时跟拍;
- 若鼓手(慢设备)没准备好,举牌 “等一下” → 指挥暂停打拍,等鼓手准备好再继续。
3. 核心优势
兼顾 同步的高效(默认按节奏)和 异步的灵活(允许临时暂停),像 “带暂停键的指挥”,适配更多设备。
总结:三种总线的选择逻辑
总线类型 | 协调方式 | 适用场景 | 典型例子 |
---|---|---|---|
同步总线 | 统一时钟 | 设备速度接近(如 CPU↔内存) | 早期计算机系统总线 |
异步总线 | 握手信号 | 速度差异大(如 CPU↔硬盘) | USB 总线(设备速度各异) |
半同步总线 | 时钟 + 握手 | 兼顾效率和灵活(如 CPU↔显卡) | 现代计算机系统总线 |
(2017)下列关于多总线结构的叙述中,错误的是( )。
A. 靠近 CPU 的总线速度较快
B. 存储器总线可支持突发传送方式
C. 总线之间须通过桥接器相连
D. PCI-Express×16 采用并行传输方式
知识点 | 关键结论 |
---|---|
多总线结构设计 | 按设备速度分层,近 CPU 总线速率更高,匹配核心性能 |
存储器总线特性 | 支持突发传送,利用地址连续性提升读写效率 |
总线互连 | 不同总线通过桥接器连接,实现速度 / 协议适配 |
PCIe 传输方式 |
本质是串行总线, PCIe×16:16 根 “串行水管” 同时开工
3. 大白话总结
|
总线的性能:
总线的工作频率:每秒传送多少数据:
总线事务和定时
第二组:非 CPU 也能当主设备
主设备 | 从设备 | 为什么它是 “主”? |
---|---|---|
DMA 控制器 | 内存 | DMA 主动代替 CPU 传数据(比如硬盘→内存的传输,DMA 自己控制总线,不用 CPU 插手)。 |
I/O 设备(总线主控型) | 内存 | I/O 设备主动自己发起 DMA 传输(比如网卡直接把收到的数据写到内存,不用等 CPU 命令)。 |
CPU | 协处理器 | CPU 主动给协处理器发指令(比如让显卡算图形,CPU 先发运算命令)。 |
协处理器 | CPU | 协处理器主动从 CPU 拿数据(比如显卡需要运算数据,主动问 CPU 要)。 |
3. 总线规则:同一时间,“主” 不能打架
- 同一时刻,只能有一个主设备控制总线:
总线是共享资源,如果多个设备同时 “主动发信号”,会导致数据冲突(比如两个人同时说话,谁也听不清)。 - 例外:主设备广播时,可多个从设备响应:
主设备可以 “广播”(比如给所有从设备发相同数据),此时多个从设备可以同时接收(但主设备还是只有一个,比如老师讲课,全班同学听,老师是唯一主)。
DMA 控制器(DMA Controller,简称 DMAC)是帮计算机 “搬数据” 的专用硬件,核心是让 外设和内存直接传输数据,彻底绕开 CPU,从而大幅提升效率。下面从 核心作用、工作流程、能力细节、应用场景 展开解释:
一、核心价值:解放 CPU,专攻 “体力活”
传统数据传输中,CPU 得亲自当 “搬运工”:比如硬盘读数据到内存,CPU 要一步步发指令、搬数据,期间没法做其他事(比如运行程序、处理界面)。
DMA 控制器的出现,就是为了 替代 CPU 干 “搬运数据” 的体力活:让外设(如硬盘、网卡)和内存直接传数据,CPU 只需 “下令启动”,之后就能去处理更重要的任务(比如计算、逻辑判断)。
二、工作流程:像 “快递员” 一样自主干活
DMA 控制器的工作可以拆解为 5 步协作流程(以 “硬盘→内存传数据” 为例):
- 外设发请求:硬盘准备好数据,向 DMA 发信号(
DREQ
,DMA 请求),说 “我要传数据到内存”。 - DMA 问 CPU 要总线:DMA 向 CPU 发信号(
HOLD
,总线请求),说 “请把总线控制权让给我”。 - CPU 让出总线:CPU 处理完当前操作后,回信号(
HLDA
,总线响应),暂时放弃地址、数据、控制总线的使用权。 - DMA 自主搬运数据:
- DMA 通过地址寄存器,知道数据要写到内存的哪个位置(比如
0x1234
); - 通过计数寄存器,知道要传多少字节(比如 1000 字节);
- 每次传 1 个数据,地址自动 + 1,计数自动 - 1,直到传完。
- DMA 通过地址寄存器,知道数据要写到内存的哪个位置(比如
- 通知 CPU 收尾:数据传完后,DMA 发中断信号告诉 CPU “我做完了”,CPU 收回总线,处理后续工作(比如检查数据、继续运行程序)。
- 地址阶段:主设备(CPU)把目标地址放到地址总线(告诉从设备 “读哪里”)。
- 控制阶段:主设备把操作命令(如 “读”)放到控制总线(告诉从设备 “做什么”)。
- 数据阶段:从设备(内存)把数据放到数据总线,主设备读取(或主设备发数据,从设备写入)。
- 结束阶段:总线释放,准备下一次传输。
优点 | 缺点 |
---|---|
控制逻辑简单(不用协商时间,按钟做事) | 从设备必须 “跟上节奏”,否则出错(比如低速设备扛不住) |
传输速度快(时钟节拍可以设计得很快) | 灵活性差(主、从设备必须兼容同一时钟,不能适配不同速度设备) |
再看 “一次数据传送”:周期内的核心动作
在一个总线周期里,发送方和接收方会完成一次 “单向或双向” 的数据交换:
- 读操作:从设备(内存)是发送方,主设备(CPU)是接收方(内存→CPU 传数据)。
- 写操作:主设备(CPU)是发送方,从设备(内存)是接收方(CPU→内存传数据)。
无论读还是写,一个总线周期只完成 “一次” 数据传送(比如读 1 个字节,或写 1 个字节)。如果要传 100 个字节,需要 100 个总线周期。
二、分离式通信的 “解法”:把传输拆成两个独立子周期
分离式通信将一次完整传输拆成两个 “子周期”,让总线在 “从设备准备数据” 时,能被其他设备临时借用:
子周期 1:主模块占用总线(发命令)
- 谁用总线:主模块(如 CPU)申请总线,获得使用权。
- 做什么:只发地址和命令(比如 “读内存地址 0x1234”),然后立即释放总线(不用等从模块准备数据)。
- 效果:主模块用完就放,总线马上可以被其他设备(如网卡、DMA)占用,干别的活。
子周期 2:从模块占用总线(发数据)
- 谁用总线:从模块(如硬盘)准备好数据后,主动申请总线,获得使用权。
- 做什么:把数据 + 地址确认(告诉主模块 “我要发的数据对应你之前的命令”)放到总线上,完成传输。
- 效果:从模块准备好才占用总线,避免空等,而且总线在两个子周期之间被充分复用。