【操作系统】I/O系统

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缓冲技术

扫描二维码关注公众号,回复: 9683675 查看本文章

设计理念

采用缓冲池技术:

  • 缓冲区结合提前读和延迟写技术对就有重复性及阵发性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命令等待其完成;

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

发布了49 篇原创文章 · 获赞 17 · 访问量 52万+

猜你喜欢

转载自blog.csdn.net/Carson_Chu/article/details/104523461