目录
输入/输出系统实现主机与外设之间的数据传送,可以采用不同的I/O方式,各自方式在代价、性能、解决问题的出发点等方面各不相同。常用的I/O方式有程序查询、程序中断、DMA、和通道。
2.1程序查询方式
又称程序轮询方式,程序直接控制方式。
程序查询方式的独占查询的主要特点是CPU有“踏步”等待现象,CPU启动I/O后需要花全部时间轮询I/O设备状态,在一段时间内只能和一台外设交换信息,效率大大降低。
此外,在定时查询时不满足CPU不断轮询状态寄存器,I/O设备准备阶段时CPU可以进行其他工作。但两者本质都是一种低效的“查询”方式。
故程序查询方式可以分为:
- 独占查询:CPU所有时钟周期都在查询I/O状态。CPU和I/O串行工作。
- 定时查询:在保证数据不丢失的情况下,每隔一段时间CPU就查询一次I/O状态。查询的间隔内CPU可以执行其他程序。
无论哪种直接程序传送(程序查询方式),都不能胜任快速外部设备(如磁盘),因为即便CPU所有的时间都用来查询I/O状态也会丢失数据。
2.2程序中断方式
又称中断驱动方式。
2.2.1程序中断相关概念
程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
中断源是指请求CPU中断的设备或事件,不同中断源向CPU发出中断请求的时间是随机的。
中断请求是指中断源向CPU发送中断请求信号。
CPU响应中断的条件:
- 中断源有中断请求。
- CPU允许中断及开中断(异常和不可屏蔽中断不受此限制)
- 一条指令执行周期结束(异常不受此限制),且没有更紧迫的任务。
关中断(不允许中断,用于实现原子操作) 开中断(允许中断) 。
非屏蔽中断:关中断时也会被响应(如掉电)可屏蔽中断:关中断时不会被响应。
中断响应判优:多个中断源同时提出请求时通过中断判优(排队优先)逻辑响应一个中断源。
- 硬件实现:硬件排队器,响应优先级在硬件线路上是固定的,不便改动。
- 软件实现:查询程序。
2.2.2中断隐指令及中断服务程序
中断隐指令:硬件一系列的自动操作。
- 关中断。保存断点操作和中断服务程序中保护现场操作(CPU主要寄存器内容)的必要步骤。
- 保存断点。即保存PC中的内容到内核堆栈或指定单元。
- 引出中断服务程序。有两种方法:软件查询法和硬件向量法。
硬件向量法
中断服务程序:
- 保护现场。
- 中断服务(设备服务):主体部分,如通过程序控制需打印的字符代码送入连接打印机的I/O接口中。
- 恢复现场:通过出栈指令或取数指令把之前保存的信息送回寄存器中。
- 中断返回:通过中断返回指令回到原程序断点处。
下图为单重中断流程:
2.2.3单重中断和多重中断
若CPU暂停现行的中断服务程序,转去处理新的中断请求,则这种中断为多重中断,又称中断嵌套。
中断屏蔽技术
中断屏蔽技术主要用于多重中断,CPU要具备多重中断的功能,需满足下列条件:
- 在中断服务程序中提前设置开中断指令。
- 优先级别高的中断源有权中断优先级别低的中断源。
屏蔽字
每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。
中断处理优先级是指多重中断的实际优先级处理次序,可以利用中断屏蔽技术调整。
回归主题:第二种I/O方式为:程序中断方式
红色部分是中断响应耗时,进行中断隐指令。
蓝紫部分是中断服务程序耗时,蓝色部分是不包括恢复现场和中断返回,CPU写/读出数据缓冲寄存器的数据后就可以让外设继续工作。紫色部分是恢复现场和中断返回耗时。
CPU读或写一次数据缓冲寄存器需要的时间是红+蓝。
CPU完成一次该中断任务耗时是红+蓝+紫。
2.3DMA方式
即直接存储器存取(Direct Memory Access)
2.3.1DMA基本概念
DMA方式基本思想:
DMA(Direct Memory Access:直接内存存取)是一种可以大大减轻CPU工作量的数据转移方式。
CPU有转移数据、计算、控制程序转移等很多功能,但其实转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,再加上一些控制转移的部件就可以完成数据的拷贝。
DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作--计算、控制等。
特点:I/O与主机并行工作,程序和传送并行工作。
基于以上思想,DMA控制器(特殊I/O接口)应该是如下DMA接口与主存有直接通路的结构:
但是一些题中会有以下描述:
在X86架构系统中,当DMA运作时(假设我们从磁盘拷贝一个文件到U盘),DMA实际上会占用系统总线周期中的一部分时间。也就是说,在DMA未开启前,系统总线可能完全被CPU使用;当DMA开启后,系统总线要为DMA分配一定的时间,以保证DMA和CPU同时运作。那么显然,DMA会降低CPU的运行速度。
在STM32控制器中,芯片采用Cortex-M3架构,总线结构有了很大的优化,DMA占用另外的总线,并不会与CPU的系统总线发生冲突。也就是说,DMA的使用不会影响CPU的运行速度。
DMA控制器的组成:
2.3.2DMA传送过程与传送方式
DMA的传送过程:
- 预处理。 CPU完成必要准备工作,CPU首先执行几条I/O指令测试I/O设备状态,向DMA控制器的有关寄存器置初值,设置传送方向,启动该设备等。然后CPU可以继续执行原来的程序。当外存准备好时,I/O设备先DMA控制器发送DMA请求,再由DMA控制器向CPU发送总线请求(有时将这两个过程统称为DMA请求),用于传输数据。
- 数据传送。完全由DMA控制,即完全是硬件实现。
- 后处理。DMA控制器向CPU发送中断请求,CPU执行中断服务程序做DMA结束处理,包括校验送入主存的数据是否正确、测试传送过程中是否出错(错误则转诊断程序)及决定是否继续使用DMA传送其他数据等。
注:DMA请求表示要使用总线传送一个字的数据到主存,DMA中断请求表示一个块已经传送完毕了。
以下为个人理解,书上对此描述很模糊。
上述DMA传送过程可以描述DMAC使用系统总线或DMA总线两种情况。
不同的是DMAC使用系统总线时CPU将不能用系统总线,很多程序受到影响; 使用DMA总线时CPU只是不能访存主存,可以利用系统总线做其他事情。
当主存和DMA中有DMA总线时引出DMA传送方式
注:因为如果没有DMA总线DMA请求后占用系统总线连接主存,不存在冲突。
注:上图右下角准确的是让出主存使用权,因为CPU和DMA不能同时访问主存, CPU通过主存总线,DMA通过DMA总线。
2.4通道方式
- 通道程序是放在内存中的,即CPU和通道共享内存。
- 实现复杂,需要专门的通道硬件支持。
- 一个通道可以控制多个I/O接口,一个I/O接口可以控制多个设备。
字节多路通道是一种简单的共享通道,主要用于连接控制大量低速或中速外设。
数据选择通道又称高速通道。
数组多路通道在实际系统中得到较多的应用。
字节多路通道和数组多路通道都是多路通道,数组多路通道与设备之间进行数据传送的基本单位是数据块,而字节多路通道与设备之间进行数据传送的基本单位则是字节。
2.4 补充
对比:
程序查询方式和程序中断方式数据的传送一次是一个字;DMA方式数据的传送一次是一个块或多个块。通道方式每次读/写一组块。注:这里多个块必须是连续的。
其他
- 总线仲裁方式一般是指I/O设备争用总线的判优方式,而中断判优方式一般是指I/O设备争用CPU处理的判优方式。
- 中断向量地址(又称向量地址、中断类型号)是程序入口地址的地址,中断向量是程序入口的地址。向量中断(又称硬件向量法)是引出中断服务程序的一种硬件方法。
- 浮点数运算下溢,直接当作机器零处理,不引发中断;浮点数上溢,表示超过了浮点数的表示范围,属于内中断。
- DMA和CPU使用主存如果是通过周期窃取(挪用)方式,存取周期后让出主存使用权。假如每次DMA传送的数据块为512B,数据缓冲寄存器大小为32bit,DMA每传送一个数据字后就让出主存使用权给CPU;当通过停止CPU访存方式时传送完一个数据块后才会让出主存使用权。
- CPU会在每个存储周期结束后检查是否有DMA请求,来源王道312_06;
- CPU在每个机器周期结束后就可以响应DMA请求,来源王道314_24;
- DMA响应发生在一个总线事务完成后,来自408真题。
5.6.7不理解,虽然结合下面的已知信息来看这三条确实能同时做到,反正还有其他选项,并不影响实际做题。以后想通了再来补充。
百度百科
- 存储器进行一次“读”或“写”操作所需的时间称为存储器的访问时间(或读写时间),而连续启动两次独立的“读”或“写”操作(如连续的两次“读”操作)所需的最短时间,称为存取周期(或存储周期)。内存的存取周期一般为60ns-120ns。
- 机器周期也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个时钟周期组成 。
- 时钟周期是同步电路中时钟基础频率的倒数。它以时间动作重复的最小周期来度量,度量单位采用时间单位。在单个时钟周期内(现代非嵌入式微处理器的这个时间一般都短于1纳秒)
之前的个人总结
- 机器周期(CPU周期):常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。 完成一个基本操作(如取指、存储器读、存储器写)所需要的时间称为机器周期,每个机器周期内的节拍数可以不等。注意这里取指时间不等于取指周期,一个指令的取指周期可能包括两次取指(当指令字长等于存储字长的2倍时),只有当指令字长等于存储字长时,取指周期等于机器周期。
- 总线周期:指一次总线操作所需的时间,包括申请、寻址、传输、结束阶段。通常由若干时钟周期构成。但也可能由一个时钟周期构成或者一个时钟周期包含多个总线周期(上升沿和下降沿)。