Skip to content

参考:I/O 控制、磁盘调度与 RAID 速查

基于通用操作系统概念 · 核于 2026-08

速查

  • I/O 三控制方式:程序查询(忙等待,CPU 全占)→ 中断驱动(CPU 起止参与,每单位一中断)→ DMA(整块传完才一中断,CPU 几乎零干预)。
  • 设备三分类:块设备(磁盘,可寻址)、字符设备(键盘,字节流不可寻址)、网络设备(数据包)。
  • 缓冲三层次:单缓冲(互斥)、双缓冲(交替并行)、循环缓冲(环形队列,生产者-消费者)。
  • Spooling:磁盘 + 队列把独占设备(打印机)虚拟化成共享设备。
  • 磁盘访问三时间:寻道(机械移动,主导)+ 旋转延迟 + 传输。
  • 磁盘调度:FCFS(公平乱跑)/ SSTF(最近优先,会饥饿)/ SCAN(电梯,无饥饿)/ C-SCAN(单向服务)/ LOOK(到最远即返)。
  • RAID:0(条带无冗余)/ 1(镜像 50%)/ 5(分布式校验 (N-1)/N)/ 10(镜像+条带)。
  • SSD:无机械部件无寻道延迟,但有写入寿命与写放大,需 TRIM + 磨损均衡。

一、I/O 控制方式对比

维度程序查询中断驱动DMA通道
CPU 参与度全程忙等待每单位参与仅起止参与仅启动与收尾
中断频率每单位一次整块一次整任务一次
传输单位字/字节字/字节可编程任务链
数据通路设备↔CPU↔内存设备↔CPU↔内存设备↔内存设备↔内存
CPU 利用率极低最高最高
适用极简单/嵌入式慢速字符设备(键盘)块设备(磁盘/网卡)大型机
缺点CPU 100% 浪费高频小数据中断淹没总线竞争硬件复杂贵

二、磁盘调度算法对比

设当前磁头在 53,请求队列 98/183/37/122/14/124/65/67(磁盘 0-199):

算法策略移动距离(参考)优点缺点
FCFS严格到达顺序640公平寻道长,磁臂乱跑
SSTF最短寻道优先236平均性能好会饥饿(远处饿死)
SCAN电梯来回扫到边界~230无饥饿,稳定边界请求等待久
C-SCAN单向服务到边界,回起点不服务~392等待时间均匀返回空跑
LOOK到最远请求即返(不跑边界)~208实际常用,省空跑
C-LOOK单向到最远即返,回最近不服务~322均匀+省空跑
  • 选择经验:FCFS 公平但慢;SSTF 性能好但会饥饿,单用户/负载轻可用;SCAN/C-SCAN 无饥饿,多用户重负载用;实际系统多用 LOOK/C-LOOK(不跑空到边界)。
  • SSD 上:寻道时间恒定,SCAN 类算法失去意义,调度转向减少写放大。

三、RAID 级别对比

级别机制最少盘数容错(可坏几盘)空间利用率读性能写性能适用
RAID 0条带,无冗余20(坏一全毁)100%最高最高临时数据/缓存
RAID 1镜像21(每对)50%好(可并行)一般系统盘/重要小数据
RAID 5条带+分布式校验31(N-1)/N有写惩罚通用存储(主流)
RAID 6条带+双校验42(N-2)/N写惩罚更大大阵列
RAID 10镜像再条带(1+0)4每对可坏 150%很好数据库
  • RAID 0:只提速不容错,不可用于重要数据
  • RAID 5 写惩罚:每次写要读旧数据+旧校验、算新校验、写新数据+新校验(read-modify-write),小随机写性能受限。
  • RAID 不是备份:RAID 容硬件故障,但防不住误删、病毒、整阵列失窃——备份仍是必需。

四、缓冲层次对比

类型缓冲区数并行度适用
单缓冲1互斥(任一刻一方用)一般场景,CPU 与设备部分并行
双缓冲2交替并行(填 A 取 B)流式 I/O(音视频、串口)
循环缓冲N(环形)高并行,平滑突发生产者-消费者(网卡收包)
  • 缓冲 vs 缓存:缓冲 = 减 I/O 次数 + 速度匹配(数据必经);缓存 = 复用最近数据(命中不读设备)。

五、易错点清单

  • "DMA 不需要 CPU 参与":错。DMA 起止仍需 CPU(设置 DMAC、响应结束中断),只是中间传输不占 CPU。
  • "中断驱动比程序查询一定好":高频小数据时中断开销可能淹没 CPU,此时需缓冲/DMA。极端简单场景程序查询也够用。
  • "缓冲就是缓存":错。缓冲目的是减少 I/O 次数/速度匹配,数据必经缓冲;缓存目的是复用数据,命中即不读设备
  • "SSTF 是最优调度":错。SSTF 平均寻道短但会饥饿(远处请求饿死),且不一定总移动最少。
  • "SCAN 会饥饿":错。SCAN 是电梯算法,磁臂在每个方向都扫过全盘,无饥饿
  • "RAID 0 有冗余":错。RAID 0 是纯条带无任何冗余,坏一块全毁,可靠最差。
  • "RAID 5 可坏两块盘":错。RAID 5 只容任意 1 块坏;坏两块会丢数据(要坏两块用 RAID 6)。
  • "RAID 1 利用率是 100%":错。RAID 1 是镜像,两盘存相同数据,利用率 50%
  • "RAID 可以替代备份":错。RAID 只防单盘硬件故障,防不了误删/病毒/整体损毁,备份仍必需。
  • "SSD 寻道时间和机械盘一样":错。SSD 无机械部件无寻道时间,随机访问快百倍;但有写入寿命。
  • "磁盘访问三时间中传输时间最长":错。寻道时间(机械移动)最长且主导,所以调度算法优化寻道。
  • "程序查询方式 CPU 利用率高":错。程序查询 CPU 全程忙等待空转,利用率极低。
  • "C-SCAN 返回途中也服务请求":错。C-SCAN 返回起点途中不服务任何请求(快速空返),只单向服务。
  • "设备驱动运行在用户态":传统上驱动在内核态(Linux LKM),只有部分新型驱动(FUSE/UMDF)在用户态。内核态驱动 bug 会崩内核。

六、进阶方向(链接其他叶)

权威链接