26考研 | 王道 | 计算机组成原理 | 七、输入输出系统

在这里插入图片描述

7.1 输入输出系统及I/O控制方式

IO指令格式与其他通用指令格式不同

image-20250611224116359

在这里插入图片描述

I/O接口:又称I/O控制器、设备控制器、负责协调主机与外部设备之间的数据传输。(I/O控制器就是一块芯片,常被集成在主板上)

I/O控制方式简介

在这里插入图片描述

image-20250611223318729

DMA控制方式

在这里插入图片描述

在这里插入图片描述

通道控制方式

在这里插入图片描述

在这里插入图片描述

I/O系统基本组成

在这里插入图片描述

在配有通道的计算机系统中,用户需要输入输出时,引起的中断是 访管中断 (因为这时调用的是系统提供的接口,要去请求操作系统服务,此时会使得访管中断)

外部设备(考纲没有,做个了解)

image-20250611225339773

image-20250611224236797

image-20250611224333595

image-20250611224628760

image-20250611224802343

image-20250611224858067

image-20250611224918438

image-20250611225015835

image-20250611225130503

image-20250611225245617

image-20250611225309690

7.2 I/O接口

磁盘驱动器是磁头、磁盘和读写电路组成的,也就是常说的磁盘本身,不是I/O接口

image-20250611231640530

在这里插入图片描述

功能:选址功能、传送命令功能、传送数据功能、反映I/O设备工作状态的功能

在这里插入图片描述

image-20250611230336177

I/O接口的工作原理

在这里插入图片描述

IO接口和设备之间不会传送中断请求信号,中断请求信号是IO接口通过中断控制器发给CPU的

设备通过改变其在I/O接口中的状态来“表达”中断需求,而不是直接“发送”一个中断请求信号给接口。I/O接口内部有一套状态寄存器(或一组状态标志触发器),用于实时反映所连接设备的工作状况。I/O接口内部有控制逻辑,它会持续监控这些状态标志。

状态寄存器和控制寄存器可以合用一个寄存器

接口与端口

在这里插入图片描述

统一编址 V.S. 独立编址

在这里插入图片描述
在这里插入图片描述

I/O接口的类型

在这里插入图片描述

磁盘驱动器向盘片磁道记录数据时采用串行方式写入

USB就是串行接口

程序员进行系统调用访问设备使用的是逻辑地址

7.3 I/O方式

image-20250612204700773

image-20250612204729513

1.在各种I/O方式中,这三种方式的特点如下所示:

image-20250612204153280

image-20250612204203665

2.DMA优先级高于程序中断的优先级

3.程序中断方式需要保护现场,DMA方式在传输过程中不需要保护现场

4.程序中断过程是由硬件(称中断隐指令)和中断服务程序共同完成的

5.中断I/O方式下,CPU执行中断服务程序时会执行相应的I/O指令,实现CPU的通用寄存器和外设接口中的寄存器之间的直接数据交换

6.中断请求的是CPU时间,要求CPU执行程序来处理发生的相关事件

7.CPU对外部中断的响应不可能发生在一条指令的执行过程中

四种I/O方式特点总结

I/O 控制方式 特点(CPU vs 外设) 特点(数据传送 vs 主程序) 理由
1. 程序查询方式 CPU与外设串行工作 传送与主程序串行工作 CPU主动地、不断地查询外设状态,在等待和传送数据时,CPU一直被占用,无法执行主程序,效率最低。
2. 程序中断方式 CPU与外设并行工作 传送与主程序串行工作 CPU启动外设后即可继续执行主程序,实现并行。但数据传送时需CPU执行中断服务程序,会中断主程序,故传送与主程序串行。
3. DMA 方式 CPU与外设并行工作 传送与主程序并行工作 在DMA控制器控制下,外设与内存直接交换数据。整个数据块传送期间,CPU只需在开头和结尾介入,可以继续执行主程序,效率高。
4. 通道控制方式 CPU与外设并行工作 传送与主程序并行工作 通道是一个专用于I/O的处理器,能执行通道程序管理多个外设。CPU发出启动命令后即可脱管,通道独立负责所有I/O操作,并行度最高。

传送”特指数据在I/O设备与内存(主存)之间交换的过程。简单来说,判断传送与主程序并行还是串行,就看数据传送时CPU能不能继续干自己的活(执行主程序)。如果能,就是并行;如果不能,CPU必须停下来去处理传送,就是串行。

四种IO方式是否可以使用内存地址

/O 控制方式 IO控制器/通道是否可使用内存地址 数据交换路径 数据交换单位 CPU干预程度
程序查询方式 ❌ 否 设备 → CPU → 内存 字/字节 高(全程参与)
中断方式 ❌ 否 设备 → CPU → 内存 字/字节 中(每字中断)
DMA 方式 ✅ 是(通过MAR) 设备 ⇨ 内存(直接) 数据块 低(块首尾干预)
通道方式 ✅ 是(自主决定) 设备 ⇨ 内存(直接) 一组数据块(通道程序) 极低(程序级干预)
核心区别详解

表格清晰地展示了演进过程:目标是不断减少CPU的干预,让数据交换更高效。其关键就在于谁能掌握内存地址

  • 程序查询与中断方式:CPU 是全权管家

    在这两种早期方式中,I/O端口只处理数据,不涉及内存地址的交换。CPU是唯一的“大脑”,它负责从I/O端口的数据寄存器中读取一个字节或字,然后再由它写入到指定的内存地址中。整个过程就像需要一个中间人(CPU)来回搬运数据,效率较低。

  • DMA 方式:有了专业的“搬运工”

    DMA方式的关键改进是引入了DMA控制器。这个控制器是一个专用硬件,它内部包含一个内存地址寄存器(MAR)。CPU在启动传输前,会告诉DMA控制器数据应该放在内存的什么位置(设置MAR)。之后,DMA控制器就能直接控制总线,在设备和内存之间完成整块数据的传输,无需CPU介入。因此,是DMA控制器在使用内存地址。

  • 通道方式:升级为“I/O项目经理”

    通道可以理解为一个功能更强大的、专门处理I/O的处理器(IOP)。CPU不再告诉它具体细节,而是下达一个“任务指令”(启动通道程序)。通道会自己从内存中取出通道程序并执行,这个程序包含了各种I/O指令,通道能自主决定数据在内存中的存放位置 。因此,通道自己就可以使用内存地址,并能控制多台设备与内存交换数据,能力比DMA更强。

1. 程序查询方式

image-20250612110237802

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

image-20250612110132247

2. 中断的作用和原理

中断向量的地址是存放中断向量的,中断向量是中断服务程序的人入口地址,相当于指针的指针了

用户程序要输入输出时引起的中断是访管中断(申请系统调用直接引起的中断),而不是IO中断,I/O中断是I/O操作完成后由硬件(如通道)产生的中断,不是用户程序请求时的直接中断。

1.CPU响应中断的三个条件:中断源有中断请求、CPU允许中断以及开中断、一条指令执行完毕并且没有更紧迫的任务

(开中断时,CPU只要检测到中断请求就进行中断响应,不管多重还是单重)

2.中断服务程序一般是操作系统模块

3.中断向量方法可提高中断源的识别速度

4.中断向量地址是内存中存放中断向量的地址,也就是中断服务程序入口地址的地址,也就是说中断向量其实是中断服务程序入口地址

5.中断服务程序最后的指令是中断返回指令,不是无条件转移指令。不同的地方在于,不仅要修改PC值,还要恢复现场

6.中断响应的优先级不是由中断屏蔽字决定的,在中断响应阶段之前,CPU根据中断屏蔽字将所有未被屏蔽的中断请求送到硬件电路(或中断查询程序)进行中断响应判优

7.在中断响应周期,由中断隐指令将允许中断触发器置0,表示关中断

image-20250612204041119

8.进入中断响应阶段时,CPU一定处于开中断状态(进入响应阶段,说明有请求并且CPU也响应了,那说明还可以收到请求,那说明就是开中断状态)

9.中断优先级包括响应优先级和处理优先级,响应优先级由硬件线路或者查询程序的查询顺序确定,不可动态改变,处理优先级由中断屏蔽字确定,可灵活改变

10.在关中断的条件下,内中断和非屏蔽中断仍然可以响应

中断的基本概念

在这里插入图片描述

中断请求的分类

在这里插入图片描述

image-20250612191704547

中断请求标记

在这里插入图片描述

中断判优实现

在这里插入图片描述

中断判优-优先级设置

中断处理过程

在这里插入图片描述

image-20250612111943824

在这里插入图片描述

其实就是排队器选择一个中断后,把结果输入到中断向量地址形成部件,然后映射成向量地址

根据向量地址,我们就可以找到入口地址了

