894 lines
39 KiB
Markdown
894 lines
39 KiB
Markdown
# 第九章 设备与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 → symbol;42 symbol → frame(588 bit);98 frame → sector(2352 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 = 314(PPT 仅给出关键几步的简化)
|
||
|
||
**注意**: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 SCAN(N步扫描)
|
||
|
||
将请求队列**分成若干长度为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/S(Client/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请求均表示为IRP,I/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 = 2;j = (100 mod 40)÷8 = 20÷8 = 2;k = 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。
|
||
- **考查方式**:计算题(最重要的题型)、简答。
|
||
- **可能的题目(计算)**:
|
||
|
||
**例题1:FCFS计算**
|
||
- 题目:磁头当前位置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**
|
||
|
||
**例题2:SSTF计算**
|
||
- 题目:同例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**
|
||
|
||
**例题3:SCAN计算**
|
||
- 题目:磁头在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**
|
||
|
||
**例题4:LOOK计算**
|
||
- 题目:同上,使用LOOK算法(不到端点)。
|
||
- 解答:
|
||
- 53 → 68 → 97 → 108 → 130 → 180 → 反向 → 42 → 15
|
||
- 移动量 = (180-53) + (180-15) = 127 + 165 = **292**
|
||
|
||
**例题5:C-SCAN计算**
|
||
- 题目:磁头在53,方向向内,请求序列同上,使用C-SCAN算法。
|
||
- 解答:
|
||
- 53 → 68 → 97 → 108 → 130 → 180 → 199 → 快速跳回 0 → 15 → 42
|
||
- 移动量 = (199-53) + (199-0) + (42-0) = 146 + 199 + 42 = **387**
|
||
|
||
**例题6:C-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 + s;Tr = 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
|
||
|
||
**例题2(PPT原题)**:见9.6.2节,185.4 ms。
|
||
|
||
### 考点11:缓冲技术
|
||
|
||
- **内容**:缓冲目的、Buffering vs Caching、缓冲池管理、单/双/循环缓冲。
|
||
- **考查方式**:填空、简答、PV操作。
|
||
- **可能的题目**:
|
||
1. 缓冲(Buffering)和缓存(Caching)的本质区别?答:缓冲只有一份数据用于速度匹配;缓存可有多个副本,利用局部性提高访问速度。
|
||
2. 公共缓冲 vs 私用缓冲?答:公共缓冲利用率高,私用缓冲简单但利用率低。
|
||
|
||
### 考点12:UNIX缓冲管理操作
|
||
|
||
- **内容**: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程序。
|
||
|
||
### 考点14:RAID级别对比(**必考表格**)
|
||
|
||
- **内容**: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=每磁道字节数。
|
||
|
||
### 考点20:N-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 LOOK:SCAN到端点,LOOK到最远请求。
|
||
- C-SCAN vs SCAN:C-SCAN单向扫描,跳回起点后同方向继续。
|
||
- C-LOOK 是 C-SCAN 的改进版。
|
||
- 注意方向:磁头移动方向由题给出,影响服务顺序。 |