【操作系统】I/O系统

·  阅读 184

1 I/O硬件组成

1.1 设备接口——控制器的作用

  • 操作系统将命令写入控制器的接口寄存器(或接口缓冲区)中,以实现输入/输出,并从接口寄存器读取状态信息或结果信息。

  • 控制器的任务:把串行的位流转换为字节块,并进行必要的错误修正。

    首先,控制器按位进行组装,然后存入控制器内部的缓冲区中形成以字节为单位的块;在对块验证检查和并证明无错误时,再将它复制到内存中。

1.2 I/O端口地址

定义:接口电路中每个寄存器具有的、唯一的地址,是个整数。

I/O指令形式与I/O地址是相互关联的,主要有两种形式:

I/O指令形式定义优点缺点
I/O独立编址(I/O专用指令)分配给系统中所有端口的地址完全独立外设不占用内存的地址空间;易于区分是对内存操作还是I/O操作I/O端口操作指令类型少,不灵活
内存映像编址(内存映像I/O模式)分配给系统中所有的地址空间与内存的地址空间统一编址凡是可对内存操作的指令都可对I/O端口操作,不需要专门的I/O指令占用内存空间

2 I/O控制方式

I/O控制方式定义
可编程I/O(轮询/查询)由CPU代表进程给I/O模块发送I/O命令,进程进入忙等待状态直到操作完成
中断驱动I/O为了减少设备驱动程序不断询问控制器状态寄存器的开销,I/O操作结束后由设备控制器主动通知设备驱动程序
DMA直接的内存存取,由专门的控制器完成

2.1 轮询方式流程

在这里插入图片描述

2.2 中断驱动I/O方式流程

在这里插入图片描述

3 缓冲技术

为了解决CPU与I/O设备之间速度不匹配的问题。凡是数据到达和离去速度不匹配的地方均可采用缓冲技术。

3.1 缓冲技术的实现

1 分类

缓冲区分类实现机制
硬缓冲由硬件寄存器实现
软缓冲在内存开辟一个空间用作缓冲区

2 缓冲区管理

分类实现
单缓冲
双缓冲
缓冲池统一管理多个缓冲区,采用有界缓冲区的生产者/消费者模型对缓冲池中的缓冲区进行循环使用

3 Unix的System V缓冲技术

设计理念

采用缓冲池技术:

  • 缓冲区结合提前读和延迟写技术对就有重复性及阵发性I/O进程很有帮助
  • 可以充分利用之前从磁盘读入、虽已传入用户区但仍在缓冲区的数据。

数据结构

缓冲池:由200个缓冲区组成,每个缓冲区包括两个部分:缓冲首部+缓冲数据区。

缓冲区由两种队列构成:

1、空闲缓冲区队列(av链):队列头部为bfreelist

2、设备缓冲队列(b链):链接所有分配给各类设备使用的缓冲区,按照散列的方式组织

每个缓冲区可以同时在av链和b链存在。开始时当缓冲区未被使用时在空闲av链。当开始I/O请求时,有缓冲区会被分配给I/O请求,此时这些缓冲区就会出现在设备I/O请求队列和设备b链。当I/O完成后,设备I/O请求队列中的缓冲区就会还给av链,此时缓冲区在av链和设备b链中都存在。

实现机制

当进程想从指定的盘读取数据时:

  • 系统根据盘块号从设备b链中查找,如果找到,则将该缓冲区状态标记为“忙”,并从空闲av队列中取下,再完成从缓冲区到内存用户区的数据传送;
  • 如果在设备b链中没有找到,则从空闲av链队首摘取一个缓冲区,插入设备I/O请求队列,并从原设备b链取下,插入到新的设备b链中(该新链由读入信息盘块号确定);
  • 当系统完成从缓冲区到内存用户区的数据传送后,要把缓冲区释放,链入空闲av链队尾;
  • 当数据从磁盘块读入到缓冲区并传送到内存用户区之后,该缓冲区一直保留在原设备b链中,即它的数据一直有效。若又要使用它,则从空闲av链中取下,使用完后插入到空闲av链队尾。若一直未使用则该缓冲区从空闲av链慢慢升到队首,最后被重新分配。

4 I/O性能问题

  • 减少或缓解速度差距—>缓冲技术
  • 使CPU不等待I/O—>异步I/O
  • 让CPU摆脱I/O操作—>DMA、通道

4.1 同步传输I/O流程

在I/O处理过程中,CPU处于空闲等待状态,而在处理数据的过程中,不能同时进行I/O操作。

4.2 异步传输I/O的基本思想

将访问控制分成两段进行;

发出读取指令后继续做其他操作;

当需要用读入的数据的时候,再使用wait命令等待其完成;

不引入线程切换,减少上下文开销的消耗。

分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改