计组-7.3 I/O控制方式
7.3 I/O控制方式详解
1.程序查询方式
工作流程
①检查CPU状态寄存器是否busy。
不 busy 后,CPU发送(要打印的)数据到数据缓冲寄存器。
打印机开始工作,同时把状态寄存器设置为busy。
CPU速度比打印机快很多,打印机工作的时候,计算机发送询问,重复第①步
- ==程序查询方式有两种:独占查询。定时查询。==
打印机完成后,发送ready信号,busy位清零。
CPU可以打印 下一个 数据。
所有数据打印完成后,CPU向I/O接口的控制寄存器发送结束命令。
一次传输一个字
例题
从例题中可以看出,程序查询方式对慢速设备没影响,但是对于查询次数多的设备不支持。所以需要别的IO交互方式才行。
特点:CPU原地踏步。
优点:接口设计简单,设备量少。
缺点:费时。

2.程序中断方式
==工作流程==
1.中断请求
- 中断源(io设备)向CPU发送中断请求信号。
- 中断源如何发送请求信号?
- ==中断请求标记触发器==:①每个中断源都有一个,记录中断事件并区分不同的中断源。②“1”表示某个中断源有请求。

- 中断请求标记触发器 VS **==中断触发器==**:中断触发器是CPU内部的。负责开/关中断。一个CPU只有一个中断触发器。
2.中断响应
响应中断的条件:
- 中断源有中断请求。
- CPU开中断
- 一条指令执行阶段完毕(且没有更紧迫的任务)。
中断==响应(优先级)==判优:如果响应了,而且多个请求源,需要根据判优原则响应一个中断源。
- 硬件判优(快):by硬件排队器

- 软件判优(慢):by查询程序

- 判优优先级固定设置:

3.中断处理⭐
==①中断隐指令==
- 保存==PC旧值==和==PSW==,让PC指向中断服务程序的第一条指令。
- 由==硬件==自动完成,而不是软件,为了保证可靠和安全。
- ①==关中断==
- ②保存断点(存入堆栈或者指定单元)
- ③查询中断源入口/==引出中断服务程序(让PC指向新值)==⭐
- 软件查询法:(非向量中断)
- 硬件中断向量法(指针的指针):
- (排队器输出)→中断向量地址形成部件→==向量地址(内容是====中断向量)== → ==(中断向量的内容就是) 入口地址==。

- (排队器输出)→中断向量地址形成部件→==向量地址(内容是====中断向量)== → ==(中断向量的内容就是) 入口地址==。
==②执行中断服务程序==
- ①==保护现场(by软件完成,通用寄存器)==,【和==屏蔽字==】 注:【多次中断用】
- 【==开中断==】
- ②执行中断服务(不同设备不同操作)【】
- 【关中断】
- ③恢复现场和屏蔽字。
- 【开中断】
- ④中断返回指令。==【中断服务程序的最后指令是中断返回,而不是无条件转移!中断返回的不同之处还得返回寄存器的内容!】==
- 注:中断服务程序在内核态下进行,而不是用户态(不然也就无法实现多重中断了)
断点和现场的对比:
- 断点的保存由==硬件==实现。
- 现场可被指令访问,通过==软件==(中断服务程序)实现保存。
多重中断(中断嵌套)
多次中断:执行中断服务程序时,可相应新的请求。
==中断优先级==,包括 ==响应优先级== 和 ==处理优先级==。
- ==响应==优先级==不可动态改变==⭐
- ==处理==优先级可以==利用中断屏蔽技术动态调整。==(决定多个中断服务程序执行完的⭐次序,因为是决定本中断是否能被打断。)
中断屏蔽技术
每一个中断源都有一个屏蔽触发器,对应一个屏蔽字
**==屏蔽字==**:可以屏蔽某些中断(eg低速设备屏蔽高速设备的中断,自己不被打扰)。
- ==“1”越多,优先级越高。==
优点:可以调整多次中断的优先级。
CPU执行程序的轨迹

