Files
Operating-System/Exam/09第九章 设备与IO管理1.md
2026-07-01 15:05:34 +08:00

894 lines
39 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第九章 设备与I/O管理
## 一、知识讲解
本章是操作系统课程中连接硬件与软件的关键章节,主要解决**计算机如何与外部设备进行高效、可靠的数据交换**问题。涉及设备分类、物理特性、I/O传输方式、设备分配、缓冲、磁盘调度、RAID、虚拟设备SPOOLing等核心内容几乎每年必考。
---
### 9.1 设备及其分类
#### 9.1.1 按用途分类
设备按功能可分为三大类:
| 分类 | 含义 | 典型设备 |
|---|---|---|
| **存储型设备** | 用于永久/半永久保存数据 | 磁盘、磁带、光盘 |
| **I/O型设备** | 与外界进行数据交换的设备 | 扫描仪、打印机、键盘、鼠标、显示器 |
| **网络设备** | 用于网络通信 | 网卡、交换机、路由器 |
> **易考点**:键盘、显示器属于"输入/输出型设备"而非存储型;磁盘属于"存储型设备"但也参与I/O。
#### 9.1.2 按管理方式(共享属性)分类
这是**考试重点**PPT明确给出了三种分类
| 类型 | 特征 | 典型设备 |
|---|---|---|
| **共享型设备(块型)** | 多个进程的I/O操作以块为单位可以交叉交替 | 磁盘 |
| **独占型设备(块型)** | 多个进程的I/O操作以块为单位不宜交叉 | 磁带 |
| **独占型设备(字符型)** | 多个进程的I/O操作以字符为单位不能交叉 | 打印机、键盘 |
**为什么磁盘是"共享"而磁带是"独占"**
- 磁盘的寻道时间远大于旋转/传输时间,多进程交叉访问能"分摊"寻道延迟,提高吞吐。
- 磁带的读写头物理位置固定,多个进程交替使用需要频繁倒带,效率极低。
- 字符型设备(如打印机)只能顺序接收字符流,切换会破坏输出内容。
> **易错点**:不要把"块型共享"理解为任意交叉。**只能在块边界交叉**且通过调度算法优化参见9.6磁盘调度)。
---
### 9.2 设备的物理特性
#### 9.2.1 磁盘组的物理结构
一个磁盘组由**多个盘面**组成,每个盘面对应一个磁头,所有磁头固定在**引臂**上同步移动。
- **盘面Platter**:磁盘组的圆盘。
- **磁道Track**:盘面上的同心圆。
- **扇区Sector**:磁道被划分为若干扇区(最小读写单位)。
- **柱面Cylinder**:所有盘面上半径相同的磁道集合(同一引臂位置可同时访问)。
- **引臂Arm**:带动所有磁头径向移动的机械装置。
#### 9.2.2 磁盘的三维地址与一维地址转换
PPT给出了**核心公式**,这是考试常考题:
设磁盘有 `l` 个柱面,`m` 个盘面,`n` 个扇区/磁道,三维地址为 `(i, j, k)`,一维块号为 `b`
$$
b = i \times m \times n + j \times n + k
$$
反之(已知 `b``(i, j, k)`
$$
i = b \div (m \times n)
$$
$$
j = (b \mod (m \times n)) \div n
$$
$$
k = b \mod (m \times n) \mod n
$$
**例题PPT原题**:设 `l=2, m=3, n=3`,柱面号 i=0→0→1盘面号 j=0→1→2扇区号 k=0→1→2则块号 b=0,1,2,…,17 顺序排列。这就是"使相邻块物理上最近"的编址方法。
**为什么这样编址?**
- 同一柱面内的块读写只需切换磁头,无需移动引臂,**速度最快**
- 同一盘面内的相邻扇区只需等待旋转,**次快**
- 跨柱面读写需要移动引臂,**最慢**。
- 因此连续编号优先沿"扇区→盘面→柱面"扩展,使"逻辑相邻"的块在物理上也相邻,从而减少寻道时间。
#### 9.2.3 扇区交错Interleaving
磁盘旋转一周需要一定时间。当连续读多个扇区时CPU/DMA处理完一个扇区的数据后下一个扇区可能已经转过磁头需要等到该扇区再次旋转回来。解决方法**扇区交错编号**。
- **不交错**:扇区按 0,1,2,… 顺序编号 → 处理不及,会错过下一个扇区。
- **单交错factor=2**:编号为 0,2,4,1,3,5,… → 处理一个扇区后正好赶上下一扇区。
- **双交错factor=3**:处理更慢时使用。
> 交错因子需要根据CPU/DMA速度与磁盘转速匹配。现代磁盘采用**缓存**和**高速DMA**交错因子通常为1。
#### 9.2.4 光盘的物理特性(补充)
- 读取原理:**凹坑pit/凸起land**用激光反射强弱区分0/1。
- 螺旋线结构约22188圈展开长5.6km)。
- **恒定线密度CLV**内侧转速高530转/分外侧转速低200转/分),保证数据密度均匀、读取速度均匀。
- 帧结构14 bit → symbol42 symbol → frame588 bit98 frame → sector2352 byte
- 每个扇区含 2048 字节用户数据 + 288 字节 ECC/控制信息。
---
### 9.3 I/O 传输方式(四种核心方式)
这是**每年必考**的内容,必须掌握各方式的原理、流程图、优缺点对比。
#### 9.3.1 程序查询方式Programmed I/O / Polling
**原理**
1. CPU向设备控制器发出I/O命令启动设备。
2. CPU不断**循环查询**设备状态寄存器,看是否就绪。
3. 就绪后CPU逐字节/字地从设备读/写数据到内存。
4. I/O完成后CPU继续后续工作。
**致命缺点**
- **CPU与设备串行工作**设备工作时CPU只能空转等待。
- **浪费大量CPU时间**CPU被反复查询占用。
> **本质问题**CPU参与了数据搬运的全部过程。
#### 9.3.2 中断驱动方式Interrupt-driven I/O
**原理**
1. CPU发出启动命令后**立即返回继续做其他事**。
2. 设备准备好数据后向CPU发**中断**。
3. CPU响应中断进入中断处理程序读/写数据。
4. 处理完毕后返回原任务。
**优点**
- CPU与设备**并行工作**CPU利用率显著提升。
**缺点**
- 每传输一个字节/字都要中断一次,**中断开销大**。
- 设备多时,频繁中断严重影响系统性能("interrupt storm")。
#### 9.3.3 DMA方式Direct Memory Access
**原理**:引入**DMA控制器**让DMA接管"数据搬运"CPU只在开始和结束时参与。
**完整流程**PPT原文
1. **DMA编程**CPU设置DMA控制器源地址、目标地址、传输字节数启动设备。
2. 磁盘控制器将数据读入内部缓冲区并校验。
3. **DMA请求**DMA向磁盘控制器发读请求将内存地址放到地址总线。
4. **数据传输**:磁盘控制器将数据传至内存指定单元。
5. **回答**磁盘控制器向DMA发回答。
6. DMA将地址+1、计数-1重复②─④。
7. 计数为0时DMA向CPU发**中断**。
**优点**
- 数据传输由DMA控制**不占用CPU**。
- 中断次数少(**仅在传输开始和结束时中断一次**)。
- 适合**块设备**(磁盘、磁带)。
**与中断方式的关键区别**中断方式每个字节都中断DMA方式只在块传输结束时中断。
#### 9.3.4 通道方式Channel
**原理**:通道是**专门负责I/O操作的处理器**I/O处理机有自己的指令系统可以执行**通道程序**。
**通道的组成**
- **指令系统**:基本操作包括 控制、读、写、转移、结束。
- **指令格式**(操作码, 传输量, 特征位, 地址)。
- **运控部件**。
- **存储区**与CPU共享内存通道内有缓冲区
**关键数据结构**PPT重点
| 缩写 | 全称 | 作用 |
|---|---|---|
| **CAW** | Channel Address Word | 存放下一条通道命令的地址 |
| **CCW** | Channel Command Word | 通道命令字一条I/O指令 |
| **CSW** | Channel Status Word | 通道状态字(保存执行结果) |
| **CDW** | Channel Data Word | 通道数据字(存放数据) |
**执行过程**PPT流程
1. 按CAW取一条CCW。
2. 执行该CCW。
3. (CAW)+1 → CAW。
4. 判断是否为"通道结束"命令否则返回①是则向CPU发中断。
**关键特点**
- 一个通道程序可控制**多个设备进行多次I/O传输**DMA只能控制一个设备
- 通道独立于CPU工作进一步解放CPU。
#### 9.3.5 三种通道类型PPT强调
| 类型 | 子通道性质 | 连接设备 | 特点 |
|---|---|---|---|
| **字节多路通道** | 多个**非分配型**子通道 | 低速字符设备 | 多个设备分时共享通道,按字节交叉 |
| **数组选择通道** | 一个**分配型**子通道 | 高速块设备 | 一次独占通道,传输完才让出 |
| **数组多路通道** | 多个**非分配型**子通道 | 高速块设备 | 既高速又可分时共享,最强 |
> **分配型 vs 非分配型**:分配型 = 整个通道被一个设备独占;非分配型 = 多个设备分时使用通道。
#### 9.3.6 四种I/O方式对比必考表格
| 方式 | CPU与设备并行 | 数据传输单位 | 中断次数 | 适用 |
|---|---|---|---|---|
| 程序查询 | 否 | 字节 | 0轮询 | 极少用 |
| 中断驱动 | 是 | 字节 | 每字节一次 | 慢速字符设备 |
| DMA | 是 | 块 | 每块一次(首尾各一) | 块设备 |
| 通道 | 是 | 块/组 | 更少(多个块) | 复杂I/O |
---
### 9.4 设备的分配与去配
#### 9.4.1 数据结构4张表
设备分配依赖四个核心数据结构,**PPT考试必考**
| 缩写 | 全称 | 内容 |
|---|---|---|
| **UCB** | Unit Control Block设备控制块 | 设备标识、状态、相连通道、占有设备进程 |
| **CCB** | Channel Control Block通道控制块 | 通道标识、状态、类型、占有通道进程 |
| **COCT** | Channel-Operation Control Table通道-操作控制表PPT的"通道控制块" | — |
| **SDT** | System Device Table系统设备表 | 设备类、总数、设备等待队列、UCB表指针 |
**SDT是入口**每个设备类对应SDT中一项每项的指针指向该类的UCB表。
#### 9.4.2 独占型设备的分配与去配
用户使用独占设备的流程:**申请 → 使用 → 使用 → … → 使用 → 释放**
**申请步骤**
1. 根据设备类查SDT表。
2. `P(Sm)` 对该类设备的信号量做P操作。
3. 查UCB表找一空闲设备并分配。
**使用步骤**
1. 分配通道修改CCB
2. I/O传输。
3. 去配通道。
**释放步骤**
1. 找SDT对应入口。
2. 查UCB表去配。
3. `V(Sm)`
#### 9.4.3 共享型设备的分配与去配
共享设备的特征:
- **不需要"申请-释放"**!进程直接使用。
- 来自文件系统调用,每次读/写一块。
- 通常**经过缓冲**参见9.7)。
- 通过**排队优化**(磁盘调度)。
> **对比**:独占设备需要事先申请、事后释放;共享设备随用随开,调度算法决定访问顺序。
---
### 9.5 设备驱动
设备驱动是**操作系统中专门负责某个设备I/O的代码模块**,向上提供统一接口,向下控制硬件。
**驱动的工作流程**PPT流程图
1. 接收I/O请求 → 形成**通道程序**CCW序列
2. 将通道程序首地址 → **CAW**
3. **启动通道**
4. 通道执行CCW与设备交互传输数据。
5. 通道完成 → **向CPU发中断**
6. CPU响应中断执行中断处理程序。
通道程序可**静态编制**(编译时确定)或**动态生成**(运行时根据请求构造)。
---
### 9.6 设备调度(磁盘调度,**考试重中之重**
#### 9.6.1 调度目标
- **公平性**:所有请求都应被服务。
- **防止饿死**:避免某些请求长期得不到服务。
- **高效性**:减少磁盘引臂移动量(寻道时间),提高吞吐。
#### 9.6.2 磁盘I/O时间组成计算基础
访问一个磁盘块的总时间 Ta 由三部分组成:
$$
T_a = T_s + T_r + T_t
$$
| 符号 | 名称 | 公式 | 含义 |
|---|---|---|---|
| **Ts** | 寻道时间 | Ts = m × n + s | n=跨越磁道数m=每磁道移动时间s=启动时间 |
| **Tr** | 旋转延迟 | Tr = 1/(2r) | r=转速(转/秒),即旋转半周的平均时间 |
| **Tt** | 传输时间 | Tt = b/(rN) | b=读写字节数N=每磁道字节数 |
**例题计算**PPT例8-1
- 磁道0~199跨越1道需1ms每道100扇区转速6000 r/m = 100 r/s。
- 4次访盘
- 寻道20+90+40+15 = 165 道 → 165 ms。
- 旋转延迟1/(2×100) = 5 ms/次 → 20 ms。
- 传输1/(100×100) = 0.1 ms/次 → 0.4 ms。
- **总时间 = 165 + 20 + 0.4 = 185.4 ms**。
#### 9.6.3 磁盘调度算法(**必考计算**
设磁道请求序列:**130, 42, 180, 15, 108, 68, 97**,磁头当前位置 **53**
##### (1) FCFS先到先服务
按请求到达顺序服务。
- 路径53 → 130 → 42 → 180 → 15 → 108 → 68 → 97
- 移动量:(130-53) + (130-42) + (180-42) + (180-15) + (108-15) + (108-68) + (97-68)
- = 77 + 88 + 138 + 165 + 93 + 40 + 29 = **630**
**特点**:公平,但效率差,无寻道优化。
##### (2) SSTF最短寻找时间优先
每次选**距离磁头当前位置最近**的请求。
- 53 → 42差11→ 68差26→ 97差29→ 108差11→ 130差22→ 15差115→ 180差165
- **另一种常见正确路径**从53出发优先选最近的
- 53 → 68 → 97 → 108 → 130 → 180 → 42 → 15
- 移动量:(68-53)+(97-68)+(108-97)+(130-108)+(180-130)+(180-42)+(42-15)
- = 15 + 29 + 11 + 22 + 50 + 138 + 27 = **292**
- **PPT给出的移动量**314按 53→42→180→15 简化版本,实际有不同走法)
- 实际上"正确"的SSTF从53出发选最近的应该是 42所以 PPT 写 53→42 开始。
- 按 PPT 写法53→42→180→15 移动量 = (53-42)+(180-42)+(180-15) = 11+138+165 = 314PPT 仅给出关键几步的简化)
**注意**SSTF是**贪心算法**,可能**导致饿死**(远端请求长期等不到服务)。
##### (3) SCAN电梯算法
磁头在一个方向上**一直移动到最端**,途中服务所有请求,到端点后反向。
- 设方向由外向内(向内移动),磁道范围 0~199。
- 当前 53 向内(向高编号移动):
- 53 → 68 → 97 → 108 → 130 → 180 → 199 → (反向)→ 42 → 15 → 0
- **SCAN移动量**(199-53) + (199-0) = 146 + 199 = **345**
- **PPT简化写法**(53-0) + (180-0) = 233按简化假设
- 实际严格计算应包含端点。
**LOOK算法**PPT提及是SCAN的改进**不到端点**就反向,只服务到最远请求。
- 53 → 68 → 97 → 108 → 130 → 180 → (反向)→ 42 → 15
- 移动量:(180-53) + (180-15) = 127 + 165 = **292**
- **PPT给出的LOOK移动量**203按简化版 (53-15) + (180-15) = 38+165=203
> PPT 上的 SCAN/LOOK 数字可能采用"路径上经过的请求"的简化算法,考试时建议按标准定义计算并写出完整路径。
##### (4) C-SCAN循环扫描
单向扫描(只向一个方向),到达端点后**快速返回起点**,从起点重新开始同方向扫描。
- 53 向内53 → 68 → 97 → 108 → 130 → 180 → 199 → 快速回到 0 → 15 → 42
- **移动量**(199-53) + (199-0) + (42-0) = 146 + 199 + 42 = **387**
- 或更简单的算法:到达端点 + 跳回起点 + 起点到最远请求。
**C-LOOK**C-SCAN的改进回到最远请求而非端点。
- 53 → 68 → 97 → 108 → 130 → 180 → 跳回 15 → 42
- 移动量:(180-53) + (180-15) + (42-15) = 127 + 165 + 27 = **319**
**C-SCAN优点**:所有磁道被服务的**最长等待时间相同**,公平性好。
**缺点**disk head stickiness磁头粘性—— 大量请求集中在磁头移动方向上时,刚服务过的磁道要等一整圈才能再次服务。
##### (5) N-step SCANN步扫描
将请求队列**分成若干长度为N的子队列**每个子队列内部用SCAN算法服务完一个子队列后再服务下一个。
- **N很大时** → 接近SCAN算法。
- **N=1时** → 退化为FCFS。
-N=4磁头在20向内请求分组成 [12,5,7,30]、[60,77,13,26]、[61,80,53,66]。
- 服务顺序20→30→12→7→5 → 60→77→13→26 → 80→66→61→53
##### (6) FSCAN冻结扫描
用**两个队列**:服务队列 + 请求队列。
- 用SCAN扫描服务队列期间**新到达的请求入请求队列**。
- 服务队列扫完后交换两队列身份。
> FSCAN 是 N-step SCAN 的特例N=服务队列长度)。
#### 9.6.4 调度算法对比
| 算法 | 公平性 | 寻道效率 | 饿死可能 | 复杂度 |
|---|---|---|---|---|
| FCFS | 高 | 差 | 无 | 最低 |
| SSTF | 低 | 好 | 有 | 中 |
| SCAN/LOOK | 中 | 好 | 无 | 中 |
| C-SCAN/C-LOOK | 高 | 好 | 无(最长等待时间相同) | 中 |
| N-step SCAN | 高 | 好 | 无 | 高 |
| FSCAN | 高 | 好 | 无 | 中 |
---
### 9.7 缓冲技术Buffering
#### 9.7.1 缓冲的目的
**解决设备数据到达与离开速度不一致**的问题。在内存中设置缓冲区作为"中转站"。
#### 9.7.2 Buffering vs Caching
- **Buffering缓冲**:数据**只有一份**,用于速度匹配。
- **Caching缓存**:数据**可能有多个副本**fast中存slow的副本利用局部性原理提高访问速度。
#### 9.7.3 硬缓冲 vs 软缓冲
- **硬缓冲**:设在设备内部(如打印机自带缓冲区)。
- **软缓冲**:设在内存系统空间中(操作系统管理)。
#### 9.7.4 私用缓冲 vs 公共缓冲
- **私用缓冲**:一个缓冲区与一个固定设备绑定。简单但**利用率低**。
- **公共缓冲(缓冲池)**:系统统一管理,按需动态分配。**利用率高**是现代OS采用方式。
#### 9.7.5 缓冲池管理PPT伪代码
```
Var buf_num: semaphore; // 初始 n表示空闲缓冲数
mutex: semaphore; // 初始 1互斥访问缓冲链
申请缓冲: 释放缓冲:
P(buf_num) P(mutex)
P(mutex) 空缓冲入链尾
取链头空缓冲 V(mutex)
V(mutex) V(buf_num)
```
#### 9.7.6 单缓冲、双缓冲、循环缓冲(扩展)
- **单缓冲**1个缓冲区设备和处理器串行工作设备写满缓冲区→处理器读走→再启动设备。性能 = max(T, C)。
- **双缓冲**2个缓冲区交替使用实现设备和处理器的并行生产者-消费者经典模式)。性能 = max(T, C),但可达流水线效果。
- **循环缓冲**N个缓冲区组成环形队列支持双缓冲无法处理的突发流量。
- **缓冲池**多个缓冲区统一管理可服务多个I/O设备。
#### 9.7.7 输入设备的缓冲实现PPT流程
- **进程方面**申请空缓冲→启动设备→等待→从io链取缓冲→信息送到进程空间→释放空缓冲。
- **中断方面**传输完毕→申请空缓冲→启动设备→缓冲入io链尾→若有等待进程唤醒。
> 注意"申请空缓冲"在进程侧和中断侧**都会发生**:进程要缓冲处理数据,中断要缓冲准备下次接收。
#### 9.7.8 块型设备缓冲UNIX风格
- 50个缓冲区每个514字节512数据+2控制
- 缓冲区属于某设备或在自由链 `bfreelist` 上。
- 关键操作:
- `getblk(dev, blkno)`:获取/分配一个缓冲块。
- `bread(dev, blkno)`:读一个块,若已在缓存直接返回。
- `breada(dev, blkno, rablkno)`:读主块同时预读下一块。
- `bwrite(bp)`:同步写。
- `bawrite(bp)`:异步写,立即释放。
- `bdwrite(bp)`延迟写标记B_DELWRI腾出缓冲前才实际写盘
- `brelse(bp)`:释放缓冲入空闲链。
> **预读readahead和延迟写delayed write** 是缓冲的核心优化思想。
---
### 9.8 输入输出进程
#### 9.8.1 概念
**专门负责I/O传输的进程**。将I/O封装为独立的"服务进程",形成 **C/SClient/Server模式**
#### 9.8.2 特点
- **界面清晰**,上层进程通过消息/系统调用请求I/O服务。
- **两次进程切换**请求进程→I/O进程→I/O完成→请求进程有**速度开销**。
---
### 9.9 RAID 技术
#### 9.9.1 RAID 概念
- **RAID**Redundant Array of Inexpensive Disks廉价磁盘冗余阵列后又叫 Redundant Array of Independent Disks**独立磁盘冗余阵列**)。
- 由 UC Berkeley 的 **David A. Patterson** 等提出。
- 背景磁盘访问速度增长远慢于CPU和内存多盘并行是解决方案。
- 目标:**高性能 + 高可靠性**。
#### 9.9.2 RAID 核心概念
- **物理上**:多个独立磁盘。
- **逻辑上**:操作系统看作**一个单一的逻辑盘**。
- 数据分布存储在多个物理盘上。
- 利用部分冗余容量存放**校验信息**,保证故障后可恢复。
#### 9.9.3 硬件RAID vs 软件RAID
| 维度 | 硬件RAID | 软件RAID |
|---|---|---|
| 实现 | 专用RAID控制器 | 操作系统软件 |
| 成本 | 高 | 低 |
| 性能 | 高(独立硬件) | 较低占用CPU |
| 支持级别 | 全部 | 通常仅0,1,5 |
| 引导卷支持 | 全部 | **不能作为引导卷** |
| 兼容性 | 好 | 与其他软件可能冲突 |
| 可靠性 | 高 | 软件bug风险 |
#### 9.9.4 RAID级别**必考表格**
| Level | 分条粒度 | 读并发 | 写并发 | 冗余方式 |
|---|---|---|---|---|
| **0** | 块 | 支持 | 支持 | **无**(无容错) |
| **1** | 块 | 支持 | **不支持** | 镜像100%冗余) |
| **2** | 位 | 不支持 | 不支持 | 汉明纠错码 |
| **3** | 位 | 不支持 | 不支持 | 单个奇偶校验 |
| **4** | 块 | 支持 | **不支持** | 块级异或校验(校验盘独立) |
| **5** | 块 | 支持 | **支持** | 块级分布式异或校验 |
##### RAID 0数据分条
- 数据按**块**循环分条到多个磁盘。
- 优点访问速度快空间利用率100%。
- 缺点:**无容错**,任一盘坏全部数据丢失。
##### RAID 1镜像
- 数据按**块**分条,**完全相同的数据存两份**(分布镜像)。
- 读:可读任一副本 → 速度快。
- 写:必须写两个盘 → 写速度无提升。
- 空间利用率仅 **50%**,但**可靠性最高**。
##### RAID 2位级汉明码
- 数据按**位**分条到多个数据盘。
- 校验盘存放**汉明纠错码**可发现2位错误、纠正1位错误。
- 缺点:需要较多校验盘,成本高;写必须访问所有盘,速度慢。
##### RAID 3位级单奇偶校验
- 数据按**位**分条到数据盘,**一个独立盘**存放**奇偶校验位**。
- 校验计算P = bit0 XOR bit1 XOR bit2 XOR bit3设4个数据盘
- 故障恢复bit_i = P XOR (其余所有bit的异或)。
- 缺点:读写都要访问所有盘,多请求**无法并行**。
##### RAID 4块级异或校验
- 数据按**块**分条,校验盘**独立**。
- 读操作**可并行**(只需访问相关数据盘)。
- 写操作要更新校验盘,**校验盘成为瓶颈****写不可并行**。
- 校验更新公式:`P'_4~7 = (block4 XOR block4') XOR P_4~7`
- 故障恢复:`block7 = P_4~7 XOR block4 XOR block5 XOR block6`
##### RAID 5块级分布式校验
- 数据按**块**分条,校验信息**循环分布在各盘**上(无独立校验盘)。
- 读写都**可并行**(只要不涉及同一数据盘和校验盘)。
- 空间利用率 `(N-1)/N`
- 任意盘故障都可通过其余 `N-1` 个盘恢复。
- 至少需要 **3 个盘**
#### 9.9.5 RAID 优缺点总结
- 优点:读/写速度提升、数据可靠性高、容量扩大。
- 缺点成本上升、软件RAID性能受限、引导卷限制、故障恢复复杂。
---
### 9.10 虚拟设备SPOOLing
#### 9.10.1 概念
利用**共享型设备(磁盘)**实现数量较多、速度较快的**独占型设备**。
**引入原因**:用户直接使用独占设备(如打印机)效率低:
- CPU快、打印机慢 → 速度不匹配。
- 占有期间未必一直在用 → 设备利用率低。
- 进程独占设备 → 其他进程等待。
#### 9.10.2 实现方法
在进程和独占设备之间增加**共享设备(磁盘)作为缓冲**
- 进程→虚拟设备:间断传输(向磁盘写)。
- 虚拟设备→独占设备连续传输由SPOOLing控制
#### 9.10.3 输入型虚拟设备SPOOLing 输入)
- 用户→**输入井**(磁盘上的虚拟输入区)。
- **预输入进程**:把输入机数据预先读入输入井。
- 进程从输入井读数据(高速)。
**申请 → 使用 → 释放**
- 申请:分配虚设备→分配实设备→数据由实设备→虚设备→去配实设备。
- 使用:数据由虚设备→进程空间。
- 释放:去配虚设备。
#### 9.10.4 输出型虚拟设备SPOOLing 输出)
- 进程→**输出井**(磁盘上的虚拟输出区)。
- **缓输出进程**:把输出井数据送往输出机。
- 进程向输出井写数据(高速)。
#### 9.10.5 SPOOLing 系统结构
**SPOOLing** = **S**imultaneous **P**eripheral **O**perations **O**n-**L**ine同时外围设备在线操作
由 **SPOOLing程序控制通道**完成磁盘与外围设备之间的数据传送。
**核心组成**
1. **输入井 / 输出井**:磁盘上的存储区。
2. **输入SPOOLing进程 / 输出SPOOLing进程**:后台进程。
3. **作业控制块JCB**:管理作业信息。
**JCB内容**
- 作业标识、用户标识、作业状态、调度参数
- 作业位置、资源需求、进入时间、处理时间、记账信息
#### 9.10.6 作业状态变迁SPOOLing
```
提交 → 后备 → 执行 → 完成 → 退出
```
- **预输入程序**:扫描"提交"作业,将其读入输入井("后备")。
- **作业调度程序**:从"后备"作业中按调度算法选作业进入内存("执行")。
- **作业调度程序2**:处理终止作业,将其状态改为"完成",唤醒"完成"作业等待者。
- **SPOOLing输出程序**:将"完成"作业从输出井送往输出机,状态改"退出"。
#### 9.10.7 SPOOLing 优点
- **设备独立性**:用户面向虚设备,不直接面对物理设备。
- **提高设备利用率**:独占设备变为可共享。
- **提高CPU效率**CPU与设备并行工作。
---
### 9.11 稳定存储器Stable Storage
#### 9.11.1 定义
**不丢失信息的存储器**称为稳定存储器。
#### 9.11.2 实现策略
- 不存在绝对可靠的存储介质 → 采用**冗余**策略。
- 在**两种失效独立**的介质上构建(如同型号磁盘的两份拷贝)。
#### 9.11.3 保存操作
1. 将信息写到**第一个存储块**。
2. 第一个成功后,将**相同信息写到第二个存储块**。
3. 仅当第二次传输也成功时,整个保存操作完成。
#### 9.11.4 恢复操作
读取一对数据块,鉴别内容:
- **一对完全相同且无误** → 正常。
- **一块检测到错误** → 用另一块取代。
- **两块都无误但内容不同** → 用**第二块**内容覆盖第一块(第二块是最新写入的)。
> 第二块优先于第一块:因为第一块可能由于第一次写时故障导致内容陈旧。
---
### 9.12 系统举例Windows 10 I/O 子系统
PPT提到的主要特点
- **设备驱动**支持多种可装卸文件系统FAT32、OS/2、HPFS、CDFS等设备驱动以DLL形式动态加载可用高级语言编写移植性好。
- **I/O请求包IRP**I/O管理器以IRP方式驱动每个I/O请求均表示为IRPI/O管理器协调各组件。
- **异步I/O**:通过**系统线程**实现调用进程不必等待I/O完成。底层使用**APC异步过程调用**机制。
- **映像文件I/O**:支持。
---
## 二、考点总结
### 考点1设备分类用途+管理方式)
- **内容**按用途分为存储型、I/O型、网络设备按管理方式分为块型共享、块型独占、字符型独占。
- **考查方式**:选择、填空。
- **可能的题目**
1. 下列属于"块型共享设备"的是?答:磁盘。
2. 打印机属于哪一类设备?答:独占型(字符型)。
### 考点2磁盘三维/一维地址转换
- **内容**`b = i × m × n + j × n + k`;反推公式:`i = b÷(m×n), j = (b mod (m×n))÷n, k = b mod (m×n) mod n`
- **考查方式**:计算题、填空。
- **可能的题目**
1. 磁盘 l=4, m=5, n=8求块号 100 对应的 (i,j,k)。
i = 100÷40 = 2j = (100 mod 40)÷8 = 20÷8 = 2k = 100 mod 40 mod 8 = 20 mod 8 = 4。所以 (2,2,4)。
### 考点3扇区交错编号
- **内容**:磁盘高速旋转,处理一个扇区的时间内扇区可能转过磁头,需要交错编号(单交错、双交错)。
- **考查方式**:简答、填空。
- **可能的题目**
1. 为什么磁盘需要扇区交错编号?答:因为磁盘旋转时,处理完一个扇区数据后下一扇区可能已转过磁头;交错编号使下一扇区恰好转到磁头下,保证连续读。
### 考点4四种I/O传输方式对比
- **内容**程序查询、中断、DMA、通道的原理、并行性、中断次数、适用场景。
- **考查方式**:选择、填空、简答。
- **可能的题目**
1. 哪种I/O方式适合块设备且CPU开销最小通道方式。
2. DMA方式中断发生在什么时候只在传输开始设置和传输结束时各一次整块传输开始和结束
3. 程序查询方式的主要缺点CPU与设备串行工作CPU空转浪费大量时间。
### 考点5通道的三种类型
- **内容**:字节多路通道(低速字符设备分时共享)、数组选择通道(高速独占)、数组多路通道(高速分时共享)。
- **考查方式**:选择、填空。
- **可能的题目**
1. 连接高速块设备且支持分时共享的通道是?答:数组多路通道。
2. 字节多路通道适合连接哪类设备?答:低速字符设备。
### 考点6通道程序相关数据结构
- **内容**CAW、CCW、CSW、CDW的含义。
- **考查方式**:填空、选择。
- **可能的题目**
1. 存放下一条通道命令地址的寄存器是CAW。
2. 保存通道执行结果的是CSW。
### 考点7设备分配的数据结构
- **内容**UCB、CCB、SDT的作用与关系。
- **考查方式**:填空、简答。
- **可能的题目**
1. 系统设备表的英文缩写SDT。
2. 设备分配的入口表是SDT。
### 考点8独占设备 vs 共享设备的分配差异
- **内容**:独占设备需要"申请-使用-释放"流程;共享设备直接使用,由调度算法决定顺序。
- **考查方式**:简答。
- **可能的题目**
1. 共享型设备的分配与独占型有何不同共享设备无需事先申请和事后释放进程直接使用每次I/O一块通常经过缓冲由调度算法决定访问顺序。
### 考点9磁盘调度算法**计算必考**
- **内容**FCFS、SSTF、SCAN/LOOK、C-SCAN/C-LOOK、N-step SCAN、FSCAN。
- **考查方式**:计算题(最重要的题型)、简答。
- **可能的题目(计算)**
**例题1FCFS计算**
- 题目磁头当前位置53请求序列130、42、180、15、108、68、97磁道范围0~199。求FCFS的访问顺序和总移动量。
- 解答53→130→42→180→15→108→68→97
- 移动量 = (130-53) + (130-42) + (180-42) + (180-15) + (108-15) + (108-68) + (97-68)
- = 77 + 88 + 138 + 165 + 93 + 40 + 29 = **630**
**例题2SSTF计算**
- 题目同例1使用SSTF算法。
- 解答(贪心,每次选距离最近的):
- 53 → 42差11→ 68差26→ 97差29→ 108差11→ 130差22→ 15差115→ 180差165
- 移动量 = 11 + 26 + 29 + 11 + 22 + 115 + 165 = **379**
**例题3SCAN计算**
- 题目磁头在53方向向内向大编号磁道0~199请求序列130,42,180,15,108,68,97。使用SCAN算法。
- 解答:
- 53 → 68 → 97 → 108 → 130 → 180 → 199 → 反向 → 42 → 15 → 0
- 移动量 = (199-53) + (199-0) = 146 + 199 = **345**
**例题4LOOK计算**
- 题目同上使用LOOK算法不到端点
- 解答:
- 53 → 68 → 97 → 108 → 130 → 180 → 反向 → 42 → 15
- 移动量 = (180-53) + (180-15) = 127 + 165 = **292**
**例题5C-SCAN计算**
- 题目磁头在53方向向内请求序列同上使用C-SCAN算法。
- 解答:
- 53 → 68 → 97 → 108 → 130 → 180 → 199 → 快速跳回 0 → 15 → 42
- 移动量 = (199-53) + (199-0) + (42-0) = 146 + 199 + 42 = **387**
**例题6C-LOOK计算**
- 题目同上使用C-LOOK。
- 解答:
- 53 → 68 → 97 → 108 → 130 → 180 → 跳回最远请求 15 → 42
- 移动量 = (180-53) + (180-15) + (42-15) = 127 + 165 + 27 = **319**
### 考点10磁盘I/O时间计算
- **内容**Ts = m×n + sTr = 1/(2r)Tt = b/(rN)Ta = Ts + Tr + Tt。
- **考查方式**:计算题。
- **可能的题目**
**例题1**磁盘转速7200 r/m每道100扇区每道8192字节跨越一道需0.5ms,启动时间忽略。读取一个扇区的时间?
- 解答:
- r = 7200/60 = 120 r/s
- Tr = 1/(2×120) = 1/240 s ≈ 4.17 ms
- Tt = 8192/(120×8192) = 1/120 s ≈ 8.33 ms
- 平均寻道需跨越约50道Ts = 50×0.5 = 25 ms
- 总时间 ≈ 25 + 4.17 + 8.33 ≈ 37.5 ms
**例题2PPT原题**见9.6.2节185.4 ms。
### 考点11缓冲技术
- **内容**缓冲目的、Buffering vs Caching、缓冲池管理、单/双/循环缓冲。
- **考查方式**填空、简答、PV操作。
- **可能的题目**
1. 缓冲Buffering和缓存Caching的本质区别缓冲只有一份数据用于速度匹配缓存可有多个副本利用局部性提高访问速度。
2. 公共缓冲 vs 私用缓冲?答:公共缓冲利用率高,私用缓冲简单但利用率低。
### 考点12UNIX缓冲管理操作
- **内容**getblk、bread、breada、bwrite、bawrite、bdwrite、brelse。
- **考查方式**:填空、简答。
- **可能的题目**
1. breada函数的作用读主块时同时启动预读下一块异步预读
2. bdwrite的作用延迟写标记B_DELWRI腾出缓冲时才实际写盘。
### 考点13虚拟设备与SPOOLing
- **内容**虚拟设备实现方法、SPOOLing系统组成、JCB内容、作业状态变迁。
- **考查方式**:选择、填空、简答。
- **可能的题目**
1. SPOOLing的含义Simultaneous Peripheral Operation On-Line同时外围设备在线操作
2. 虚拟设备是什么?答:用共享型设备实现的、速度较快数量较多的"独占设备"。
3. SPOOLing系统主要由哪几部分组成输入井/输出井、输入/输出SPOOLing进程、JCB、通道、SPOOLing程序。
### 考点14RAID级别对比**必考表格**
- **内容**RAID 0~5的对比分条粒度、读写并发、冗余方式
- **考查方式**:选择、填空、简答。
- **可能的题目**
1. RAID 0 的特点块级分条无容错速度最快空间利用率100%。
2. RAID 5 相比 RAID 4 的优势RAID 5将校验信息循环分布到所有盘上消除校验盘瓶颈读写都可并行不涉及同盘时
3. RAID 5 至少需要几个盘3个。
4. RAID 1 空间利用率50%。
5. RAID 2 和 RAID 3 的区别?答:都按位分条,但 RAID 2 用汉明纠错码可发现2位错误纠正1位RAID 3 用单个奇偶校验位只能纠正1位错
6. RAID 5 故障恢复公式?答:某块 = 其所在组的校验块 XOR 其余所有数据块。
### 考点15硬件RAID vs 软件RAID
- **内容**硬件RAID性能高、价格高软件RAID便宜但性能差、不能做引导卷、仅支持0/1/5级。
- **考查方式**:选择、简答。
- **可能的题目**
1. 软件RAID有哪些缺点性能差、不能做引导卷、仅支持0/1/5级、软件兼容性问题、可靠性受软件bug影响。
2. 软件RAID支持哪些级别通常仅0、1、5。
### 考点16稳定存储器
- **内容**:定义、保存策略(写两次)、恢复策略(第二块优先)。
- **考查方式**:填空、简答。
- **可能的题目**
1. 恢复时两块内容不同但都无误,应如何处理?答:用第二块覆盖第一块(因为第二块是后写的,应为最新)。
2. 为什么需要稳定存储器?答:现实中不存在绝对可靠的存储介质,需要冗余策略保证不丢信息。
### 考点17设备驱动的执行流程
- **内容**形成通道程序→设置CAW→启动通道→执行CCW→中断处理。
- **考查方式**:简答、填空。
- **可能的题目**
1. 设备驱动完成I/O的关键步骤①接收I/O请求形成通道程序②将首地址送CAW③启动通道④通道执行CCW与设备交互⑤完成后向CPU发中断⑥CPU处理中断。
### 考点18扇区交错编号原因
- **内容**:磁盘旋转时,处理完一个扇区数据的时间,下一扇区可能已转过磁头。
- **考查方式**:简答。
- **可能的题目**
1. 简述扇区交错编号的必要性。答:磁盘高速旋转,从一个扇区读取到下一个扇区就位时存在时间差,若按物理顺序编号,处理完前一个扇区时下一扇区已转过磁头,需等一整圈才能再读,因此采用交错编号使下一扇区恰好转到磁头下。
### 考点19三种磁盘I/O时间及计算公式
- **内容**Ts = m×n + s寻道时间Tr = 1/(2r)旋转延迟Tt = b/(rN)(传输时间)。
- **考查方式**:计算题、填空。
- **可能的题目**
1. 平均旋转延迟公式Tr = 1/(2r),即旋转半周的时间。
2. 传输时间公式Tt = b/(rN)b=读写字节数r=转速(转/秒N=每磁道字节数。
### 考点20N-step SCAN 与 FSCAN
- **内容**N-step SCAN将请求分成长度为N的子队列FSCAN用两个队列服务+请求)。
- **考查方式**:填空、简答。
- **可能的题目**
1. N=1的N-step SCAN等价于FCFS。
2. N很大的N-step SCAN等价于SCAN。
3. FSCAN的两个队列服务队列和请求队列。
---
### 三、磁盘调度计算典型例题(综合)
**题目**设磁盘磁道编号0~199磁头当前位置在53方向向大编号移动请求序列为130, 42, 180, 15, 108, 68, 97。分别使用 FCFS、SSTF、SCAN、LOOK、C-SCAN、C-LOOK 计算**访问顺序、总移动量、平均寻道长度**。
**解答总结表**
| 算法 | 访问顺序 | 总移动量 | 平均寻道 |
|---|---|---|---|
| FCFS | 53→130→42→180→15→108→68→97 | 630 | 90 |
| SSTF | 53→42→68→97→108→130→15→180 | 379 | 54.1 |
| SCAN | 53→68→97→108→130→180→199→0→15→42 | 345 | 34.5 |
| LOOK | 53→68→97→108→130→180→42→15 | 292 | 36.5 |
| C-SCAN | 53→68→97→108→130→180→199→0→15→42 | 387 | 38.7 |
| C-LOOK | 53→68→97→108→130→180→15→42 | 319 | 39.9 |
> SCAN包含端点199→0的跳跃LOOK不到端点C-SCAN到端点后快速跳回起点C-LOOK跳回最远请求。
**关键考点**
- SCAN vs LOOKSCAN到端点LOOK到最远请求。
- C-SCAN vs SCANC-SCAN单向扫描跳回起点后同方向继续。
- C-LOOK 是 C-SCAN 的改进版。
- 注意方向:磁头移动方向由题给出,影响服务顺序。