中断请求标志寄存器和中断向量地址形成部件的区别和联系

特性 中断请求标记寄存器 中断向量地址形成部件
主要功能 记录和标识哪个中断源提出了请求 根据被响应的中断源生成向量地址
工作阶段 中断请求和判优阶段 中断响应阶段(在中断隐指令中发挥作用)
内容形式 一组触发器状态(如INTR1=1, INTR2=0) 一个具体的地址码(如12H)
最终目的 告知CPU“有哪些中断发生,谁优先级高” 引导CPU“去哪里执行”对应的中断服务程序
实现方式 可集中设在CPU内,也可分散在各中断源接口中24 可分散在各接口电路,也可设置在CPU内2

简单来说,中断请求标记寄存器像是中断系统的**“前台登记处”,负责记录谁需要服务;而中断向量地址形成部件则是“导航仪”**,负责在决定服务谁之后,立刻生成一条准确的路线图(向量地址),引导CPU快速找到处理该中断的服务程序。它们一前一后,共同确保了中断响应过程的准确和高效。

在这里插入图片描述

image-20250612191807149

image-20250612191819144

image-20250612191843747

向量中断和非向量中断

对比维度 向量中断 非向量中断
响应速度 。硬件直接定位,实时性高。 。需要软件查询,引入额外延迟。
硬件复杂度 。需要中断控制器等硬件支持向量表。 。硬件实现简单,成本较低。
优先级处理 方便。硬件可内置优先级仲裁电路。 复杂。优先级判断通常依赖软件查询顺序。
灵活性 相对固定,由硬件设计决定。 。通过修改查询软件即可调整中断处理逻辑。
image-20251010112617889

下图中硬件完成的部分就是中断隐指令,是中断响应部分。而中断程序完成的是中断处理部分

image-20250612191905370

image-20250612191922073

在这里插入图片描述

