2. I/O 接口
I/O接口是主机和外设之间的交接界面,通过接口可以实现主机和外设之间的信息交换。
2.1 I/O接口的功能
- 进行地址译码和设备选择
- 实现主机和外设的通信联络控制
- 实现数据缓冲
- 信号格式的转换
- 传送控制命令和状态信息
2.2 I/O接口的基本结构
I/O接口在主机侧通过I/O总线与内存、CPU相连。
数据缓冲寄存器用与暂存与CPU或内存之间传送的数据信息。
状态寄存器用于记录接口和设备的状态信息。
控制寄存器用来保存CPU对外设的控制信息。
状态寄存器和控制寄存器在方向上相反,在访问时间上错开,因此将他们合二为一。
下图为I/O接口的通用结构:
注意:!!!!!!!!!!!!!!!!
- I/O接口的数据线传送的是读/写数据、状态信息、控制信息和中断类型号。
- 地址线传送的是要访问I/O接口的寄存器的地址。
- 控制线传送的是读/写控制信号来确认是读寄存器还是写寄存器。此外控制线传送的是读写控制信号和响应信号、仲裁信号和握手信号。
I/O接口中的I/O控制逻辑还要对控制寄存器的命令字进行译码,并将译码得到的控制信号通过外设控制逻辑送到外设,同时将数据发送到外设或从外设接收数据到数据缓冲器。此外其还具有收集外设状态到状态寄存器的功能。
I/O指令:对于数据缓冲寄存器,状态/控制寄存器的访问操作。只能在操作系统内核的底层I/O软件种使用,是一种特权指令。(计算机指令系统的一部分,由CPU执行)
I/O指令不直接控制I/O数据的传送,它只负责启动、停止I/O的过程、查询通道和I/O设备的状态以及控制通道进行某些操作(来源于百度百科)
2.3 I/O接口的类型
按数据传送方式:并行接口和串行接口
按主机访问I/O设备的控制方式:程序查询接口、中断接口、DMA接口(下文详解)
按功能选择的灵活性:可编程接口和不可编程接口
2.4 I/O端口及其编址
I/O端口是指I/O接口电路可被CPU直接访问的寄存器,I/O端口要想被CPU访问就必须对各个端口进行编址,每个端口进行编址,而对I/O端口的编址方式有与存储器独立编址和统一编址两种方式
1. 独立编址
也叫I/O映射方式。独立编址对所有I/O端口单独编址。I/O端口的地址空间与主存地址空间是两个独立的地址空间。因此需要有专门的I/O指令区分是哪个地址空间。(相同的地址表示不同的地址空间)
2. 统一编址
统一编址也称存储器映射方式,是指把主存地址空间分出一部分给I/O端口进行编址,I/O端口和主存单元在统一地址空间的不同分段。根据地址范围判断访问的是I/O端口还是主存单元。(无需I/O指令)
3. I/O方式
1. 程序查询方式
信息交换的控制直接由CPU执行程序实现。程序查询方式设置一个数据缓冲器和一个设备状态器
1)程序查询方式的工作流程
- CPU执行初始化程序,并预设置传送装置
- 向I/O接口发出命令字,启动I/O设备
- 从外设接口读取状态信息
- CPU周期或持续的查询设备状态,直到外设准备就绪
- 传送一次数据
- 修改地址和计数器参数
- 判断传送是否结束,并未结束转到第3步,直到计数器为0
优点:接口设计简单,设备数少
缺点:CPU在信息传输过程中花费很多时间来用于查询和等待,使用独占查询则在一段时间中只能和一台外设交换信息,效率很低。
根据查询方式的不同,程序查询方式可分为如下两类:
- 独占查询:一旦设备被启动,CPU就一直持续查询接口状态。(100%)
- 定时查询:CPU周期查询接口状态,每次等待条件满足才进行一个数据的传送。(某些事件段)
2)程序中断方式
程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
工作流程:
①中断请求
中断源是请求CPU的设备或事件,一台计算机允许有多个中断源,每个中断源向CPU发出中断请求是随机的。为记录中断事件不同的中断源,中断系统需对每个中断源设置中断请求标记触发器。
注意:!!!!!!!!!!!!可屏蔽中断和不可屏蔽中断
INTR线发出的是可屏蔽中断,NMI线发出的不可屏蔽中断。可屏中断的优先级最低,在关中断中不被响应。不可屏蔽中断被用于处理紧急和重要的事件,关中断模式下也响应。
②中断响应判优
中断响应优先级是指CPU响应中断请求的先后顺序,通过硬件排队器实现。一般来说
- 不可屏蔽中断 > 内部异常 > 可屏蔽中断
- 在内部异常中,硬件故障> 软件中断
- DMA中断设备 > I/O设备的中断请求
- 在I/O传送类请求中断中,高速设备> 低速设备
- 输入 > 输出
③CPU响应的条件
- 中断源有中断请求
- CPU允许中断以及开中断
- 一条指令执行完毕
注意:!!!!!!!
CPU对于外部中断的响应总是在指令结束 (指令周期中的中断周期)
④中断响应过程
CPU响应中断后,经过某些操作,转去执行中断服务程序。这些操作是由硬件直接实现的,我们将它称为中断隐指令。
中断隐指令并不是指令系统的一条真正的指令,只是一种虚拟的说法,本质上是硬件的一系列自动操作。
注:采用硬件方法保护并更新PC的内容,而不由软件完成,这样可以避免因为软件保护和恢复PC内容而造成的时间开销和错误风险,1提高中断处理的正确性和效率。
i.关中断
CPU响应中断后,首先要保护程序的断点和信息,在保护断点和现场中,CPU不能响应更高级中断源的中断请求。
ii.保存断点
为保证中断程序执行完后能正确的返回原来的程序,必须将原程序的断点保存在栈中或特定寄存器中,异常和中断的差别,异常指令通常并没有执行成功,异常处理后重新执行,所以其断点式当前指令的地址,中断的断点式下一条指令的地址。
iii.引出中断服务程序
识别中断源,将对应的服务程序入口送入PC。有两个方式识别中断源:硬件向量法和软件查询法
⑤中断向量
中断识别分为向量中断和非向量中断两类,每个中断源都有一个唯一的类型号,每个中断类型号对应一个中断服务程序,每个中断服务程序都有一个入口地址,即中断向量,CPU找到入口地址。把系统中全部中断向量集中存放到存储器的某个区域内,这个存放中断向量的存储区就被称为中断向量表。
注意!!!!!:中断服务程序可以理解为一段服务,是事先编写好的一段程序,一般属于操作系统模块。
⑥中断处理过程
- 关中断
- 保存断点
- 中断服务程序寻址
- 保存现场和屏蔽字(其中包括了通用寄存器的保护)
- 开中断(允许更高级的中断打断)
- 执行中断程序
- 关中断
- 恢复现场和屏蔽字
- 开中断
- 中断返回
1~3是中断隐指令,硬件自动完成;4~9由中断服务程序完成。单重中断去掉5和7。
注意:!!!!!!!!!!!!!!!
现场和断点,这两类信息都不可以被中断服务程序破坏。现场信息用指令可以直接访问,通常在中断服务程序中通过指令把他们保存道栈中(软件决定);断点信息由cpu在中断响应时自动保存到栈或指定的寄存器中(硬件实现)。
3)多重中断和中断屏蔽技术
CPU具备多重中断的功能,必须满足下列条件
- 在中断服务程序中提前设置开中断指令
- 优先级高的中断源有权中断优先级低的中断源
中断优先级是指多重中断的实际优先级处理次序,可以利用中断屏蔽技术动态调整,从而可以灵活地调整中断服务程序的优先级,使中断处理更加灵活,中断源有一个屏蔽触发器(MASK)1表示屏蔽中断源的请求,0表示可以正常请求,所有屏蔽触发器组合在一起构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。
3)DMA方式
DMA方式是一种完全由硬件进行成组信息传送的控制方式,它具有程序中断的优点,CPU与外设并行工作。DMA在外设与内存开辟了一条“直接数据通路”,信息传送不再经过CPU。也叫直接存储器存取方式。
注意:!!!!!!
DMA可以在每个机器周期结束只要CPU不占用总线就可响应。
①DMA方式的特点
主存和DMA接口之间有一条直接数据通路。
由于DMA方式传送数据不需要经过CPU,因此不必中断现行程序,I/O与主机并行工作,程序和传送并行工作。
DMA方式具有下列特点:
- 它使主存与CPU的固定联系脱钩,主存既可被CPU访问,又可被外设访问。
- 在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现。
- 主存中要开辟专用缓冲区,及时供给和接收外设的数据。
- DMA传送速度快,CPU和外设并行工作,提高了系统效率。
- DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理。
②DMA控制器
CPU向DMA控制器指明要输入还是输出;要传送多少个数据;数据在主存、外设中的地址。
工作流程:
- 接受外设发出的DMA请求,并向CPU发出总线请求。
- CPU响应此总线请求,发出总线响应信号,接管总线控制权,进入DMA操作周期。
- 确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数。
- 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作。
- 向CPU报告DMA操作的结束。
③DMA控制器的组成
主存地址计数器(AR):存放要交换数据的主存地址。在传送前,其保存的是传送数据的主存起始地址;每传送一个字,地址寄存器的内容就加1,直至该批数据传送完毕。
传送长度计数器(WC):记录传送数据的总长度。在传送前,其记录的是该批数据的总字数;每传送一个字,计数器就减1,直至计数器为0,表示该批数据传送完毕。
数据缓冲寄存器:暂存每次传送的数据。通常,DMA接口与主存之间的传送单位为字,而DMA与设备之间的传送单位可能为字节或位。
DMA请求触发器:每当I/O设备准备好数据后,发出一个控制信号,使DMA请求触发器置位。
“控制/状态”逻辑:用于指定传送方向,修改传送参数,并对DMA请求信号、CPU响应信号进行协调和同步。
中断机构:当一批数据传送完毕后触发中断机构,向CPU提出中断请求。
④DMA传送过程
预处理:CPU完成寄存器初值设置等准备工作。
数据传送:CPU继续执行主程序,DMA控制器完成数据传送。
后处理:CPU执行中断服务程序做DMA结束处理。
⑤DMA传送方式
主存和DMA控制器之间有一条数据通路,因此主存和I/O设备之间交换信息时,不通过CPU。但当I/O设备和CPU同时访问主存时,可能发生冲突,为了有效地使用主存,DMA控制器与CPU通常采用以下3种方法使用主存。
i.停止CPU访问主存
控制简单,CPU处于不工作状态或保持状态,未充分发挥CPU对主存的利用率。
ii.DMA与CPU交替访存
这种方式适用于CPU的工作周期比主存存取周期长的情况。例如,若CPU的工作周期是1.2us,主存的存取周期小于0.6us,则可将一个CPU周期分为C1和C2两个周期,其中C1专供DMA访存,C2专供CPU访存。
不需要总线使用权的申请、建立和归还过程,硬件逻辑更为复杂。
iii.周期挪用(周期窃取)
由于I/O访存的优先级高于CPU访存(I/O不立即访存就可能丢失数据),因此由I/O设备挪用一个存取周期,传送完一个数据字后立即释放总线。它是一种单字传送方式。
DMA 访问主存有三种可能:1.CPU 此时不访存(不冲突)2.CPU 正在访存(存取周期结束让出总线)3.CPU 与DMA 同时请求访存(I/O访存优先)
既实现了I/O传送,又较好地发挥了主存与CPU的效率。但是每挪用一个主存周期,DMA接口都要申请、建立和归还总线控制权。
⑥DMA方式与中断方式
注意:!!!!!!!!!!!!
关于CPU在开中断时检测到中断请求就进行中断响应,我的理解是检测中断请求是在每个指令周期快结束的中断周期处,只要由有中断请求就会检测到,接着就直接进入中断。
关于中断我觉得王道讲这个题目的老师举得例子特别的好:中断就类似于上课,这个过程一般是一直进行下去的。上课中,当你想上厕所时,就会请示老师,接着就去上厕所,这就是故障;上课中你听不懂,自己就会胡思乱想,这就是陷入;上课时,当中暑了,就必须终止上课,这就是终止;上课时,有人打电话,上课不接,等到下课时再回拨,这就是可屏蔽中断(中介直接不回应,父母电话回拨);当上课时,教室停电了,无法上课,这就是不可屏蔽中断(其实我觉得地震例子更好)。