QEQuantumEinsteinSearchCtrl/⌘K

第七章 输入/输出系统

4 分钟阅读1,62221 个小节
返回目录

第七章 输入/输出系统

7.1 I/O设备分类

分类方式类型示例
使用特性存储设备 / 输入设备 / 输出设备 / 交互式设备磁盘 / 键盘 / 打印机 / 显示器
传输速率低速 / 中速 / 高速键盘 / 打印机 / 磁盘
共享属性独占设备 / 共享设备 / 虚拟设备打印机 / 磁盘 / SPOOLing
传输单位块设备 / 字符设备磁盘 / 键盘

7.2 设备控制器

设备控制器的组成

  1. 设备控制器与CPU的接口:数据线+地址线+控制线,含数据寄存器、控制/状态寄存器
  2. 设备控制器与设备的接口:数据/控制/状态信号
  3. I/O逻辑:对命令译码,选择设备

CPU与控制器通信方式

  • 特定I/O指令形式:专门的I/O指令(如io-store
  • 内存映像I/O:把设备寄存器地址映射到内存地址空间,用普通存取指令访问

7.3 I/O通道

通道类型工作方式适用设备特点
字节多路通道按字节交叉低速设备含多个非分配型子通道,轮流使用
数组选择通道按数据块,独占高速设备一次只服务一个设备,利用率低
数组多路通道按数据块,多路高/中速设备既高速又高利用率

瓶颈问题解决:增加通路(一个设备连多个控制器,一个控制器连多个通道)


7.4 I/O控制方式(⭐⭐⭐)

方式数据传送单位CPU干预程度特点
程序直接控制(轮询)字节极高(忙等)CPU与设备串行,CPU利用率极低
中断驱动字节每字节中断一次CPU与设备可并行,但高速设备中断太频繁
DMA数据块每块中断一次4个寄存器:CR/MAR/DR/DC;数据直接内存↔设备
通道一组数据块仅启动和完成时干预执行通道程序,CPU/通道/设备三者并行

DMA控制器4个寄存器

  • CR(命令寄存器):存放CPU命令
  • MAR(内存地址寄存器):数据在内存的起始地址
  • DR(数据寄存器):暂存传送数据
  • DC(数据计数器):本次传送的字节数

7.5 I/O软件层次

从低到高:

  1. 中断处理程序:最底层,直接与硬件交互
  2. 设备驱动程序:抽象I/O请求→具体设备命令
  3. 与设备无关的I/O软件:设备命名、保护、分配、缓冲
  4. 用户层I/O软件:库函数、SPOOLing

7.6 设备分配

设备分配相关数据结构

  • DCT(设备控制表):每个设备一张
  • COCT(控制器控制表):每个控制器一张
  • CHCT(通道控制表):每个通道一张
  • SDT(系统设备表):全系统一张,记录所有设备

SPOOLing(假脱机技术)⭐

  • 物理上的独占设备改造为逻辑上的共享设备
  • 组成:输入井+输出井(在磁盘上)+ 输入缓冲区+输出缓冲区(在内存中)+ 输入/输出进程
  • 典型应用:共享打印机(多个进程的打印请求放入磁盘输出井排队,由守护进程依次打印)

7.7 缓冲区管理⭐

缓冲引入原因

  • 缓和CPU与I/O设备间的速度不匹配
  • 减少I/O中断次数
  • 解决基本数据单元大小不匹配

传输时间计算⭐

TT = 设备传送一块数据时间,MM = 将缓冲区数据传入用户区时间,CC = CPU处理一块数据时间

缓冲类型每块平均处理时间
单缓冲max(C,T)+M\max(C, T) + M
双缓冲max(C+M,T)\max(C+M, T)

缓冲池

  • 4种缓冲区:收容输入(hin)、提取输入(sin)、收容输出(hout)、提取输出(sout)

7.8 磁盘

磁盘访问时间⭐

Ta=Ts+Tr+TtT_a = T_s + T_r + T_t

  • TsT_s(寻道时间):磁头移到目标磁道
  • TrT_r(旋转延迟):等转到目标扇区。平均 Tr=12rT_r = \frac{1}{2r}rr为转速)
  • TtT_t(传输时间):Tt=brNT_t = \frac{b}{rN}bb为字节数,NN为每磁道字节数)

磁盘调度算法⭐⭐⭐

算法策略优缺点
FCFS先来先服务公平但效率低
SSTF最短寻道时间优先性能好但可能饥饿
SCAN(电梯)单方向扫到头再折返消除饥饿,对中间磁道有利
LOOK单方向扫描到该方向最远请求即折返避免无效扫到端点,平均寻道更优
C-SCAN(循环扫描)单方向扫到头,快速返回起点重新扫更均匀的等待时间
C-LOOK单方向扫描到最远请求后,快速回到最小请求再扫比C-SCAN更少无效移动
N-Step-SCAN将请求队列分段,段内SCAN避免磁臂粘着
FSCAN两个子队列,一个当前服务,新请求入另一个避免磁臂粘着

磁盘调度手工计算示例(⭐⭐ 高频选择/大题)

题目:磁盘请求队列为 {98,183,37,122,14,124,65,67}\{98, 183, 37, 122, 14, 124, 65, 67\},当前磁头在 53 号磁道,磁头正向磁道号增大方向移动。分别用 FCFS、SSTF、SCAN 计算总移动磁道数。

FCFS(按请求到达顺序): 53981833712214124656753→98→183→37→122→14→124→65→67 移动量 = 5398+98183+18337+37122+12214+14124+12465+6567|53-98|+|98-183|+|183-37|+|37-122|+|122-14|+|14-124|+|124-65|+|65-67| =45+85+146+85+108+110+59+2=640= 45+85+146+85+108+110+59+2 = \mathbf{640}

SSTF(每次选最近磁道): 53656737149812212418353→65→67→37→14→98→122→124→183 移动量 = 12+2+30+23+84+24+2+59=23612+2+30+23+84+24+2+59 = \mathbf{236}

SCAN(电梯算法,先向大方向扫到最远请求再折返): 53656798122124183371453→65→67→98→122→124→183→37→14 移动量 = 12+2+31+24+2+59+146+23=29912+2+31+24+2+59+146+23 = \mathbf{299}

⚠️ LOOK vs SCAN:LOOK 扫到该方向最远请求(183)即折返;SCAN 扫到磁盘端点(如199)才折返。题目需看清"SCAN"还是"LOOK"。

🎯 本章真题锚点与最短模板

  • 高频题号(2009-2025):2009Q32、2010Q32、2011Q26/Q32、2012Q24/Q26、2017Q32、2022Q30、2025Q23
  • 优质例题:比较程序直接控制/中断/DMA三种方式下CPU参与程度,并计算DMA每秒CPU占用比。
  • 最短解题模板
    1. 先判传输粒度:程序/中断=字节,DMA=块。
    2. CPU开销 = 次数 × 每次处理时间。
    3. CPU占比 = CPU开销 / 总时间。

⚡ 秒杀版口令卡(10秒回忆)

  • 口令:轮询最忙,中断次之,DMA最省CPU。
  • 口令:DMA传块,CPU只管前后处理。
  • 口令:占比=总CPU开销/总时长。