第17讲-输入输出
外围设备
- 输入输出操作通过连接到输入输出模块的各种外部设备完成,这些外部设备提供了在外部环境和计算机系统之间的数据交换,通常被称为外围设备(peripheral device),简称为外设(peripheral)
- 类型
- 人可读设备:适用于与计算机用户通信
- 显示器,打印机
- 机器可读设备:适用于与设备通信
- 磁盘,磁带
- 通信设备:适用于与远程设备通信
- 人可读设备:适用于与计算机用户通信
- 不能把外设直接连接到系统总线上
- 外设种类繁多,操作方法多种多样
- 外设的数据传送速度一般比存储器或处理器的慢得多
- 某些外设的数据传送速度比存储器或处理器要快
- 外设使用的数据格式和字长度通常与处理器不同
I/O模块
通过系统总线或中央交换器和存储器连接;通过专用数据线与一个或多个外设连接。
I/O模块是计算机内部系统和外设之间的桥梁外围设备的接口
- 输入输出模块的接口以控制、状态和数据信号的形式出现
- 与设备相关的控制逻辑控制外设的操作,以响应来自输入输出模块的命令
- 缓冲器用于缓存输入输出模块和外设之间传送的数据
- 缓冲器的大小一般为8 位或16 位
- 缓冲器的大小一般为8 位或16 位
I/O模块的功能
- 处理器通信
- 命令译码:输入输出模块接收来自处理器的命令,这些命令一般作为信号发送到控制总线
- 状态报告:由于外设速度很慢, 所以知道输入 输出模块的状态很重要
- 数据:数据是在处理器和输入输出模块之间经由数据总线来交换的
- 地址识别:输入输出模块必须能识别它所控制的每个外设的唯一地址
- 设备通信
- 通信内容包含命令、状态信息和数据
- 数据缓冲
- 外设的数据传送速度一般比存储器或处理器的慢得多
- 某些外设的数据传送速度比存储器或处理器要快
- 控制和定时
- 处理器会非预期的与一个或几个外设进行通信
- 一些内部资源,如主存和系统总线,是被共享的
- 例如:控制从外设到处理器的数据传送包括以下几个步骤
- 处理器查询输入 输出模块以检验所连接设备的状态
- 输入输出模块返回设备状态
- 如果设备运转并准备就绪,则处理器通过向输入 输出模块发出一条命令 请求数据传送
- 经输入输出模块传送数据到处理器
- 检错
- 检错并把差错信息报告给处理器
- 差错类型
- 设备报告的机械和电路故障
- 传输过程中数据位的变化
- 处理器通信
I/O模块的结构
外部接口
- 接口类型
- 并行接口:多根线连接输入 输出模块和外设,同时传送多位数据
- 串行接口:只有一根线用于传输数据,每次只传输一位数据
- 由于并行接口要求每次同时传送,当传输速度和总线长度增加时,总线的时钟频率会受到限制
- 接口类型
I/O操作技术
- 分类
- 编程式I/O:处理器通过执行程序来直接控制I/O 操作,当处理器发送一条命令到I/O 模块时,它必须等待,直到I/O 操作完成
- 中断驱动式I/O:处理器发送一条I/O 命令后,继续执行其他指令;并且当I/O 模块完成其工作后,才去中断处理器工作
- 直接存储器读取(Direct Memory Access,DMA):I/O 模块与主存直接交换数据,而不需要处理器的干涉
- 编程式I/O
- 当处理器在执行过程中遇到一条与I/O 操作有关的指令时,它通过发送指令到适当的I/O 模块来执行这条指令
- I/O模块将执行所要求的动作,然后在I/O 状态寄存器中设置一些适当的位
- I/O不会中断处理器,因此处理器需要周期性地检查I/O模块的状态,直到发现该操作完成
- I/O 命令:为了执行I/O 操作,处理器发送一个指定具体I/O 模块和外设的地址,并发送一条I/O 命令
- 类型
- 控制命令:激活外设并告诉它要做什么
- 测试命令:测试I/O 模块及其外设相关的各种状态条件
- 读命令:使I/O 模块从外设获得一个数据,把它存入内部缓冲区
- 写命令:使I/O 模块从数据总线获得一个数据,把它传入外设
- 类型
- I/O 指令
- I/O指令很容易映射为I/O 命令, 并且两者之间通常是简单的一一对应关系
- 指令的形式取决于外设寻址的方式
- 编址方式
- 存储器映射式I/O:存储单元和I/O 设备有统一的地址空间,即每一个地址对应一个内存地址或一个IO地址。能使用大的指令系统,可进行更有效的编程。但是I/O设备会占用地址空间。
- 分离式I/O:让总线既有存储器的读线和写线,同时也有输入和输出命令线。命令线指定地址指向内存地址还是IO设备。IO和内存都可以使用全部地址空间。
- I/O指令很容易映射为I/O 命令, 并且两者之间通常是简单的一一对应关系
- 中断驱动式I/O
- 处理器发送一个I/O 命令到模块,然后去处理其它有用的工作
- 当I/O 模块准备和处理器交换数据时,它中断处理器以请求服务
- 处理器执行数据传送,最后恢复它原先的处理工作
- 从I/O 模块的角度来看
- I/O模块接收来自处理器的读命令
- I/O模块从相关的外设中读入数据
- 一旦数据进入I/O 模块的数据寄存器后,该模块通过控制总线给处理器发送中断信号
- I/O模块等待直到处理器请求该数据时为止
- 当处理器有数据请求时,I/O 模块把数据传送到数据总线上,并准备另一个I/O 操作
- 从处理器的角度来看
- 处理器发送一个读命令
- 处理器离开去做其它的事情,并在每个指令周期结束时检查中断
- 当来自I/O 模块的中断出现时,处理器保存当前程序的现场
- 处理器从I/O 模块读取数据字并保存到主存中
- 处理器恢复刚才正在运行的程序的现场,并继续运行原来的程序
- 中断允许和中断禁止
- 响应优先级和处理优先级
- 例子:假设中断系统中有4 个中断源,其响应优先级为L 1 >L 2 >L 3 >L 44,处理优先级为L 1 >L 4 >L 3 >L 2 。如果在主程序执行时同时发生L 1 、L 3 和L 4 中断,并且在处理L 3 中断的过程中发生L 2 中断,写出掩码字和所有中断服务程序的过程。
- 例子:假设中断系统中有4 个中断源,其响应优先级为L 1 >L 2 >L 3 >L 44,处理优先级为L 1 >L 4 >L 3 >L 2 。如果在主程序执行时同时发生L 1 、L 3 和L 4 中断,并且在处理L 3 中断的过程中发生L 2 中断,写出掩码字和所有中断服务程序的过程。
- 设备识别
- 多条中断线:处理器仅仅挑选具有最高优先级的中断线
- 即使有多条中断线可用,每条线上也需要采用其它三种技术中的一种
- 软件轮询:模块的轮询次序就决定了模块的优先级
- 轮询每一个I/O 模块来确定是哪个模块发生的中断
- 菊花链:链接模块次序就决定了模块的优先级
- 所有的I/O 模块共享一条中断请求线,中断应答线采用菊花链穿过这些中断模块
- 独立请求:中断控制器决定
- 特定的中断控制器用于解码和分析优先级
- 多条中断线:处理器仅仅挑选具有最高优先级的中断线
直接存储器存取(DMA)
- 前两种技术的不足
- I/O传送速度受处理器测试和服务设备速度的限制•
- 处理器负责管理I/O 传送,对于每一次I/O 传送,处理器必须执行很多指令
- 直接存储器存取
- 无需经过处理器即可直接访问内存的模块
- 工作流程
- 处理器通过发送以下信息向DMA 模块发出命令:读写、I/O 设备地址、内存中的起始位置、字数
- 处理器继续进行其他工作
- DMA模块将全部数据块,每次一个字,直接将数据传输到存储器或从存储器读出,而无需经过处理器
- 当传输完成时,DMA 模块向处理器发送一个中断信号
- 三种DMA内存访问方式
- CPU 停止法。DMA传输时,由DMA控制器发一个停止信号给CPU,使CPU脱离总线,停止访问主存,直到DMA传送一块数据结束。
- 优点:控制简单
- 缺点:影响CPU,没有充分利用内存
- 适用:高速I/O 设备的块传输
- 周期窃取。DMA传输时,CPU让出一个总线事务周期,让DMA控制器挪用一个主存周期来访问主存,传送完一个数据后立即释放总线。
- I/O设备要求DMA传送时可能遇到两种情况:
(1)此时CPU不需要访内,如CPU正在执行乘法指令。由于乘法指令执行时间较长,此时I/O访内与CPU访内没有冲突,即I/O设备挪用一二个内存周期对CPU执行程序没有任何影响。
(2)I/O设备要求访内时CPU也要求访内,这就产生了访内冲突,在这种情况下I/O设备访内优先,因为I/O访内有时间要求,前一个I/O数据必须在下一个访问请求到来之前存取完毕。显然,在这种情况下I/O 设备挪用一二个内存周期,意味着CPU延缓了对指令的执行,或者更明确地说,在CPU执行访内指令的过程中插入DMA请求,挪用了一二个内存周期。 与停止CPU访内的DMA方法比较,周期挪用的方法既实现了I/O传送,又较好地发挥了内存和CPU的效率,是一种广泛采用的方法。但是I/O设备每一次周期挪用都有申请总线控制权、建立线控制权和归还总线控制权的过程,所以传送一个字对内存来说要占用一个周期,但对DMA控制器来说一般要2—5个内存周期(视逻辑线路的延迟而定)。因此,周期挪用的方法适用于I/O设备读写周期大于内存存储周期的情况。 - 优点:充分利用CPU 和内存,及时响应I/O 请求
- 缺点:DMA 每次都请求总线
- 适用:I/O 周期大于存储周期
- I/O设备要求DMA传送时可能遇到两种情况:
- 交替分时访问。每个存储周期分成两个时间片,一个给CPU,另一个给DMA控制器,止痒子啊每个存储周期内,CPU和DMA控制器都可以访问存储器。
- 假设CPU工作周期为1.2us,内存存取周期小于0.6us,那么一个CPU周期可分为C1和C2两个分周期,其中C1专供DMA控制器访内,C2专供CPU访内。
这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过C1和C2分时制的。CPU和DMA控制器各自有自己的访内地址寄存器、数据寄存器和读/写信号等控制寄存器。在C1周期中,如果DMA控制器有访内请求,可将地址、数据等信号送到总线上。在C2周期中,如CPU有访内请求,同样传送地址、数据等信号。事实上,对于总线,这是用C1,C2控制的一个多路转换器,这种总线控制权的转移几乎不需要什么时间,所以对DMA传送来讲效率是很高的。
这种传送方式又称为“透明的DMA”方式,其来由是这种DMA传送对CPU来说,如同透明的玻璃一般,没有任何感觉或影响。在透明的DMA方式下工作,CPU既不停止主程序的运行,也不进入等待状态,是一种高效率的工作方式。当然,相应的硬件逻辑也就更加复杂。 - 优点:CPU 未停止或等待,DMA 不请求总线
- 缺点:CPU 周期大于存储周期
- 参考文章: DMA方式_百度百科 (baidu.com)
- 假设CPU工作周期为1.2us,内存存取周期小于0.6us,那么一个CPU周期可分为C1和C2两个分周期,其中C1专供DMA控制器访内,C2专供CPU访内。
- CPU 停止法。DMA传输时,由DMA控制器发一个停止信号给CPU,使CPU脱离总线,停止访问主存,直到DMA传送一块数据结束。
DMA配置机制
- 单总线分离DMA
- 所有模块共享相同的系统总线
- DMA模块使用编程式I/O,通过DMA 模块在存储器和I/O 模块之间交换数据
- 便宜但低效
单总线集合的DMA I/O
- DMA逻辑实际上可能是I/O 模块的一部分,也可能是控制一个或多个I/O 模块的单独模块
- 减少总线周期数
- I/O 总线
- 使用I/O 总线将I/O 模块连接到DMA 模块
- 多个I/O 模块共享DMADMA,且易于扩展
- 单总线分离DMA
- 前两种技术的不足
I/O模块的演变
- CPU直接控制外设
- 增加控制器或I/O 模块,CPU 使用编程式I/O,将CPU 与外围设备的细节分离
- 采用中断,CPU 无需花费时间等待外围设备就绪
- I/O模块可通过DMA 直接存取存储器,无需CPU 负责存储器和I/O 模块之间的数据传递
- I/O通道(I/O channel):I/O 模块有自己的处理器,带有专门为I/O 操作定制的指令集
- CPU指示I/O 通道执行存储器中的I/O 指令,只有在执行完成后才会中断CPU
- I/O处理器(I/O processor):I/O 模块有一个局部存储器,I/O 模块成为一个自治的计算机,常用于与交互式终端进行通信
- 只需最少的CPU 参与即可控制大量I/O 设备
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sprooc!
评论