版权声明:本文为博主原创,未经博主允许不得转载。 https://blog.csdn.net/weixin_36904568/article/details/89429014
一: IO设备的基本概念
1. 定义:
计算机系统与外界交互的工具,负责输入输出的工作
2. 接口类型
(1)按数据组织分类
- 字符设备:键盘、鼠标、串口
- 以字节为单位
- 顺序访问
- 访问命令:通常使用文件访问接口和语义get()、put()
- 块设备:磁盘
- 以块为单位
- 均匀访问
- 访问命令
- 使用原始IO接口
- 使用文件系统接口
- 把内存映射到文件访问
(2)按功能分类
- 输入设备
- 输出设备
- 存储设备
- 供电设备
- 网络设备
(3)按资源分配分类
- 独占设备:一段时间内只允许一个进程访问(打印机、鼠标、键盘)
- 共享设备:一段时间内可以被同时访问,可寻址、可随机访问(磁盘)
- 虚拟设备:通过虚拟技术将独占设备变换为共享的逻辑设备(假脱机技术Spooling)
(4)按数据传输率分类
- 高速设备:磁盘机、磁带机
- 中速设备:打印机
- 低速设备:鼠标、键盘
二:IO管理系统
1. 功能
提高设备的利用率,为用户提供方便、统一的界面。
在多个进程竞争使用设备时,分配和管理各种设备,控制设备的操作,完成数据交换。
2. 物理结构
(1)设备控制器(设备)
- 提供CPU与设备的总线接口
- 提供硬件控制器
- 向CPU提供特殊指令和寄存器:进行数据和状态的交互
- 提供IO地址(一段内存区域):对内存的访问就是对IO的访问
(2)总线适配器(总线)
将IO地址或IO端口映射给CPU
- IO端口:CPU通过IO指令控制IO设备,CPU通过out、in指令对设备进行读写
- IO地址:把内存的寄存器或存储队列映射到内存的物理地址空间,直接访问内存,也就是访问IO设备,CPU通过load、store指令对设备进行读写
(3)中断控制器
设备产生中断后,汇总传输给CPU
(4)DMA控制器
连接设备控制器和内存
3. IO管理软件
分层:低层与硬件相关,相互独立;高层与应用相关,提供统一的接口
- 用户进程:调用、格式化IO,Spooling
- 设备无关软件:命名、保护、缓冲、分配IO
- 设备驱动程序:检查IO状态
- 中断处理程序:唤醒上一层
- 硬件:执行IO具体操作
4. IO管理技术
(1)通道技术——数据传输独立于CPU
过程:
- CPU向通道发出IO命令
- 通道从主存取出对应的通道程序并执行
- 通道程序完成,通道向CPU发出中断信号
分类:
- 字节多路通道
- 数组选择通道
- 数组多路通道
(2)DMA技术——IO直接与主存传输数据块
设备控制器直接访问系统总线,与内存传输数据
- 设备驱动发出传输命令
- 硬件设备完成操作后,初始化DMA传送
- 将数据传输到DMA控制器
- DMA控制器将数据传输到内存中
- DMA控制器完成后再产生中断
(3)缓冲技术——避免CPU与IO设备的速度不匹配
- 硬件缓冲:利用寄存器作为缓冲
- 软件缓冲:通过操作系统管理缓冲
分类
- 单缓冲
- 双缓冲
- 多缓冲
- 环形缓冲
过程
- 输入时间T1:数据从IO设备传入缓冲区
- 传输时间T2:数据从缓冲区传入处理器CPU
- 处理时间T3:数据在CPU处理
- 对数据的总处理时间Tmax:近似为Max(T1,T3)
- T1>T3:此时CPU需要等待IO设备,IO设备连续输入无需等待
- T1<T3:此时IO设备需要等待CPU处理,CPU无需等待
单缓冲:
- 数据被传送时,缓冲区被占用,需要等待;数据被处理时,缓冲区空闲,可以继续传送。因此需要关注T1或T3和T2
第1-(N-1)块数据的处理时间为 Tmax+T2 - 最后一块数据被处理后已经无需传送数据了
第N块数据的处理时间为Tmax+T2+T1
双缓冲
- 数据被传送时,一个缓冲区被占用,一个缓冲区空闲,不需要等待。因此只需要关注T1或T3,忽略了传送时间
第1-(N-1)块数据的处理时间为 Tmax - 最后一块数据被处理后已经无需传送数据了
第N块数据的处理时间为Tmax+T2+T1
(4)Spooling技术——虚拟设备技术
组成
- 预输入程序
- 缓输出程序
- 井管理程序
- 输入井
- 输出井
作业表
每个作业拥有一张预输入表记录作业的各个文件的情况
Spooling的作业表用来记录作业的作业名和状态和预输入表的信息
- 提交状态:预输入作业
- 后备状态:作业等待执行
- 执行状态:作业正在执行
- 完成状态:作业等待缓输出
过程
- 输入设备发出输入请求
- Spooling的预输入程序将作业输入到磁盘的输入井中,填写作业表
- 操作系统进行作业调度,运行作业
- 需要作业的数据,Spooling的井管理程序将输入井的作业数据调入内存
- 作业发出输出请求,把数据输出到磁盘的输出井中
- Spooling的缓输出程序将输出井的数据输出到输出设备
三:IO设备的交互
1. IO通知操作系统的机制
(1)轮询
操作系统定期检查IO设备的状态控制器
特点:
- 简单
- IO操作频繁时,开销大,延时长
(2)设备中断
IO设备完成处理时产生中断请求
特点:
- 有利于处理不可预测时间
- 开销较大
2. IO传输数据的方式
(1)阻塞IO(轮询)
过程
- 用户发出IO请求,进入内核态
- IO管理系统判定用户的IO请求是否已经有缓存,有的话直接返回结果
- 没有缓存,代替用户向设备驱动发出IO请求,等待结果
- 设备驱动处理请求并转换为控制命令
- 硬件设备完成操作后,产生中断
- 中断处理例程处理中断,保存结果,通知设备驱动
- 设备驱动把结果返回给IO管理系统
- 返回给用户
特点
- 读数据:发出请求后进程进入等待状态,直到设备完成数据传输后读出
- 写数据:发出请求后进程进入等待状态,直到设备完成写入处理
(2)非阻塞IO(设备中断)
过程
- 用户发出IO请求,进入内核态
- IO管理系统判定用户的IO请求是否已经有缓存,有的话直接返回结果
- 没有缓存,代替用户向设备驱动发出IO请求,等待结果
- 设备驱动处理请求并转换为控制命令
- 硬件完成操作,通知设备驱动
- 设备驱动把结果返回给IO管理系统
- 返回给用户
特点
- 进程发出请求后,立即从系统调用返回,返回值为成功传输的字节数,
- 结果可能不一致
(3)异步IO
过程
- 用户发出IO请求,进入内核态
- IO管理系统判定用户的IO请求是否已经有缓存,有的话直接返回结果
- 没有缓存,代替用户向设备驱动发出IO请求,等待结果
- 设备驱动处理请求并转换为控制命令
- 硬件设备开始操作,并且通知设备驱动
- 设备驱动返回给IO管理系统,回到用户态
- 硬件设备完成操作后,产生中断
- 中断处理例程处理中断,保存结果,通知设备驱动
- 设备驱动把结果返回给IO管理系统,返回给用户
特点
- 读数据:使用指针标记用户缓冲区,立即从系统调用返回,稍后内核进行数据处理后,自己填充缓冲区并通知用户
- 写数据:使用指针标记用户缓冲区,立即从系统调用返回,稍后内核对缓冲区的数据进行处理后,通知用户
四:磁盘
1. 磁盘的概念
- 磁盘:是由盘片组成的
- 盘片:一个盘片上下两面都是可读写的,有两个磁头
- 磁道:一圈圈灰色同心圆为一条条磁道
- 扇区:从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(磁盘的最小组成单元,通常是512字节)
- 盘片:一个盘片上下两面都是可读写的,有两个磁头
- 柱面:磁盘旋转后,每组磁道形成一个柱面
- 分区:一个分区是一个柱面的集合,每个分区都是逻辑上独立的磁盘(磁盘通过分区最大限度减少寻道时间)
磁盘存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
2. 多磁盘管理——冗余磁盘阵列RAID
(1)定义
使用多个便宜的磁盘并行读取提高吞吐量,通过冗余块的方式提高可靠性和可用性
(2)硬件基础
-
分区:磁盘的一种适合操作系统指定格式的划分,不同分区可以由不同的文件系统组成
-
卷:拥有一个文件系统的可访问的存储空间,通常常驻在磁盘的单个分区上
(3)实现
- 软件(操作系统):在文件系统和磁盘驱动之间,使用RAID层(存储卷管理)
- 硬件:RAID硬件控制器(虚拟硬盘)
(4)方案
RAID-0——磁盘存储不同的数据
提高吞吐量:数据块均匀被分成多个子快,存储在独立的磁盘,磁盘并行读取
RAID-1——磁盘存储相同的数据
提高可靠性:同时向多个磁盘写入同一块数据,从任意一个磁盘读取数据。
RAID-4——配备一个奇偶校验块
- 吞吐量:数据块均匀被分成多个子快,存储在独立的磁盘,磁盘并行读取
- 可靠性:在向磁盘写入数据时,同时向特殊盘写入纠错码。如果有一个盘坏了,从特殊盘恢复数据
RAID-5——每个条带块有一个奇偶校验块
- 吞吐量:数据块均匀被分成多个子快,存储在独立的磁盘,磁盘并行读取
- 可靠性:在向磁盘写入数据时,同时向各个磁盘写入纠错码。如果有一个盘坏了可以恢复数据
RAID-6——两个冗余块
允许两个磁盘发送错误
3. 磁盘的调度——平均寻道时间最少
磁盘访问数据的开销
- 寻道时间:磁头前后移动,定位磁道
- 旋转延迟:从扇区开始到目的地(默认为平均旋转延迟 周长 / (半径*2))
- 数据传输:传输的比特 / (磁盘的总比特 * 磁盘转数)
1. 移臂调度——确定柱面(移动于多个上下间隔的磁道)
(1)先来先服务
按IO请求顺序处理请求
特点:
- 简单
- 公平对待所有进程
- 具有随机性
- 磁臂粘着
(2)最短寻道时间优先
选择从磁臂当前位置需要移动最少的IO请求
特点:
- 开销较小
- 会产生饥饿现象,无法保证平均寻道时间最少
- 磁臂粘着
(3)扫描法(电梯算法)
磁盘在一个方向上移动,满足所有未完成的请求。直到磁臂到达该方向的最后磁道,再向反方向移动。
特点:
- 限制了方向
- 磁臂粘着
改进:
- c-scan:当磁臂到达该方向最后一个磁道后,磁臂返回到磁盘的另外一端重新扫描,磁头只在一个方向移动
- c-look:当磁臂达到该方向最后一个请求处后,立即反转
(4)N-STEP-SCAN算法
- 将磁盘请求队列分为若干子队列,磁盘调度将按FCFS算法依次处理子队列。
- 在处理子队列时使用SCAN算法
- 在处理过程中出现新的请求时,将该请求放入其他队列,避免粘着
- 公平性
- 高效性
(5)FSCAN算法:
N-STEP-SCAN算法的简化版,只是两个队列。
- 当前所有IO请求的进程组成队列,进行SCAN算法处理。
- 出现新的请求时,加入到等待处理队列
2. 旋转调度——确定具体磁道(切换磁头)和扇区(旋转)
- 如果多个请求访问的是同一磁道上的不同扇区编号,或者是不同磁道上的不同扇区编号:先到达磁头的扇区先进行传输
- 如果多个请求访问的是不同磁道上的同一扇区编号:在磁头下任意选择一个扇区进行传输
3. 数据在磁盘的排列方式
- 选择时间T1:磁头旋转一周的时间
- 传输时间T2:磁头读取扇区并传输数据的时间(T1/扇区个数)
- 处理时间T3:CPU处理数据的时间
未优化:
- 第一个扇区无需等待,直接传输数据。
处理总时间T=0 - CPU处理数据时,磁头会继续旋转,等待CPU处理完毕后,磁头到达其他位置,需要等待一周。
第2-(N-1)个扇区处理总时间T=T1+T2 - 最后一个扇区之后,已经没有数据需要读取了
第N个扇区处理总时间T=(T1+T2)+T2+T3
优化:磁头旋转之后,磁头刚好到达下一个位置。也就是说i+1位于第i+T3/T2个位置。此时每个扇区处理总时间都是一样的T=T2+T3