第六章 总线和输入 / 输出系统

第六章 总线和输入 / 输出系统

6.1 总线

  1. 总线的基本概念
  2. 总线的组成及性能指标
  3. 总线事务和定时

6.2 I/O 接口(I/O 控制器)

  1. I/O 接口的功能和基本结构
  2. I/O 端口及其编址

6.3 I/O 方式

  1. 程序查询方式
  2. 程序中断方式
    • 中断的基本概念
    • 中断响应过程
    • 中断处理过程
    • 多重中断和中断屏蔽的概念
  3. DMA 方式
    • DMA 控制器的组成
    • DMA 传送过程

6.1.1总线的基本概念:

(一)总线的基本概念
  1. 概念定义
    总线是 连接计算机多个部件的信息传输线路,作为各部件共享的传输介质(多个部件共用同一组线路通信,而非各自拉线)。

  2. 核心特点

    • ① 分时性(针对 “发送信息” 的规则)
      同一时刻,总线 只允许一个部件向总线发送信息(若多个部件同时发,电信号会干扰,导致数据错误);多个部件需轮流占用总线发送数据(“分时” 发送)。

    • ② 共享性(针对 “接收信息” 的规则)
      总线连接多个部件,部件间通过总线分时共享传输能力;当一个部件向总线发送信息时,连接在总线上的 多个部件可同时接收相同信息(无需排队等待,提升传输效率)。

类比理解(辅助记忆):

  • 分时发送 → 话筒只能一人拿(同一时间 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 传输方式

本质是串行总线×16是 “16 组串行通道并行”,而非数据位的并行传输

 PCIe×16:16 根 “串行水管” 同时开工

  • 类比:同时开 16 根串行水管,每根都 “一滴接一滴流水”(每个通道内部仍是串行),但 16 根一起流。
  • 关键区别
    • 不是把 “1 杯水” 拆成 16 滴,让 16 根水管各传 1 滴(这是数据位并行);
    • 而是 16 根水管各自独立流 “整杯水”(每个通道传独立的数据流,或同一数据流的不同部分),但每根水管里的水还是 “一滴接一滴” 流(串行)。

3. 大白话总结

  • ×16 的 “并行”:是 “通道数量的并行”(16 条路同时跑),不是 “数据位的并行”(不是把 1 个数拆成 16 位同时传)。
  • 串行的本质:不管多少通道,每个通道里的数据,都是 “排队传” 的(像单车道堵车,车依次动),而非 “多车道同时发不同车”(并行)。

 总线的性能:

 

 

总线的工作频率:每秒传送多少数据:

 

 

 

 

总线事务和定时

 

 

第二组:非 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 步协作流程(以 “硬盘→内存传数据” 为例):

  1. 外设发请求:硬盘准备好数据,向 DMA 发信号(DREQ,DMA 请求),说 “我要传数据到内存”。
  2. DMA 问 CPU 要总线:DMA 向 CPU 发信号(HOLD,总线请求),说 “请把总线控制权让给我”。
  3. CPU 让出总线:CPU 处理完当前操作后,回信号(HLDA,总线响应),暂时放弃地址、数据、控制总线的使用权。
  4. DMA 自主搬运数据
    • DMA 通过地址寄存器,知道数据要写到内存的哪个位置(比如0x1234);
    • 通过计数寄存器,知道要传多少字节(比如 1000 字节);
    • 每次传 1 个数据,地址自动 + 1,计数自动 - 1,直到传完。
  5. 通知 CPU 收尾:数据传完后,DMA 发中断信号告诉 CPU “我做完了”,CPU 收回总线,处理后续工作(比如检查数据、继续运行程序)。

 

  • 地址阶段:主设备(CPU)把目标地址放到地址总线(告诉从设备 “读哪里”)。
  • 控制阶段:主设备把操作命令(如 “读”)放到控制总线(告诉从设备 “做什么”)。
  • 数据阶段:从设备(内存)把数据放到数据总线,主设备读取(或主设备发数据,从设备写入)。
  • 结束阶段:总线释放,准备下一次传输。

 

 

优点缺点
控制逻辑简单(不用协商时间,按钟做事)从设备必须 “跟上节奏”,否则出错(比如低速设备扛不住)
传输速度快(时钟节拍可以设计得很快)灵活性差(主、从设备必须兼容同一时钟,不能适配不同速度设备)

 再看 “一次数据传送”:周期内的核心动作

在一个总线周期里,发送方和接收方会完成一次 “单向或双向” 的数据交换

  • 读操作:从设备(内存)是发送方,主设备(CPU)是接收方(内存→CPU 传数据)。
  • 写操作:主设备(CPU)是发送方,从设备(内存)是接收方(CPU→内存传数据)。

无论读还是写,一个总线周期只完成 “一次” 数据传送(比如读 1 个字节,或写 1 个字节)。如果要传 100 个字节,需要 100 个总线周期。

 

 

 

二、分离式通信的 “解法”:把传输拆成两个独立子周期

分离式通信将一次完整传输拆成两个 “子周期”,让总线在 “从设备准备数据” 时,能被其他设备临时借用

子周期 1:主模块占用总线(发命令)
  • 谁用总线:主模块(如 CPU)申请总线,获得使用权。
  • 做什么:只发地址和命令(比如 “读内存地址 0x1234”),然后立即释放总线(不用等从模块准备数据)。
  • 效果:主模块用完就放,总线马上可以被其他设备(如网卡、DMA)占用,干别的活。
子周期 2:从模块占用总线(发数据)
  • 谁用总线:从模块(如硬盘)准备好数据后,主动申请总线,获得使用权。
  • 做什么:把数据 + 地址确认(告诉主模块 “我要发的数据对应你之前的命令”)放到总线上,完成传输。
  • 效果:从模块准备好才占用总线,避免空等,而且总线在两个子周期之间被充分复用。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值