IO控制基础篇

1.I/O控制器

cup与物理设备之间有一个“中介”:I/O控制器,实现cpu与磁盘之间的控制。
I/O控制器的功能:

  1. cpu发来的read或write命令,I/O控制器会有对应的控制寄存器来存放命令和参数。
  2. 还有对应的状态寄存器,来记录I/O设备的当前状态,如,1表示空闲,0表示忙碌。
  3. I/O控制器还有个数据寄存器,在输出时,会暂存cpu发过来的数据,然后再把数据传送至设备;输入时,数据寄存器就会暂存设备发来的数据,之后cpu就会从数据寄存器里取走数据。
  4. I/O控制器有这么多的寄存器,就需要识别这些寄存器地址,所以就要像给内存分配地址一样,给这些寄存器设置特定的地址,cpu就是通过这些寄存器的地址来进行操作,这些地址也由cpu提供。

具体步骤:

  • cpu会通过控制线想I/O控制器发出一个指令,同时在地址线上说明自己要操纵的是哪一个设备。
  • 如果是输出的话,cpu会把数据放到I/O控制器的数据寄存器当中,后面I/O逻辑就可以从数据寄存器中取得cpu想要输出的数据。
  • cpu指令里参数部分放到控制寄存器中,I/O逻辑就可以从控制寄存器中拿到参数。
  • 为了实现cpu对各个外设的管理,cpu会从状态寄存器当中读出各个设备此时的状态(忙碌、空闲、故障等等),I/O逻辑就会向状态寄存器中写入相应的数据,来告诉cpu各个外设的状态 。
    在这里插入图片描述
    小细节:
  1. 一个I/O控制器可对应多个外设设备。
  2. 数据寄存器、控制寄存器、状态控制器可能会有多个(如每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的对应,才能方便cpu操作,两种分配这些寄存器的方式:内存映像I/O、寄存器独立编址。
    在这里插入图片描述
    小结:
    在这里插入图片描述

2.I/O控制方式

四种:程序直接控制方式、中断驱动方式、DMA方式、通道控制方式。

2.1程序直接控制方式

以读操作为例。

  1. cpu通过控制线向I/O控制器发出读指令,I/O控制器根据指令来启动相应的设备,并且会把设备的状态设置为未就绪或者忙碌(假设为1)的状态,因为外设这时候还在准备数据阶段。
  2. 相对于cpu来说设备的速度会慢很多,cpu这时候会轮询地访问状态寄存器的数据,如果读到的为1,说明设备还没准备好,然后继续轮询。
  3. 当设备准备好了数据后,设备就会向I/O控制器传送这次要输入的数据,并报告自己的状态为已就绪的状态。
  4. I/O逻辑会把设备传送过来的数据放到数据寄存器当中,并把状态寄存器的改为0(以就绪的状态)。
  5. cpu轮询状态寄存器发现设备状态为0时,就会从数据寄存器当中的数据读入到自己的寄存器(cpu寄存器)当中,再把数据放到内存当中。

    流程图:
    在这里插入图片描述
    特点:
  6. cpu干预很频繁,I/O操作开始之前到完成之后都需要cpu的介入,并且在等待I/O完成的过程中cpu需要不断地轮询检查。
  7. 两个数据流向,读操作:I/O设备->cpu(cpu寄存器)->内存;
    写操作:内存->cpu(cpu寄存器)->I/O设备;

缺点:cpu和I/O设备只能串行工作,cpu要一直轮询检查,长期处于“忙等”状态,cpu利用率低。

2.2中断驱动方式

引入中断机制。由于I/O设备速度很慢,因此在cpu发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器会向cpu发出一个中断信号,cpu检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序来处理该终端。处理中断的过程中,cpu从I/O控制器读一个字的数据传送到cpu寄存器,再写入主存。接着,cpu恢复等待I/O的寄存(或其他进程)的运行环境,然后继续执行。
在这里插入图片描述
注意:

  1. cpu会在每个执行周期的末尾检查有没有中断信号的到达;
  2. c中断处理过程中需要保存、恢复进程的运行环境,这个过程需要一定时间开销的(进程上下文切换)。所以中断发送的频率太高,势必会降低系统的性能。

特点:cpu干预频率相对于程序直接控制方式低了很多,只需每次I/O操作开始之前、完成之后进行cpu的介入,等待I/O完成的过程中cpu可以切换到别的进程执行,实现cpu和I/O设备的并行工作,cpu利用率得到提升。
数据传送的单位为每次读/写一个字,当传送大量数据的时候,就会发生大量的中断,而每次的中断处理需要一些时间代价,消耗cpu的时间(这也是为了引入缓冲区的原因)。
数据流向:读:I/O设备->cpu->内存;
写:内存->cpu->I/O设备;

2.3 DMA方式

Direct Memory Access,直接存储器存取。
与中断驱动方式主要的区别在于数据流向,读:I/O设备->内存;写:内存->I/O设备,中间少了cpu寄存器的数据中转,而且以块为单位传输
在这里插入图片描述
流程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4通道控制方式


在这里插入图片描述


3. 缓冲区

缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。
使用硬件作为缓冲区的成本比较高,容量也比较小,一般仅用在对速度要求特别高的场合。
一般情况,更多是用内存作为缓存区。
作用:
在内存中开启一块缓冲区,在输出数据情况下,cpu把要输出的数据快速地放入缓冲区,在放满缓冲区之后就可以做别的事了,然后I/O设备就可以慢慢地从缓冲区中取走数据。
输出类似,I/O设备慢慢地把数据放入到缓冲区当中,当缓冲区满了之后,cpu再从缓冲区中拿到数据。
优点:

  1. 很明显缓和了cpu与I/O设备之间速度不匹配的矛盾
  2. 减少对cpu的中断频率。前面提到的中断驱动方式中,cpu与设备之间以一个字为段位进行传输,当传输大量数据时,中断频率肯定会增加,cpu切换频率也就增加,明显会影响到cpu的性能。
    现在加入了缓冲区,当数据充满或者取完时才会给cpu一个中断信号,大大减少了cpu的中断频率。
  3. 解决数据粒度不匹配,如输出进程每次可以生成一块数据,而I/O设备每次只能输出一个字符,没有缓冲区的话,进程只能一个字符一个字符地传送数据给I/O设备,有缓冲区的话,进程可以直接把一块的数据放到缓冲区中,I/O设备就可以一个一个字符的从缓冲区中取出数据。
  4. 提高cpu和I/O设备的并行性。

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值