# 外设
- 外设种类很多
- 速度比 CPU 和 RAM 慢
- 外设不直接与系统总线连接
- 需要 IO 模块
# IO 模块
- 与 CPU 和内存的接口
- 与一个或多个外设的接口
- I/O 模块化架构旨在提供控制与外部世界交互的系统方法,并为操作系统提供信息以有效管理 I/O 活动
# 外设模块图
# IO 模块
# IO 模块的功能
- Control & Timing
- CPU ~ I/O Communication
- Device ~I/O Communication
- Memory ~ I/O communication
- Data Buffering
- Error Detection
# IO 步骤
- cpu 检查 io 模块的和设备状态
- IO 模块返回状态
- 如果 ready,cpu 请求数据传输
- IO 模块从设备获取数据
- IO 模块将信息传递给 CPU
- 可编程 IO
- 中断驱动 IO
- DMA/Channel
# I/O Communication
- 命令译码
- 数据交换
- 外部数据通过 local bus 传递给 IO buffer
- IO buffer 通过系统总线传递给 CPU/memory
- 状态报告
- 地址识别
# data buffer
- IO 模块重要功能
- 使外设适应 CPU 或主存储器的速度
- CPU/DRAM <–> I/O buffer
- I/O buffer <–> peripherals
# 检错
包括硬件故障和软件故障
# IO 模块结构
# IO 模块决策
支持多个或单个设别
将设备属性隐藏或揭示给 CPU
控制设备功能 / 离开 CPU
# 编程式 IO
- With programmed I/O, data are exchanged between the CPU and I/O modular
- CPU has direct control over I/O in a program
Sensing status
Read/write commands
Transferring data - CPU waits for I/O module to complete operation when it issues an I/O command Wastes CPU time
# 执行过程
-
CPU 遇到一条 I/O 指令
-
它通过向 I/O 模块发送一个命令来执行它,并等待 I/O 模块就绪
-
I/O 模块执行命令,然后在 I/O 状态寄存器中设置适当的位
-
CPU 定期检查状态位,直到它发现操作完成
# IO commands
- CPU 发送地址
- Identifies module & device ( if >1 per module
- CPU 发送四种命令
- control,test,read/write
# IO 设备的地址
- 在编程的 I / O 下,数据传输非常像内存访问(CPU 视角)
- 每个设备都有唯一标识符
- CPU 命令包含标识符(地址)
# IO mapping
- 存储器映射式 memory-mapped
设备和内存共享地址空间
I/O 看起来就像存储器 read/write
没有针对 I/O 的特别命令
- 分离式 isolated
单独的地址空间
需要 I/O 或存储器选择线
有 I/O 特殊命令:指令集不会太多
# 总结
- 优点
简单、处理器完全在控制中 - 缺点
轮询开销可能会消耗大量 CPU 时间 - 解决方案
使用异常机制来帮助 I/O。 I/O 就绪时中断程序,数据传输完成后返回
# Interrupt Driven I/O Basic Operation
CPU 发出读取命令,然后执行其他操作
I/O 模块从外设获取数据,而 CPU 执行其他工作
I/O 模块中断中央处理器
中央处理器请求数据
I/O 模块通过总线传输数据
最后,CPU 恢复以前的工作
# CPU viewpoint
- 发出读取命令
- 做其他工作
- 在每个指令周期结束时检查中断
- 如果中断:
保存上下文(寄存器)
进程中断
获取数据和存储
还原上下文 - 继续以前的工作
# I/O module viewpoint
从 CPU 接收读取命令
检测外设的状态
从外设读取数据,将其放入寄存器
向 CPU 发出中断信号
等到 CPU 请求其数据
将数据放在数据总线上
# 处理中断
- 多条中断线
每个模块的不同生产线,限制设备数量 - 软件轮询
- CPU 通过中断服务子例程依次询问每个模块命令 + I/O 模块地址
读取每个 I/O 模块中包含的可寻址状态寄存器
CPU 分支到设备服务例程 - 慢(耗时)
- CPU 通过中断服务子例程依次询问每个模块命令 + I/O 模块地址
- 菊花链或硬件轮询总线
所有 I/O 模块共享一个公共中断请求行
一旦 CPU 检测到中断,中断确认就会沿着链向下发送
模块负责在总线上放置矢量(地址,id)
CPU 使用矢量指向适当的设备服务例程
称为向量中断 - 仲裁(矢量)
模块必须先声明总线,然后才能引发中断
CPU 检测到中断,通过中断确认线响应。
I/O 模块在数据总线上放置矢量
例如 PCI 和 SCSI
# 多中断处理
对于多条线路,每条中断线都有一个优先级
优先级较高的行可能会中断优先级较低的行
使用软件轮询时,模块轮询的顺序决定了其优先级
使用菊花,雏菊上模块的顺序决定了它们的优先级
# DMA
# 概念
中央处理器外部
总线上的附加模块(硬件)
DMA 控制器接管 CPU 进行 I/O
将数据块传入或传出内存,无需 CPU 干预
事实上,DMA 也是一个 I/O 模块
在公共汽车上充当激射器
内存系统就像从属系统
管理字节字转换
优先级:DMA > CPU
# CPU 和 DMA 之间的三种数据传输模式:
- 块传输模式(垄断模式)
整个数据块以一个连续的序列传输
如果 DMA 传输数据,CPU 将禁用一段时间,直到 DMA 释放总线
用于将程序或数据文件加载到内存中 - 周期窃取模式
DMA 仅在 CPU 不需要总线或强制 CPU 暂时挂起操作时使用总线
DMA 传输一字数据,然后释放总线
DMA 交错指令和数据传输 - 透明模式(备用模式)
DMA 和 CPU 按除数时间使用总线多路复用
需要最多时间,但效率最高
# DMA 结构
# DMA 操作
- 预处理:CPU 告诉 DMA 控制器
读 / 写
设备地址
数据内存块起始地址
要传输的数据量
CPU 继续进行其他工作 - 数据传输:DMA 控制器处理传输(逐字)
- 后处理:DMA 控制器完成后发送中断
# DMA 传输周期窃取
- DMA 控制器接管总线一个周期
- 传输一个字的数据
- 不是中断
CPU 不切换上下文 - CPU 在访问总线之前挂起
即在操作数或数据获取或数据写入之前 - 降低 CPU 速度,但不如 CPU 进行传输
# DMA 三种结构
# I/O Channels
I/O 通道是一个 I/O 模块,具有自己的处理器,可以执行 I/O 程序
I/O 程序位于主内存中
I/O 通道能够通过执行 I/O 程序来控制整个 I/O 操作
CPU 和内存←→通道←→IO 模块←→外围设备
事实上,I/O 通道代表了 DMA 概念的扩展。
# IO 通道的功能
从中央处理器接收命令
从内存加载 I / O 程序,然后解码每个指令并将命令发送到设备
缓冲、控制和传输数据,提供传输路径
报告设备状态或中断
# 工作原理
主 CPU 发送 I/O 命令并等待通道和设备准备就绪
通道数
设备数量
频道节目录入
数据大小
主控 CPU 启动通道并返回主程序
通道执行 I/O 程序以在内存和设备之间传输数据
数据传输完成后,中断 CPU
# I/O 通道的类型
信道容量 / 数据传输速率
每单位通道时间传输的最大数据
选择器通道
在任何时候,只选择一个设备来传输数据
高速设备
# 多路复用器通道
- 字节多路复用器通道
设备之间的循环
对于设备,仅传输一个字节的数据
用于低速设备 - 块多路复用器通道
设备之间的循环
对于设备,传输的 K 字节数据
# I/O 功能的演变
- CPU 直接控制外设
- 添加了控制或 I/O 模块
编程 I/O - 中断驱动的 I/O
- DMA
设备–内存 - I/O 通道
I/O 处理器,无本地内存 - I/O 处理器
I/O 处理器 + 本地内存
# 连接设备
- 点对点
I/O 模块和外部设备之间的专用线路
例如键盘、打印机、调制解调器等。 - 点到多点
外部总线
外部大容量存储
多媒体设备(光盘、视频、音频)
FireWire & InfiniBand
# 串行或并行
打印机、鼠标、键盘等
磁盘、磁带等
# 从 I/O 模块到外设的写入操作
I/O 模块发送控制信号,请求发送数据的权限
外设确认请求
I/O 模块传输数据
外设确认收到数据
# 小型计算机系统接口 (SCSI)
用于 CD-ROM 驱动器、音频设备、外部大容量存储设备的标准接口
并行接口
8、16、32 位数据线
菊花链式本地总线,连接到 PCI
设备是独立的
设备可以相互通信以及主机
# firewire
高性能串行总线,带简单连接器,单端口上最多 63 个设备
菊花链或树结构
热插拔,自动配置
快
成本低,易于实施
也用于数码相机、录像机和电视
# firewire 3 层协议
- 物理的
传输介质、电气和信号特性
数据速率从 25 到 400Mbps
仲裁:优先权 - 链接
数据包中的数据传输
两种传输类型:
异步
等时的 - 交互
请求 - 响应协议
# 词汇
-
Cycle stealing: 周期窃取
-
Interrupt: 中断
-
Isolated I/O: 分离式 I/O
-
Memory-mapped I/O: 存储映射式 I/O
-
Multiplexor channel: 多路转换通道
-
Parallel I/O: 并行器 I/O
-
Peripheral device : 外围设备
-
Selector channel: 选择通道
# keypoint
Functions of I/O Module?
I/O module structure
Input Output Modes
DMA &channel
SCSI
Firewire