一个完整的中断处理过程通常如下:(简略版

  1. 中断请求:外部设备(如键盘、硬盘)或内部异常事件使中断请求信号有效。
  2. 中断检测这是您问题的关键。CPU在每个指令周期的末尾,都会自动检查中断请求引脚上是否有信号。这个“检测”是硬件层面的、不间断的物理行为。 也就是说,无论中断是否被屏蔽,只要请求信号在物理线上存在,CPU就能“检测”或“感知”到它的存在。
  3. 中断判优:如果同时有多个中断请求,CPU或中断控制器(如8259A)会根据优先级进行裁决。
  4. 中断响应:这是最关键的分水岭。CPU在“检测”到请求后,不会立即处理,而是先要判断是否“响应”。这个判断依据就是中断是否被屏蔽以及CPU当前的状态
    • 如果中断未被屏蔽(例如,中断屏蔽字对应位为0,且CPU处于开中断状态),则CPU进入“响应”阶段。
    • 如果中断被屏蔽(例如,通过中断屏蔽字禁止了该中断,或CPU处于关中断状态),则CPU不会响应这个请求。它会忽略这个请求,继续执行当前程序。但那个中断请求信号本身可能依然存在,CPU在下一个指令周期末尾依然会“检测”到它,然后再次判断是否“响应”。
  5. 中断处理:只有在“响应”之后,CPU才会保存现场、跳转到中断服务程序去执行。

详细版:

1.中断响应阶段(硬件自动完成)——-其实就是中断隐指令
  • 中断请求
    • 操作:中断源(外设/定时器/异常)通过物理引脚(如INTR)或内部逻辑发送请求信号,并保持信号直至响应
    • 硬件支持:中断控制器(如APIC)管理多源请求的优先级
  • 中断响应
    • 操作:CPU在当前指令的最后一个时钟周期扫描中断引脚。若中断使能(IF=1)且请求有效,发送应答信号(INTA)
    • 关键限制:长指令(如X86 REP MOVS)需执行完毕才响应
  • 关闭中断
    • 操作:硬件自动清除标志寄存器(EFLAGS)的IF位,屏蔽后续可屏蔽中断,防止现场保护时被抢占
    • 例外:不可屏蔽中断(NMI)仍可触发
  • 保护断点
    • 操作:CPU自动将程序计数器(PC/EIP) 和程序状态字(PSW/EFLAGS) 压入内核栈
    • 意义:确保中断返回后能继续执行原指令流。
  • 中断源识别
    • 操作:通过中断向量号(如0x80为系统调用)查询中断描述符表(IDT),定位中断服务程序入口地址
    • 多源处理:共享中断(如PCI设备)需软件二次查询中断控制器状态
2. 中断处理阶段(操作系统/驱动主导)
  • 保护现场
    • 操作:中断服务程序(ISR)开头用PUSH指令保存通用寄存器(EAX/EBX等)内容到栈中,防止主程序状态被破坏
    • 编程责任:由开发者编写保存代码,非硬件自动完成。
  • 执行中断服务程序(ISP)
    • 上半部(Top Half):
      • 立即处理关键操作:读取外设数据寄存器、清除中断标志
      • 特点:不可阻塞、不可嵌套(关中断状态下执行)。
    • 下半部(Bottom Half):
      • 延迟处理耗时操作:网络包处理、磁盘I/O调度
      • 实现机制:
        • softirq:高优先级,多CPU并行执行
        • tasklet:单CPU串行执行
        • workqueue:可睡眠的线程上下文
  • 恢复现场
    • 操作:ISP末尾用POP指令从栈中恢复寄存器原值,与保护现场成对出现
3. 中断返回阶段
  • 恢复断点
    • 操作:执行IRET指令时,硬件自动从栈中弹出PC和PSW值,装载回寄存器
    • 原子性:恢复操作不可分割,防止状态不一致。
  • 开中断
    • 操作:IRET指令隐式恢复标志寄存器(含IF位),重新允许响应中断
  • 返回原程序
    • 操作:CPU从断点地址继续执行原指令流,中断处理结束

3. 多重中断

image-20250612113158057

在这里插入图片描述

中断屏蔽技术

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4. 程序中断方式

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5. DMA方式

1.DMA全名是直接存储器存取

2.DMA请求不是DMA控制器发出的,是外部设备发出的

image-20250612210246331

4.CPU响应DMA请求的条件是当前机器周期执行完

image-20250612204321199

image-20250612204432469

对比项 DMA 请求 中断请求
响应条件 当前机器周期执行完 一条指令执行完毕
响应时机 可在取指、间址、执行等任一机器周期结束时 必须在指令执行周期结束时
对CPU影响 极小。仅占用总线,不干扰CPU内部状态(如寄存器、程序计数器)。 较大。需要CPU暂停当前程序,转去执行中断服务程序,需保存和恢复现场。
设计目标 效率。为了满足高速外设实时数据传输的需求,避免数据丢失。 功能。处理异步事件,允许CPU与外设并行工作。

什么是“机器周期”? 机器周期是CPU完成一个基本操作(如从内存取指、读写数据)所需的时间。一条指令的执行通常由若干个机器周期组成

5.只有具有DMA接口的设备才能产生DMA请求。否则即使是当前设备是高速设备或者需要与主机批量交换数据,也不能产生DMA请求

6.磁盘寻道结束会通过中断通知cpu寻道结束,旋转结束也会中断,来通知cpu旋转结束

7.DMA是通过硬件实现的,不属于程序控制方式

8.每启动一次DMA传送,外设和主机之间完成一个数据块的数据传送

在这里插入图片描述

image-20250612160304420

程序中断方式每次传输一次数据就得中断一次。

而DMA方式(并且没有DMA总线的情况下)每传输一次数据只需要占用一下系统总线(就是中间空下的那一个存取周期),若CPU此时没有访存操作,即不需要用到系统总线的操作,那么CPU可以执行其他程序,如果CPU有访存操作,即需要用到系统总线的操作,那么会等到DMA控制器用完以后,CPU再用,那就是中间的那个空下的存取周期

如果是三总线结构,即有DMA总线时,都不需要占用系统总线,只需要考虑和CPU是否会同时读写主存的问题,就是后面提到的三种策略

DMA控制器只和内存进行数据交换,就算是CPU要给外设数据,也是先放到主存,再从主存给到DMA控制器。

在这里插入图片描述

向CPU报告是发出一个中断信号

在这里插入图片描述

image-20250612155737536

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.CPU此时不访存,那就给DMA用

2.CPU正在访问主存,等CPU访问完了把总线控制权交给DMA

3.IO和CPU两者同时请求访存,那先给DMA用,CPU暂时放弃总线占有权

周期挪用优点:既实现了IO传送,又较好地发挥了主存与CPU的效率

缺点:每挪用一个主存周期,DMA接口都要申请、建立和归还总线控制权

在这里插入图片描述

在这里插入图片描述