输入输出管理
第五章_输入输出管理
5.1 I / O 管理概述
5.1.1 I / O 设备分类
I / O 设备分类:
-
按使用特性分类(无明确界限)
- 人机交互类外部设备
- 存储设备
- 网络通信设备
-
按传输速率分类(无明确界限)
- 低速设备
- 中速设备
- 高速设备
-
按信息交换的单位分类
- 块设备(传输快,可寻址)
- 字符设备(传输慢,不可寻址,常采用中断驱动方式)
-
按共享属性分类
- 独占设备:任一时刻仅允许一个进程使用。一旦分配给某进程,即由该进程独占,直至使用完毕后释放。典型的独占设备多为低速设备,如打印机。
- 共享设备:允许多个进程在逻辑上并发访问。尽管物理访问仍需调度协调,系统可将其分配给多个进程分时交替使用。磁盘是典型的共享设备。
- 虚拟设备:通过 SPOOLing 技术,将独占设备改造为多个逻辑设备,使多个进程能并发使用。其实质是利用高速共享设备(如磁盘)作为缓冲区,实现独占设备的逻辑共享。
5.1.2 I / O 接口(设备控制器)
I / O 接口主要实现以下功能:
- 接受和识别CPU发出的命令(要有控制寄存器)
- 向CPU报告设备的状态(要有状态寄存器)
- 数据交换(要有数据寄存器,暂存输入/输出的数据)
- 地址识别(由I/O逻辑实现)
其内部构造图与两种寄存器编址方式在《计算机组成原理》中已经介绍过,这里不再进行介绍,仅贴一张图:

5.1.3 I / O 控制方式
5.1.3.1 程序直接控制方式(程序查询方式)

5.1.3.2 中断驱动方式

5.1.3.3 DMA 方式
DMA 控制器的结构如下:
DMA 方式过程如下:

5.1.4 I / O 软件的结构层次
I/O 软件是 用户程序 与 I / O设备 之间的中间管理层。
5.1.4.1 I / O 软件的结构层次
其中又能够细分为 I / O 核心子系统,如图所示:

5.1.4.2 输入输出应用程序接口(应用程序接口)
该层次结构主要目的有二:
- 让应用程序无需关心底层硬件的具体实现细节。
- 使新设备能够以模块化的方式方便的加入系统,而无需改动内核代码。

根据进程发出 I / O 请求之后,操作系统如何处理这个进程的状态分为 阻塞与非阻塞 I / O:
- 阻塞 I/O:应用程序发出 I/O 系统调用,进程需转为阻塞态等待。 eg:字符设备接口 —— 从键盘读一个字符 get
- 非阻塞 I/O:应用程序发出 I/O 系统调用,系统调用可迅速返回,进程无需阻塞等待。 eg:块设备接口 —— 往磁盘写数据 write
5.1.5 设备独立性软件
5.1.5.1 缓冲区管理
本小节 思维导图 如下:
关于 缓冲区的作用,如图所示:
而缓冲区又分为单缓冲区和双缓冲区的情况。
单缓冲区 : 假设设备向缓冲区写入一块数据的时间为 T,操作系统将缓冲区数据送到用户工作区的时间是 M,CPU 处理一块的数据时间是 C。
不难看出,设备向数据写入的时间和 CPU 处理前一块数据的时间是能够并行的,因此,单缓冲区处理每块数据平均耗时 是具有不同的情况的,如下图所示:
注意:单缓冲区中,数据到缓冲区 和 数据从缓冲区到用户区,这段时间是不能并行的。
双缓冲区 的情况如下图所示: 仍假设设备向缓冲区写入一块数据的时间为 T,操作系统将缓冲区数据送到用户工作区的时间是 M,CPU 处理一块的数据时间是 C。
双缓冲区处理每块数据平均耗时 是具有不同的情况的,如下图所示:
不难理解,若采用单缓冲区的策略,在通信的时候,任一时刻只能实现数据的单向传输。若采用双缓冲区的策略,在通信的时候,同一时刻能够实现数据的双向传输。
另外关于 循环缓冲区 的概念,简单了解即可:

关于 缓冲池 的概念如下所示:
缓冲池是一种包含管理数据结构的操作函数的软件机制,用于统一的管理多个缓冲区,并支持多进程共享使用。

5.1.5.2 设备的分配与回收
本小节思维导图如下:
首先关于设备的分配与回收,我们 需要考虑如下因素:
关于 数据分配有如下这些数据结构:
设备分配的步骤 如下:
关于上述步骤的缺点,我们还能够做如下这些 步骤改进:

5.1.5.3 假脱机技术(SPOOLing技术)
假脱机技术主要目的是将独占设备变成从用户角度看起来的共享设备(即虚拟设备)。
本小节思维导图如下:
假脱机技术是为了缓和 CPU 的高速性与 I / O 设备低速性之间的矛盾而被操作系统引入的。其思想来源于早期的 脱机 I / O 方式:
在输入的时候,外围机将低速输入设备(如纸带机)上的数据预先读入高速磁盘。
在输出的时候,CPU 先将结果高速写入磁盘,再由外围机将数据送至低速输出设备(如打印机)。
而现代常用软件的方式对脱机技术进行实现,因此叫做 假脱机技术。假就体现在 以多道程序和磁盘空间代替外围机,进而将一台物理独占设备虚拟为多台逻辑设备,实现设备共享:
输入进程:把独占设备输入的数据,先送到 输入井(磁盘),供以后进程使用
输出进程:从 输出井(磁盘) 取出进程要输出的数据,再送到独占设备
通过 共享打印机 这种案例进行进一步的熟悉:

5.1.5.1 驱动程序接口

5.2 磁盘和固态硬盘
5.2.1 磁盘的结构
磁盘的结构 如图所示:
磁盘的分类 如图所示:

5.2.2 磁盘调度算法
本小节思维导图如下:
首先来看 一次磁盘寻址究竟涉及到哪些时间开销:

5.2.2.1 先来先服务算法(FCFS)

5.2.2.2 最短寻道时间优先算法(SSTF)

5.2.2.3 扫描算法(SCAN)

5.2.2.4 LOOK 算法

5.2.2.5 C-SCAN 算法
注意:快速移动的过程中不处理任何请求!
5.2.2.6 C-LOOK 算法
注意:快速移动的过程中不处理任何请求!
5.2.3 减少磁盘延迟时间的方法
前面说的磁盘调度算法,优化的只能是寻道时间,而下面介绍的是关于其他方面优化的方法。
本小节思维导图如下图所示:

5.2.3.1 交替编号

5.2.3.2 磁盘地址结构的设计

5.2.3.3 错位命名
交替编号解决的是早期磁盘转速和磁头读取速度不同步的问题,而错位编号解决的是跨磁道读取时的衔接问题。
例如:
磁道1:
1 2 3 4 5 6 7 8
↑
这一圈读完
磁道2:
1 2 3 4 5 6 7 8
↑
错开一个位置
当磁头从磁道1切换到磁道2时,磁盘仍然在旋转。
如果两个磁道的“1号扇区”完全对齐:
磁道1: 1 2 3 4 5 6 7 8
↑
磁道2: 1 2 3 4 5 6 7 8
↑
切换过去后,可能已经错过了磁道2的第一个扇区,需要再转一圈。
错位命名就是故意让不同磁道的编号位置错开,使磁头切换后能够及时读到下一个逻辑扇区。
如图所示:

5.2.4 磁盘的管理
磁盘刚开始使用要进行 磁盘的初始化,即低级格式化:
由于扇区单位过小,为提高 I/O 效率,操作系统将多个连续扇区组合成 一簇(在文件系统中也称块)。为简化管理,通常将一簇分配给单个文件,因此文件占用空间为 簇的整数倍;即使文件大小小于一簇(甚至为 0 字节),仍需占用一整簇空间。
引导块: 引导块是用来存放操作系统的引导程序的一块地方。
传统 BIOS + MBR 启动过程可概括为:BIOS → MBR引导代码 → 分区引导程序 → 操作系统引导程序 → 操作系统内核。

坏块的处理:
如下图所示:

低级格式化(物理格式化) 与 高级格式化(逻辑格式化) 对比如下:
| 对比 | 低级格式化(物理格式化) | 高级格式化(逻辑格式化) |
|---|---|---|
| 对象 | 磁盘的物理结构 | 文件系统 |
| 主要目的 | 建立磁盘的基本物理存储格式 | 建立文件和目录的管理结构 |
| 主要操作 | 划分磁道、扇区等物理结构(磁盘分区指的是分扇区而不是分 C D 区,那是一个人为的操作) | 建立文件系统的数据结构 |
| 扇区 | 对扇区进行划分、设置相应控制信息 | 利用这些扇区组织文件系统 |
| 文件系统 | ❌ 不建立具体文件系统 | ✅ 建立文件系统 |
| 目录 | ❌ | ✅ 建立目录结构 |
| 空闲空间管理 | ❌ | ✅ 建立空闲空间管理结构 |
| 文件管理信息 | ❌ | ✅ 建立相应元数据 |
| 典型结果 | 磁盘具备基本的物理读写单位 | 磁盘可以按照某种文件系统存储文件 |
5.2.5 固态硬盘
固态硬盘(SSD)是一种基于 闪存技术(前面讲过的 ROM)的存储设备。其存储介质与 U 盘 类似,但容量更大,存储性能更优。
本小节思维导图如下:

动态磨损均衡:只在 动态变化的数据块之间 进行磨损均衡。 静态磨损均衡:连长期不变的 静态数据 也会搬移至高磨损块,使整个闪存的擦写次数更加均匀。通常比动态磨损均衡 表现性能更优。
而固态硬盘具体长下面这个样子,读写以页为单位进行,擦除以块的单位进行。由于 “块、页” 等术语经常会在 408 中的不同地方出现,注意进行区分,可以把块看成磁盘中的磁道,页看成磁道对应的扇区。
最后放个图,机械硬盘(磁盘)和固态硬盘的真实样子:
