学习操作系统(6)——IO

版权声明:本文为博主原创,未经博主允许不得转载。 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管理软件

分层:低层与硬件相关,相互独立;高层与应用相关,提供统一的接口

  1. 用户进程:调用、格式化IO,Spooling
  2. 设备无关软件:命名、保护、缓冲、分配IO
  3. 设备驱动程序:检查IO状态
  4. 中断处理程序:唤醒上一层
  5. 硬件:执行IO具体操作

4. IO管理技术

(1)通道技术——数据传输独立于CPU

过程:
  1. CPU向通道发出IO命令
  2. 通道从主存取出对应的通道程序并执行
  3. 通道程序完成,通道向CPU发出中断信号
分类:
  • 字节多路通道
  • 数组选择通道
  • 数组多路通道

(2)DMA技术——IO直接与主存传输数据块

设备控制器直接访问系统总线,与内存传输数据

  1. 设备驱动发出传输命令
  2. 硬件设备完成操作后,初始化DMA传送
  3. 将数据传输到DMA控制器
  4. DMA控制器将数据传输到内存中
  5. DMA控制器完成后再产生中断

(3)缓冲技术——避免CPU与IO设备的速度不匹配

  • 硬件缓冲:利用寄存器作为缓冲
  • 软件缓冲:通过操作系统管理缓冲
分类
  • 单缓冲
  • 双缓冲
  • 多缓冲
  • 环形缓冲
过程
  • 输入时间T1:数据从IO设备传入缓冲区
  • 传输时间T2:数据从缓冲区传入处理器CPU
  • 处理时间T3:数据在CPU处理
  • 对数据的总处理时间Tmax:近似为Max(T1,T3)
    • T1>T3:此时CPU需要等待IO设备,IO设备连续输入无需等待
    • T1<T3:此时IO设备需要等待CPU处理,CPU无需等待
单缓冲:
  1. 数据被传送时,缓冲区被占用,需要等待;数据被处理时,缓冲区空闲,可以继续传送。因此需要关注T1或T3和T2
    第1-(N-1)块数据的处理时间为 Tmax+T2
  2. 最后一块数据被处理后已经无需传送数据了
    第N块数据的处理时间为Tmax+T2+T1
双缓冲
  1. 数据被传送时,一个缓冲区被占用,一个缓冲区空闲,不需要等待。因此只需要关注T1或T3,忽略了传送时间
    第1-(N-1)块数据的处理时间为 Tmax
  2. 最后一块数据被处理后已经无需传送数据了
    第N块数据的处理时间为Tmax+T2+T1

(4)Spooling技术——虚拟设备技术

组成
  • 预输入程序
  • 缓输出程序
  • 井管理程序
  • 输入井
  • 输出井
作业表

每个作业拥有一张预输入表记录作业的各个文件的情况
Spooling的作业表用来记录作业的作业名和状态和预输入表的信息

  • 提交状态:预输入作业
  • 后备状态:作业等待执行
  • 执行状态:作业正在执行
  • 完成状态:作业等待缓输出
过程
  1. 输入设备发出输入请求
  2. Spooling的预输入程序将作业输入到磁盘的输入井中,填写作业表
  3. 操作系统进行作业调度,运行作业
  4. 需要作业的数据,Spooling的井管理程序将输入井的作业数据调入内存
  5. 作业发出输出请求,把数据输出到磁盘的输出井中
  6. Spooling的缓输出程序将输出井的数据输出到输出设备

三:IO设备的交互

1. IO通知操作系统的机制

(1)轮询

操作系统定期检查IO设备的状态控制器

特点:

  • 简单
  • IO操作频繁时,开销大,延时长

(2)设备中断

IO设备完成处理时产生中断请求

特点:

  • 有利于处理不可预测时间
  • 开销较大

2. IO传输数据的方式

(1)阻塞IO(轮询)

过程
  1. 用户发出IO请求,进入内核态
  2. IO管理系统判定用户的IO请求是否已经有缓存,有的话直接返回结果
  3. 没有缓存,代替用户向设备驱动发出IO请求,等待结果
  4. 设备驱动处理请求并转换为控制命令
  5. 硬件设备完成操作后,产生中断
  6. 中断处理例程处理中断,保存结果,通知设备驱动
  7. 设备驱动把结果返回给IO管理系统
  8. 返回给用户
特点
  • 读数据:发出请求后进程进入等待状态,直到设备完成数据传输后读出
  • 写数据:发出请求后进程进入等待状态,直到设备完成写入处理

(2)非阻塞IO(设备中断)

过程
  1. 用户发出IO请求,进入内核态
  2. IO管理系统判定用户的IO请求是否已经有缓存,有的话直接返回结果
  3. 没有缓存,代替用户向设备驱动发出IO请求,等待结果
  4. 设备驱动处理请求并转换为控制命令
  5. 硬件完成操作,通知设备驱动
  6. 设备驱动把结果返回给IO管理系统
  7. 返回给用户
特点
  • 进程发出请求后,立即从系统调用返回,返回值为成功传输的字节数,
  • 结果可能不一致

(3)异步IO

过程
  1. 用户发出IO请求,进入内核态
  2. IO管理系统判定用户的IO请求是否已经有缓存,有的话直接返回结果
  3. 没有缓存,代替用户向设备驱动发出IO请求,等待结果
  4. 设备驱动处理请求并转换为控制命令
  5. 硬件设备开始操作,并且通知设备驱动
  6. 设备驱动返回给IO管理系统,回到用户态
  7. 硬件设备完成操作后,产生中断
  8. 中断处理例程处理中断,保存结果,通知设备驱动
  9. 设备驱动把结果返回给IO管理系统,返回给用户
