17 输入输出

图片来源:南京大学软件学院COA课程PPT

©author:zzb

17 输入输出

image-20211222144030233

image-20211222144607958

外设提供了外部环境与计算机系统之间的数据交换

  • 人可读设备

  • 机器可读设备

  • 通信设备

image-20211222163028529

image-20211222163205466

I/O模块

image-20211222163232088

I/O模块属于计算机系统,但外设是不属于的,通过I/O模块这一中介来沟通计算机系统和其他的各种外设

外围设备接口

image-20211222163613673

状态信息是指外设的状态,如打印机会有多种不同的状态

转换器是负责将计算机内的01信号转换成外部的如音频信号等,同时也要把外部的信号如音频信号转换成内部的01信号

功能

image-20211222164149549

image-20211222164248293

image-20211222164401606

image-20211222164451234

结构

image-20211222164524243

控制线传输的是对I/O模块的控制信息

而上面的状态/控制模块传输的是CPU对外设的控制指令,如打印等,同时由于CPU传输给外设的控制信息和外设传输回来的状态信息是不会同时出现的,因此可以复用一个寄存器

外部接口

image-20211222165008723

  • 并行接口

  • 串行接口

总线上的数据都是多位同时传输的。

但对于外部的数据传输,并行传送要求上面每一根线的数据能同时到达。如何实现同时到达:

  1. 减少走的距离(距离长了,不同速度的差异会放大):那么数据传输线不能太长

  2. 两批数据之间的传输间隔增大:那么数据传输的频率会降低

因此外部的数据传输入大多采用串行接口,虽然一次只传输一位但可以以很高的频率传输,同时可以传输得非常远。

image-20211222165634136

I/O操作技术

image-20211222171452996

这里的不需要处理器干涉是指数据交换的过程不需要处理器的干涉,但对于I/O的整个过程,一定是需要处理器的参与的(事实上,没有什么是处理器不管的)

编程式I/O

image-20211222171755899

数据先传输到CPU,再由CPU来把数据写入主存中

CPU始终在参与整个I/O过程,要判断I/O设备的状态是否为就绪

I/O命令

image-20211222172128415

命令是对I/O设备的

I/O指令

image-20211222172212631

指令是对CPU的,需要CPU去执行的指令

编址方式:

  • 存储器映射式I/O:即把I/O设备也当作一个地址,和其他存储单元地址一样统一在一起,访问这个地址就是去调用I/O设备,可以方便的编程。但会占用存储单元的地址空间

  • 分离式I/O:总线上有专门的输入输出线,不与存储器的线共用

中断驱动式I/O

image-20211222172705302

中断驱动式解决的是在等待就绪时所消耗的时间(但读取数据并写入内存的时间是两种模式都必要的)

等待外设的状态交给I/O模块去做了,当得到状态时就发起一个中断,告诉CPU,CPU处理中断,即执行数据的传送,完成后再恢复中断前的指令执行

image-20211222173126368

image-20211222173354244

中断允许和禁止

image-20211222173458206

响应了中断后就会禁止中断,因为此时要保存现场,现场信息不能一次就保存完,涉及多条指令,需要多个指令周期,在这期间,是不允许又有新的中断请求的,避免出错

同理中断处理完要恢复现场时,也要禁止中断

而在中断处理过程中,是允许中断的,如果此时有新的中断,那么也可以响应中断,但不是必须,要考虑中断的优先级

响应/处理优先级

image-20211222173920550

在有多个中断时,会首先去响应响应优先级最高的,但最后能被处理的中断是处理优先级最高的

在同时来的一批中断中,CPU只会看到处理优先级(不是响应优先级)比当前高的中断对相同或者低优先级的视而不见),在这些高的中断中,处理器会首先去响应响应优先级高的,但最后能拿到处理权限的是处理优先级最高的

image-20211222175024998

掩码字/屏蔽字是根据处理优先级看这个中断能够屏蔽哪些中断,1表示能屏蔽,这一行的中断能屏蔽哪些列的中断(行屏蔽列

因此,从处理优先级的角度,主程序的优先级是最低的,否则中断就没有意义了(有些中断得不到响应)

先禁止中断,保存现场,为L3的处理做好准备。接下来就是处理中断,先中断允许,正准备去处理L3,但此时发现了L4的中断,那么又要保存现场,进而处理L4,处理完L4,就应当把L3的现场恢复,从而去执行L3的处理

而在其他如L1、L3、L2的中断处理中,因为之前保存的是主程序的现场,所以要恢复主程序的现场,因此此时正要执行主程序的指令,但中断判断时,发现又有中断,因此不执行主程序而是去响应中断

可以用栈来理解,从哪里来,到哪里去

设备识别

image-20211222180749094

分配优先级

image-20211222180903441

直接存储器存取

image-20211222192851958

在前两种方式中,数据都需要经过CPU才能存储到主存中或者从主存中读出,因为CPU才具有控制权

DMA模块来代替CPU转运数据

image-20211222193302934

当采取DMA模块时,主存就要同时处理DMA和CPU对主存访问的请求,可能会产生冲突

这时应当以DMA优先,因为DMA连接的是高速的I/O,如果不能及时把数据存入主存,那么就可能导致数据被冲刷掉

因为是把任务交给DMA来做,所以需要交代很多的信息给DMA,因此会花比较多的时间,最后读写完成时CPU也要有一些处理,因此在开始和结束时都会一定的时间开销,而在中间过程中CPU无需去管,数据的传输都交给DMA

DMA内存访问

CPU停止法

image-20211222193948940

一次I/O中的数据不一定是连续地从I/O传输过来的,而是一波一波的传输过来的,即中间会有空闲,但此时主存的访问权限仍在DMA上,会造成浪费

周期窃取/周期挪用

image-20211222194310204

周期窃取是适用于数据块不是一次性全部传送过来的,如键盘,当有传送时DMA模块就请求总线,当没有时就把总线交给CPU

交替分时访问

image-20211222194419344

交替分时访问是固定了一个时间段,前面由CPU访问,后面由DMA访问,因此DMA不需要请求总线

需要满足一个前提,CPU每次处理完指令的时间内,主存不仅能把数据提供出去,还可以满足DMA的数据传送的需求

DMA配置机制

单总线分离DMA

image-20211222194735618

这种方式就是把编程式I/O中CPU的任务分离出来给了DMA,其他基本没有改动

单总线集合的DMA-I/O

image-20211222194918391

DMA与I/O的连接不通过总线,而是把I/O作为DMA的一个部分,通过单独的线来通讯

这样会带来成本的上升,要为每个/多个I/O配备一个DMA,而当这个I/O没有任务时,对应的DMA就是闲置的

I/O总线

image-20211222195159331

image-20211222195237853

只有在连续读写时才交给DMA,而其他时候仍然是CPU在处理,因此CPU仍然有很高的参与度,仅仅是无需CPU负责存储器和I/O模块之间的数据传递

I/O模块的演变

image-20211222195415943

  • I/O模块有了自己的处理器就叫做I/O通道

  • I/O模块有了自己的局部存储器就叫做I/O处理器

总结

image-20211222195715027

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
  • Copyrights © 2022-2024 zzb
  • RZ
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信