I/O管理
I/O管理概述
I/O设备类型
根据IO设备的使用特性可以分为:
- 人机交互类外部设备 要和用户打交道的设备:打印机,键盘鼠标等。
- 存储设备 用于存储数据的设备
- 网络通信设备 用于远程设备的设备
根据传输速率分类:
- 低速设备 传输速率仅为每秒几字节到数百字节的一类设备 键盘鼠标等
- 中速设备 每秒千字节到万字节的一类设备 打印机类
- 高速设备 每秒百千字节到千兆字节的设备 磁带机 光盘机等
根据信息交换的单位分类:
- 块设备
- 字符设备
I/O控制方式
设备管理的主要任务之一是控制设备和内存或处理机之间的数据传送。外围设备和内存之间的IO控制方式有4种:
程序直接控制方式
每次读一个字的数据。对读入的每个字,CPU需要对外设状态进行循环检查,指导确认该字在IO控制器在数据寄存器中。 由于速度不匹配,导致CPU大部分时候都在空转,资源极大的浪费。
中断驱动方式
允许IO设备主动打断CPU并进行请求。中断驱动方式比程序直接控制有效,但由于数据中的每个字在存储器在IO控制间的传输都必须经过CPU,导致了中断驱动方式还是需要消耗很多的CPU时间。
DMA
DMA为了解决中断驱动方式的缺点,采用了IO设备和内存之间开辟直接的数据交换通路,DMA方式的特点如下:
- 基本单位是数据块
- 所传送的数据是从设备直接传送到内存,或相反。
- 仅在传送一个或多个数据块的开始和结束,才需要CPU干预。整个数据传送在DMA控制器控制下完成。
和中断方式的区别: 中断方式每个数据需要传输时中断CPU,而DMA在所要求的一批数据都传输结束才中断CPU。同时,传送本身而言,中断是由CPU控制,而DMA在DMA控制器控制下完成。
CPU === 内存 === DMA === 外存
通道控制方式
通道方式是DMA方式的发展,可以进一步减少CPU干预,即从一个数据块进行干扰,变成一组数据快的干扰。同时实现CPU、通道以及IO设备的并行操作。
DMA方式和通道方式的区别: DMA需要CPU干预,控制传输的数据大小,传输内容位置等,而通道方式是由通道控制的(小型CPU)。另外每个DMA对应一个设备传输,而一个通道可以控制多个设备和内存数据交换 。
I/O软件层次结构
比较合理的层次划分如下:
- 用户层I/O软件 用户交互接口。
- 设备独立性软件 用于实现用户程序和设备驱动器的统一接口、设备命令、设备保护、设备保护、设备分配释放等。逻辑名称转物理名称。 系统调用参数翻译成设备操作指令由设备无关的操作软件完成 设别独立性又称设备无关性。
- 设备驱动程序 与硬件相关,负责具体实现系统对设备发出操作的指令,驱动IO设备工作的驱动程序。
- 中断处理程序 用于保存被中断的CPU环境,处理完中断后恢复并返回中断进程。
- 硬件设备
设备控制的功能
- 接收和识别CPU或通道发来的命令
- 实现数据交换 数据和控制器之间 控制器和主存之间
- 发现和记录设备及自身的状态信息
- 设备地址是别
设备管理器的组成
- 设备控制器与CPU的接口
信号线包括:
- 数据线
- 地址线
- 控制线
- 设备控制器与折别的接口
- IO控制逻辑
I/O 核心子系统
IO调度概念
通过调度改善系统整体性能,使得进程之间公平共享设备访问 减少IO所需平均等待时间
高速缓存和缓存区
磁盘高速缓存
磁盘高速缓存逻辑上属于磁盘,物理上属于驻留在内存的盘块。 在内存中有两种形式
- 单独开辟一个存储空间作为高速缓存,大小固定
- 将未利用的内存空间作为缓冲池
缓冲区
引用缓冲区的目的:
- 减少CPU和IO设备的速度不匹配
- 减少CPU中断频率
- 解决基本数据单元大小不匹配
- 提高CPU和IO设备并行性
实现的方式:
- 硬件缓冲器 (贵)
- 缓冲区(内存中)
缓冲区非空时不能存入数据,必须传出后再冲入数据,且必须充满数据后才能从缓冲区取出数据。(有点像pipe)
缓冲可以分为几种:
单缓冲
CPU(C)===M===缓冲区===T===IO
设备和处理机之间设置缓冲区,设备和处理机交换数据的时候,先把被交换的数据写入缓冲区,然后需要数据的设备或处理机从缓冲区中取走数据。 容易理解的是,由于缓冲区是单工通信,因此处于M时间时,不可能同时处于T以及C时间,因此,单缓冲区处理每块数据的用时:$max(C,T)+M$
双缓冲
CPU(C) ====M===缓冲区(两个)===T===IO 设置两个缓冲区,当缓冲区1满时,向缓冲区2中注入数据,只有缓冲区满才能取出数据 由于有两个缓冲区,因此T是一直存在的,但C必须处于M后。 因此双缓冲区处理每一块数据的用时$max(C+M,T)$
循环缓冲
包含多个大小相等的缓冲区,每个缓冲区中有—个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,多个缓冲区构成一个环形
缓冲池
缓冲区分为三个队列,空缓冲队列,装满输入数据的缓冲队列,装满输出数据的缓冲队列 四种缓冲区:收容输入数据的工作缓冲区,提取输入数据的工作缓冲区,收容输出数据的工作缓冲区,提取输出数据的工作缓冲区 1、 emq空缓冲队列:用于取出空缓冲区来进行读写等操作。 2、 inq输入队列:用来记录输入设备输入的数据,以便用户程序读取。 3、outq输出队列:用来记录用户程序输出到设备(显示屏或是文件等)的数据,以便用户程序读取
我们的缓冲区主要是有inq,outq,enq三个缓冲队列。其他四种hin,sout,sin,hout工作缓冲区是在这三种缓冲队列上申请和取出缓冲区,用于数据的读取和存储。操作完成之后再把缓冲区放回到原来的队列。所以这四种缓冲区是抽象出来的缓冲区,实际上还是在这三种缓冲队列上进行操作。
设备分配与回收
从设备使用方式来分,可以分成:独占设备、共享设备、虚拟设备
设备分配数据结构
设备分配依据的主要数据结构有设备控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)、系统设备控制表(SDT)
设备控制表(DCT): 一个设备控制表对应一个设备,表项就是设备的各个属性。 控制器控制表(COCT): DCT里有一个表项对应COCT的指针。因此COCT和DCT一一对应。 通道控制表(CHCT) COCT有一个指针指向CHCT,但一个通道可以为多个设备控制器服务,因此CHCT和COCT是一对多关系 系统设备表(SDT): 一个系统只有一张系统设备表。 它记录了连接到系统的所有物理设备的情况。每个设备占一个表目。
设备分配策略
设备分配的原则是既要充分发挥设备使用效率,也要尽量避免死锁,还要将用户和具体设备分开
设备分配方式
- 静态分配 主要用作独占设备的分配,作业开始前一次性分配所有的设备 不会死硕但是效率低
- 动态分配 执行过程中根据需要分配,有利于提高效率,但会造成死锁。
设备分配安全性
安全性指的是分配设备中应该防止产生死锁。
- 安全分配方式 进程IO使用设备时则阻塞,完成IO才唤醒,不保持任何资源,因此不会死锁。
- 不安全分配方式 IO操作时进程继续运行, 需要时则发出第二 第三个,只有所需要的设备被占用才阻塞,会产生死锁。
逻辑设备与物理设备
在系统设置一张(或者每个用户一张)逻辑设备表(LUT),用于映射逻辑设备名和物理设备名,当进程使用逻辑设备名访问设备时,系统为它分配物理设备并在LUT设置一个表项,以后再利用逻辑设备请求IO操作的时候则通过LUT表查询相应的物理设备和驱动程序。
SPOOLing技术(假脱机技术)
假脱机技术主要用于设备的共享访问。 输出输出设备=====内存(输入输出缓冲区)===== 硬盘(输入输出井)
输入井和输出井
输入输出井位于硬盘(更为准确的说法是外存),输入井收容IO设备输入的数据,输出井容纳用户程序输出的数据。
输入输出缓冲区
暂存输入输出井的数据,等待设备可以接收数据再传输。
以打印机为例,CPU首先将需要对打印的内容存放到输出井,然后做其他事情。 假脱机技术系统由预输入程序、井管理程序、缓输出程序组成
易错点
- 设备分配不一定需要考虑及时性
- 字节多路通道用作链接大量低速和中速IO设备