轮询方式
希望 CPU 也能掌管 IO 的资源
CPU 不断询问外设的状态,直到外设准备好就开始进行数据传送
- 初始化:控制寄存器
- 状态检查(错误、忙):状态、控制寄存器
- 传送处理:数据寄存器
- 错误处理
- 查看状态寄存器外设有无错误
- 数据检查错误(校验)CPU 参与
繁忙率是百分百,设备是独占的
程序中断方式
认为 CPU 应该专注于计算,对输入输出放权,对外设能够单独处理数据
外设的准备过程不需要 CPU 干预,只是汇报
CPU 运行两类程序:
- 数据传输:中断服务子程序(用 RETI 恢复 PSW,CS:IP)
- 主程序
中断指的是中断主程序取执行中断服务子程序
外设能够发起请求、CPU 能够接受并响应
请求和响应之间因为是中断,所以一定会有间隔至少一条指令。之后中断转子程序
从优先级的角度来看,主程序的优先级最低,中断服务主程序之间有优先顺序(可变的)
程序的切换(中断响应过程)是由硬件完成的:执行中断隐指令。
在这个过程中不允许新的中断
- 保护现场,call
- PC → EPC
- PSWR(程序状态字) → 堆栈或 WPSWR
- 确定 call 的是哪个子程序,有硬件和软件两种实现方式(确定入口)
- x86 下通过硬件按优先级识别中断,得到中断类型号,有中断向量在内存中,保存 cs 和 ip。CPU 增加两个引脚:INT 接收请求,INTA 应答
- MIPS 下通过软件识别,通过设置异常状态寄存器(Oause),使用一个统一的异常处理程序(入口 0x8000 0180)
DMA 方式
CPU 不需要干预传送过程,交给 DMA 控制器 直接存储器存取(Direct Memory Access)
中断方式: 对 I/O 请求响应慢。每传送一个数据都要等待外设的中断请求,并增加许多中断响应和中断处理前、后的附加开销(保护断点、现场等),不能及时响应 I/O 请求。 数据传送速度慢。数据传送由软件完成(由 CPU 执行相应的中断服务程序来完成),速度慢 。
DMA 方式适用场合: 高速设备(如:磁盘、光盘等) 成批数据交换,且数据间间隔时间短,一旦启动,数据连续读写
每当高速设备准备好数据,就进行一次“DMA 请求”,DMA 控制器接受到 DMA 请求后,申请总线使用权。当申请成功的时候,将缓冲区中的数据成批的搬移到内存中。 DMA 控制器的总线使用优先级比 CPU 高(类似于中断)(决策问题)外设传送失败的代价比 CPU 运算失败的代价更高
与中断控制方式结合使用:
- DMA传送前,“寻道”“旋转”等操作结束时,通过“中断”告知 CPU
- 在 DMA 控制器控制总线进行数据传送时,CPU 执行其他程序
- DMA传送结束时,要通过“DMA 结束中断”告知 CPU 来执行检查工作
由于 DMA 接口和 CPU 共享主存,所以可能出现两者争用主存的现象,为使两者协调使用主存,DMA 通常采用以下三种方式进行数据传送。
- CPU 停止法 (成组传送) DMA 传输时,CPU 脱离总线,停止访问主存,直到 DMA 传送一块数据结束。
- 周期挪用 (窃取) 法 (单字传送) DMA 传输时,CPU 让出一个总线事务周期,由 DMA 控制总线来访问主存,传送完一个数据后立即释放总线。
- 交替分时访问法 每个存储周期分成两个时间片,一个给 CPU,一个给 DMA,这样在每个存储周期内,CPU 和 DMA 都可访问存储器。
采用 DMA 方式传送数据时,每传送一个数据就要用一个存储周期
功能:
- 请求。能接收外设发来的“DMA 请求”信号,并能向 CPU 发“总线请求”信号。
- 响应。当 CPU 发出“总线响应”信号响应请求后,能接管对总线的控制。
- 修改主存地址。能在地址线上给出主存地址,并自动修改主存地址。
- 识别传送方向。能识别传送方向以在控制线上给出正确的读写控制信息。
- 确定传送数据个数。
- 能发出 DMA 结束信号。引起一次 DMA 中断,进行数据校验等一些后处理。
DMA 传输过程
- 当外设准备好数据,或准备好接收数据时,发“选通”信号,使数据送数据缓冲寄存器,同时 DMA 请求触发器置“1”。
- DMA 请求触发器向控制/状态端口发“Ready”信号,同时向 DMA 控制器发“DMA 请求”信号。
- DMA 控制器向 CPU 发“总线请求”信号。
- CPU 完成现行机器周期后,响应 DMA 请求,发出“总线响应”信号。DMA 控制器接受到该信号后,发出“DMA 响应”信号,使 DMA 请求触发器复位。此时,CPU 浮动它的总线,让出总线控制权,由 DMA 控制器控制总线。
- DMA 控制器给出内存地址,并在其读/写线上发出“读”或“写”命令,随后在数据总线上给出数据。
- 根据读写命令,将数据总线上的数据写入存储器中,或写入数据端口,并进行主存地址增量,计数值减 1,
- 若采用“CPU 停止法”,则循环第 6 步,直到计数值为“0”。
- 若采用“周期挪用法”,则释放总线(下次数据传送时再按过程 (1) 到 (6) 进行)。
DMA 和中断方式的区别
- DMA 方式下数据传送由硬件 (DMA 控制器) 完成;中断方式下,数据传送由软件(CPU 执行中断服务程序)完成。
- DMA 请求的是对存储器访问,也即对总线控制权的请求,没有中止现行程序的必要;而中断请求要处理器转去执行中断服务程序,因此要中止现行程序,保存断点、现场等。
- 中断除了能完成外设和主机的数据交换,还能处理异常事件;而 DMA 方式下不能处理异常事件。
- 中断响应在一个指令周期结束后;而 DMA 响应是在一个总线周期后。
- DMA 方式用于高速设备;而中断方式用于低、慢速设备。
- DMA 方式下,外设与 CPU 并行度高;而中断方式下,外设与 CPU 并行度低。(体现在数据传送时的并行性)
接口类型
- 选择型:在物理上连接多个设备;在逻辑上只允许连接一个设备
- 多路型:在物理上连接多个设备;在逻辑上允许连接多个设备同时工作 通道传输模式
因此现代的架构为多 PU 架构(多处理单元),超异构架构,CPU 不再是唯一的核心了,而只是只会执行指令的计算
今几年出现以数据为驱动
常用的 I/O 编址方式有两种:I/O 与内存统一编址和 I/O 独立编址。特点:I/O 与内存统一编址方式的 I/O 地址采用与主存单元地址完全一样的格式,I/O 设备和主存占用同一个地址空间,cPU 可像访问主存一样访问 I/O 设备,不需要安排专门的 I/O 指令。I/O 独立编址方式时机器为 I/O 设备专门安排一套完全不同于主存地址格式的地址编码,此时 I/O 地址与主存地址是两个独立的空间,cPU 需要通过专门的 I/O 指令来访问 I/O 地址空间。
CPU 与 I/O 之间传递信息常采用三种联络方式:直接控制(立即响应)、同步、异步。
使用场合: 直接控制(轮询)适用于结构及简单、速度极慢的 I/O 设备,CPU 直接控制外设处于某种状态而无需联络信号。 同步方式(中断)采用统一的时标进行联络,适用于 CPU 与 I/O 速度差不大,近距离传送场合 异步方式采用应答机制进行联络,适用于 CPU 与 I/O 速度差较大,远距离传送的场合。
程序直接控制方式:也称查询方式,采用该方式,数据在 CPU 和外设间的传送完全靠计算机程序控制,CPU 的操作和外围设备操作同步,硬件结构简单,但由于外部设备动作慢,浪费 CPU 时间多,系统效率低。 程序中断方式:外部设备准备就绪后中断程序通知 CPU,在 CPU 相应 I/O 设备的中断请求后,在暂停现行程序的执行,转为 I/O 设备服务可明显提高 CPU 的利用率,在一定程度上实现了主机和 I/O 设备的并行工作,但硬件结构复杂,服务程序的开销大。 DMA 方式与中断方式一样,实现主机和 I/O 设备并行工作,由于 DMA 方式直接依靠硬件实现贮存于 I/O 设备之间的数据传送,传送期间不需要 CPU 程序干预,CPU 可继续执行原来的程序,因此,CPU 利用率和系统效率比中断方式更高,但 DMA 方式的硬件结构更为复杂
程序查询方式:主要用于 CPU 不太忙且传送速度不高的情况下。 中断方式:主要用于 CPU 的任务比较忙的情况下,尤其适合实时控制和紧急事件的处理。 DMA 方式(直接存储器存取方式):主要用于高速外设进行大批量数据传送场合。