程序中断方式
1.准备阶段:当IO设备在准备(外部设备)数据的时候,CPU执行现行程序。
2.请求阶段:IO设备准备好后,会给CPU发送中断请求(信号)。
3.响应阶段:CPU执行完当前指令(地址K的指令)后。
- CPU执行中断隐指令:关中断。保存断点。引出中断服务程序(找到入口地址送PC)。
4.执行中断服务程序:
- 保护现场
- 执行IO传送
- 恢复现场
- 返回主程序
5.继续执行:CPU从断点(原程序K+1)继续执行主程序。外设开始准备下一个数据。
==程序中断方式缺点:虽然说CPU不用等待了,但是会被频繁打断(尤其是高速外设)==


小结

3.DMA方式

==工作流程(DMA控制器)==
预处理:
- 请求: 当**==外设==准备好传送数据(如输入数据已准备好或可接收新数据)时,会向DMA控制器==发送DMA请求**==。
- 接管: DMA控制器收到请求后,会向CPU发送**==总线请求==**(希望占用总线)。
- 响应: CPU在当前==总线周期结束后⭐==(若支持,则在**==总线周期/机器周期/总线事务末尾==响应),向DMA控制器发送==总线响应==**信号,并释放总线控制权(CPU暂停访存)。
- 控制: **==DMA控制器接管总线控制权==**,进入DMA操作周期。
数据传送:
- 寻址: DMA控制器将内部地址寄存器中的主存地址送上地址总线,用于定位数据在内存中的位置。
- 计数: 每次传送一个数据字后,DMA控制器会自动修改(递增或递减)主存地址计数器,并递减传送长度计数器。
- 控制: 根据操作类型(DMA读/写),DMA控制器发出I/O读或写信号控制外设,同时发出存储器写或读信号控制内存。==数据直接在外设与内存之间传送,无需经过CPU。⭐==【注:DMA在和主存交互数据时通过==周期窃取==方式,窃取的是存取周期】
后处理:
- 检测: DMA控制器检测到传送长度计数器的值变为零(或外部传送结束信号),表示预定的==数据块==已传送完毕。
- 通知: DMA控制器向CPU发送DMA中断请求信号,通知CPU数据传送已完成。
- 处理: CPU响应中断,执行==中断服务程序==做DMA结束处理。
- 恢复: 中断服务程序返回后,CPU继续执行之前被打断的主程序。

DMA控制器的结构
结构:中断机构。控制/状态逻辑。DMA请求触发器。主存地址计数器。传递长度计数器。数据缓冲寄存器。
三总线结构下的访存冲突
CPU和DMA控制器的访存冲突,如何解决?

a.停止CPU访问主存(DMA接口向CPU发出停止信号,完成了再通知)
b.DMA和CPU交替访存
c.周期挪用(周期窃取)(主存**==存取周期==**)
- IO设备需要访存的时候,挪用一或多个存取周期
三种IO控制方式对比⭐
- ==DMA的数据传送是硬件控制==(即CPU只需进行预处理和后处理)。==中断的数据传送是程序控制==(要有保存和恢复现场)。
- ==DMA的响应,在每个机器周期(总线周期?)结束==均可【取址间址等之后均可】,总线空闲即可响应DMA请求

| 程序查询方式 | 中断方式 | DMA方式 |
|---|---|---|
| CPU与外设==串行==工作,传送与主程序==串行==工作 | CPU与外设==并行==工作,传送与主程序==串行==工作 | CPU与外设==并行==工作,传送与主程序==并行==工作 |
| 一次传输一个字 | 一次传输一个字 | 一次传输**==一个数据块==** |
| 外设准备时间 必须大于等于 中断处理时间 | – | |
| both | 在数据传送的底层,主存地址加1、计数器减1 | |
| 优先级:高于外中断(非屏蔽中断,可屏蔽中断) | ||
| CPU和打印机直接交换数据 | CPU和打印机直接交换数据 | DMA控制器(DMAC)“代理”和打印机交换数据 |
异常和中断小例子
访存缺页(虚拟存储器失效),内部中断。
浮点数上溢:(超过浮点数表示范围)内部中断。
配有通道的计算机,用户程序需要输入输出,引起的中断是:==访管中断==,内中断。
定时器到时,外部中断。
网络数据包到达,外部中断。
cache缺失,no,正常现象。
浮点数下溢:no,当作机器零处理。