特点
  • 读数据:使用指针标记用户缓冲区,立即从系统调用返回,稍后内核进行数据处理后,自己填充缓冲区并通知用户
  • 写数据:使用指针标记用户缓冲区,立即从系统调用返回,稍后内核对缓冲区的数据进行处理后,通知用户

四:磁盘

1. 磁盘的概念

  • 磁盘:是由盘片组成的
    • 盘片:一个盘片上下两面都是可读写的,有两个磁头
      • 磁道:一圈圈灰色同心圆为一条条磁道
      • 扇区:从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(磁盘的最小组成单元,通常是512字节
  • 柱面:磁盘旋转后,每组磁道形成一个柱面
  • 分区:一个分区是一个柱面的集合,每个分区都是逻辑上独立的磁盘(磁盘通过分区最大限度减少寻道时间)

磁盘存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数

2. 多磁盘管理——冗余磁盘阵列RAID

(1)定义

使用多个便宜的磁盘并行读取提高吞吐量,通过冗余块的方式提高可靠性和可用性

(2)硬件基础

  • 分区:磁盘的一种适合操作系统指定格式的划分,不同分区可以由不同的文件系统组成

  • 卷:拥有一个文件系统的可访问的存储空间,通常常驻在磁盘的单个分区上

(3)实现

  • 软件(操作系统):在文件系统和磁盘驱动之间,使用RAID层(存储卷管理)
  • 硬件:RAID硬件控制器(虚拟硬盘)

(4)方案

RAID-0——磁盘存储不同的数据

提高吞吐量:数据块均匀被分成多个子快,存储在独立的磁盘,磁盘并行读取

RAID-1——磁盘存储相同的数据

提高可靠性:同时向多个磁盘写入同一块数据,从任意一个磁盘读取数据。

RAID-4——配备一个奇偶校验块
  1. 吞吐量:数据块均匀被分成多个子快,存储在独立的磁盘,磁盘并行读取
  2. 可靠性:在向磁盘写入数据时,同时向特殊盘写入纠错码。如果有一个盘坏了,从特殊盘恢复数据
RAID-5——每个条带块有一个奇偶校验块
  1. 吞吐量:数据块均匀被分成多个子快,存储在独立的磁盘,磁盘并行读取
  2. 可靠性:在向磁盘写入数据时,同时向各个磁盘写入纠错码。如果有一个盘坏了可以恢复数据
RAID-6——两个冗余块

允许两个磁盘发送错误

3. 磁盘的调度——平均寻道时间最少

磁盘访问数据的开销

  • 寻道时间:磁头前后移动,定位磁道
  • 旋转延迟:从扇区开始到目的地(默认为平均旋转延迟 周长 / (半径*2))
  • 数据传输:传输的比特 / (磁盘的总比特 * 磁盘转数)

1. 移臂调度——确定柱面(移动于多个上下间隔的磁道)

(1)先来先服务

按IO请求顺序处理请求

特点:

  • 简单
  • 公平对待所有进程
  • 具有随机性
  • 磁臂粘着
(2)最短寻道时间优先

选择从磁臂当前位置需要移动最少的IO请求

特点:

  • 开销较小
  • 会产生饥饿现象,无法保证平均寻道时间最少
  • 磁臂粘着
(3)扫描法(电梯算法)

磁盘在一个方向上移动,满足所有未完成的请求。直到磁臂到达该方向的最后磁道,再向反方向移动。

特点:

  • 限制了方向
  • 磁臂粘着

改进:

  • c-scan:当磁臂到达该方向最后一个磁道后,磁臂返回到磁盘的另外一端重新扫描,磁头只在一个方向移动
  • c-look:当磁臂达到该方向最后一个请求处后,立即反转
(4)N-STEP-SCAN算法
  1. 将磁盘请求队列分为若干子队列,磁盘调度将按FCFS算法依次处理子队列。
  2. 在处理子队列时使用SCAN算法
  3. 在处理过程中出现新的请求时,将该请求放入其他队列,避免粘着
  • 公平性
  • 高效性
(5)FSCAN算法:

N-STEP-SCAN算法的简化版,只是两个队列。

  • 当前所有IO请求的进程组成队列,进行SCAN算法处理。
  • 出现新的请求时,加入到等待处理队列

2. 旋转调度——确定具体磁道(切换磁头)和扇区(旋转)

  1. 如果多个请求访问的是同一磁道上的不同扇区编号,或者是不同磁道上的不同扇区编号:先到达磁头的扇区先进行传输
  2. 如果多个请求访问的是不同磁道上的同一扇区编号:在磁头下任意选择一个扇区进行传输

3. 数据在磁盘的排列方式

  • 选择时间T1:磁头旋转一周的时间
  • 传输时间T2:磁头读取扇区并传输数据的时间(T1/扇区个数)
  • 处理时间T3:CPU处理数据的时间

未优化:

  1. 第一个扇区无需等待,直接传输数据。
    处理总时间T=0
  2. CPU处理数据时,磁头会继续旋转,等待CPU处理完毕后,磁头到达其他位置,需要等待一周。
    第2-(N-1)个扇区处理总时间T=T1+T2
  3. 最后一个扇区之后,已经没有数据需要读取了
    第N个扇区处理总时间T=(T1+T2)+T2+T3

优化:磁头旋转之后,磁头刚好到达下一个位置。也就是说i+1位于第i+T3/T2个位置。此时每个扇区处理总时间都是一样的T=T2+T3

猜你喜欢

转载自blog.csdn.net/weixin_36904568/article/details/89429014