# Lecture17 - 输入输出

image-20221215162138827

# 外围设备(外设) peripheral device

image-20221215162246908

# 为什么不能把外设连接到系统总线上

image-20221215162410451

image-20221215162421591

外设的传送速度过快和过慢都会造成问题

# IO 模块

image-20221215162600197

中间商 IO 模块连接外设和系统总线

IO 模块属于计算机内部系统

外设不属于计算机内部系统

# 外围设备的接口

image-20221215162822444

控制逻辑 —— 是外围设备的大脑,控制外围设备的操作

缓冲器 —— 用于缓存

转换器 —— 将 01 数据转换成如音频等数据

# IO 模块的功能

# 处理器、设备通信

image-20221215163514224

中间商 IO 模块需要和处理器进行通信

也需要和设备进行通信

# 数据缓冲

image-20221215163722989

处理器的速度和外设的速度不是完全匹配的

所以需要在两者之间做一个缓冲

# 控制和定时

image-20221215163924983

# 检错

image-20221215164007590

# IO 模块的结构

image-20221215164039061

下面的图做了 90 度的旋转

CPU 对外部设备的命令:数据线 —— 状态 / 控制寄存器

外设获得的状态和数据也通过数据线的状态控制寄存器返回

CPU 对 IO 模块的控制:控制线

# 外部接口

image-20221215164455676

哪种用的更多?现在主要用的是串行接口

当使用并行的时候,需要保持信息同步,比较困难。如何防止?一、不要走太远,线的长度不太长;二、两个操作之间的时间间隔长一点,频率不要太高

image-20221215164900238

# IO 操作技术

image-20221215165000866

  • 编程式 IO:通过程序处理
  • 中断驱动式 IO:根据 IO 发起的中断
  • 直接存储器读取:不需要处理器

编程式 IO 不需要中断,其他需要

DMA 不需要处理器干涉,其他需要

# 编程式 IO

image-20221215165329903

CPU 始终参与 IO,不能分身干别的事情。参与率为 100%。不断读取状态信息,不断读进字,并且写入存储器。

# IO 命令

image-20221215165626309

命令:IO 控制外设

# IO 指令

image-20221215165838054

指令:IO 自己的指令?

编址方式:

  1. 存储器映射式:缺点是会占用一些存储单元
  2. 分离式

# 中断驱动式 IO

image-20221215170021274

和编程式 IO 的区别在于:可以去处理其他工作

IO 模块等到消息之后,再告诉 CPU 去处理

image-20221215170215789

image-20221215170316581

image-20221215170351320

为什么会有中断允许和中断禁止?能够一下子保存完现场吗?不能,搬家的时候不能被打断,此时禁止中断,搬回来恢复现场的时候,也需要禁止中断。

image-20221215171211567

响应优先级 —— 更快地抢到位置,小伙子

处理优先级 —— 最后能够获得这个位置,老太太

响应和处理优先级都很高,说明是个腿脚麻利的老太太

中断只会识别比自己处理优先级更高的中断,小伙子要给老太太让座

有好多中断,先筛选出处理优先级比自己高的,优先响应响应优先级最高的,最后拿到的是处理优先级最高的

image-20221215171758513

掩码字表示谁可以屏蔽谁,表格中,行能否屏蔽列的(根据处理优先级)

image-20221215172349168

image-20221215172430080

# 直接存储器存取 DMA

image-20221215172458552

image-20221215172714445

CPU 和 DMA 都需要访问内存,DMA 比 CPU 优先,DMA 一般连接的是高速外设,如果不写入存储,会被冲突掉。

# CPU 停止法

image-20221215173043201

高速 IO 设备一般不会持续传入数据,DMA 占用期间,内存没有被有效利用

# 周期窃取

image-20221215173247844

# 交替分时访问

image-20221215173407670

周期的固定时间给 CPU,周期的后半段给 DMA

# DMA 配置机制:单总线分离 DMA

image-20221215173502792

# DMA 配置机制:单总线集合的 DMA-IO

image-20221215173553642

# DMA 配置机制:IO 总线

image-20221215173648304

# DMA 示例:硬盘存取

image-20221215173739716

CPU 仍然有比较高的参与度

# IO 模块的演变

image-20221215174200623