第12周 星期二 第2大节 设备管理

  • 视频:screen_操作系统与分布式计算_第12周_星期二_第2大节.mp4
  • 字幕:transcripts/第12周_星期二_第2大节.srt

时间轴

  • [17:56] 进入设备管理模块
  • [25:14] 设备分类:字符设备/块设备/网络设备
  • [27:35] I/O体系结构:端口、接口、总线、设备控制器
  • [41:12] 程序直接控制方式(CPU轮询)
  • [43:40] 中断驱动I/O方式
  • [53:29] DMA直接存储器访问
  • [58:44] 通道控制方式(I/O处理机)
  • [01:15:50] 独占设备 vs 分时共享设备,SPOOLing
  • [01:23:02] I/O软件层次:中断处理→设备驱动→设备无关→用户层
  • [01:49:02] 缓冲技术:单缓冲、双缓冲、循环缓冲
  • [02:18:04] 磁盘物理结构及访问时间

设备管理概述

设备管理是操作系统最后一大核心功能模块。核心目标:

  • 提高CPU与I/O设备的并行程度(CPU高速 vs I/O低速的矛盾)
  • 屏蔽设备硬件差异,为上提供统一使用接口
  • 设备独立性:上层软件不因底层硬件更换而修改

设备管理主要任务:

  1. 记录/掌握设备使用状态
  2. 完成设备的分配与释放
  3. 缓冲区管理
  4. 物理I/O操作(驱动程序)
  5. 提供统一接口、设备访问控制
  6. I/O缓冲与调度

设备分类

类型功能传输单位典型设备
字符设备(人机交互)人与机器交互字符鼠标、键盘、显示器
块设备(存储)数据读写存储块/扇区硬盘、光盘、U盘
网络设备网络通信报文网卡

I/O体系结构

基本概念

  • I/O端口:I/O总线上设备的地址集,每个设备寄存器对应一个端口号
  • I/O接口:端口与设备控制器之间的硬件电路
  • I/O总线:CPU与I/O设备之间的数据通路
  • 设备控制器(I/O固件):介于CPU与设备之间的电子部分

I/O设备组成

  • 机械部分:设备本身的外观/机械组件
  • 电子部分 = 设备控制器:操作系统实际打交道的对象,负责接收CPU命令、控制机械部分工作

设备控制器寄存器

  1. 控制寄存器:接收CPU发来的读写指令
  2. 状态寄存器:记录设备状态(忙/闲/正常/故障)
  3. 数据缓冲寄存器:暂存传输数据

控制器还负责比特流→字节/块的组装转换。磁盘控制器将串行位流组装为字节块,存入内部缓冲区,校验数据正确性后传入用户缓冲区。

I/O控制方式演变

1. 程序直接控制方式(CPU轮询)

  • 工作原理:CPU直接控制I/O全过程(发指令→测试状态→传数据→等待完成)
  • 优点:实现简单,无额外硬件
  • 缺点:CPU全程等待低速I/O,资源极大浪费
  • 示意图:CPU反复检查设备状态寄存器,忙则等待

2. 中断驱动I/O方式

  • 工作原理:CPU发指令后即可执行其他任务;设备完成时发中断通知CPU;CPU响应中断、完成数据传输
  • 优点:CPU与I/O设备可并行工作,CPU利用率显著提高
  • 缺点:CPU仍需参与每次数据传输(通过寄存器转发),数据量有限,频繁中断对磁盘等高速设备效率仍低

3. DMA方式(直接存储器访问)

  • 工作原理
    1. CPU向DMA控制器发送指令(操作类别、设备地址、内存缓冲区地址、数据量)
    2. CPU转去做其他工作
    3. DMA接管总线控制权,直接在外设与内存之间传输数据(不经过CPU寄存器转发)
    4. 传输完成后DMA向CPU发中断报告
  • 优点:CPU只干预开始和结束,数据传输无需CPU参与
  • 应用:磁盘访问均采用DMA方式。DMA控制器可集成于磁盘控制器或主板共享

4. 通道控制方式(I/O处理机)

  • 本质:通道是一个专用的I/O处理机(简单处理机),聚焦于执行I/O操作
  • 工作原理
    1. CPU发出一条I/O指令,给出通道程序的首地址
    2. 通道读取通道程序,自行执行I/O操作
    3. 完成后通道与设备一起发中断报告CPU
  • 与DMA区别:通道有自己的指令系统,可以执行通道程序;一个通道可服务多个设备
  • 优点:进一步减少CPU干预,CPU与通道可并行,不同通道及外设间也可并行
  • 通道类型
    • 字节多路通道:连接慢速设备(键盘、打印机)
    • 数组多路通道:连接高速存储设备(磁盘)
    • 选择通道

独占设备 vs 分时共享设备 & SPOOLing

独占设备

  • 一次只能由一个进程使用(如打印机)
  • 申请时必须检查设备状态:空闲→分配,占用→阻塞等待

分时共享设备

  • 可以交替服务多个进程的I/O请求(如磁盘)
  • 每次I/O操作独立可中断,不同进程的I/O请求可交错执行
  • 申请时无需检查占用状态,只需增加使用者计数

SPOOLing(假脱机技术)

  • 核心思想:用外存(磁盘)空间把独占设备改造为逻辑上可共享的虚拟设备
  • 工作流程(以打印机为例):
    1. 打印任务并非直接发送给打印机
    2. 在磁盘上开辟缓冲池(输入井/输出井)
    3. 打印数据先写入磁盘缓冲池
    4. 打印守护进程按顺序从缓冲池取出文件逐项打印
  • 效果:物理上独占的打印机在用户看来可以共享(多个程序可同时提交打印任务)

I/O软件层次结构

┌──────────────────────────────────────┐
│        用户层(系统调用接口)         │ ← 申请/读/写/释放设备
├──────────────────────────────────────┤
│      设备无关I/O软件(设备独立层)    │ ← 设备名→驱动映射、访问控制、缓冲管理
├──────────────────────────────────────┤
│          设备驱动程序                 │ ← 每类设备对应一个,与硬件紧密相关
├──────────────────────────────────────┤
│          中断处理程序                 │ ← 响应设备中断、报告完成
└──────────────────────────────────────┘

中断处理程序(最底层)

  • 设备完成I/O后产生中断,CPU响应后执行
  • 检查设备状态:正常→唤醒等待进程;错误→重试或向上报告
  • 对共享设备:从请求队列取下一个请求包继续执行

设备驱动程序

  • 操作系统底层唯一了解设备控制器细节的软件模块
  • 核心功能:设备初始化、启动数据传输、处理中断
  • 工作过程:将设备无关层的抽象请求转化为具体物理操作(如磁盘:定位柱面/磁道/扇区)
  • 将I/O请求封装为请求包,排入设备请求队列
  • 独占设备:申请失败时挂起进程;共享设备:排队等待
  • 驱动程序可动态加载/卸载(即插即用)

设备无关I/O软件(设备独立层)

  • 执行适用于所有设备的公共I/O功能
  • 核心任务:
    • 设备命名与映射:设备名 → 设备驱动程序
    • 设备访问控制:权限检查
    • 缓冲管理:预读(read ahead)与滞后写(delayed write)
    • 提供统一逻辑块尺寸
    • 存储设备的块分配
    • 出错处理:非操作故障(如磁盘物理损坏)向上报告

用户层

  • 系统调用接口:申请设备、读设备、写设备、释放设备
  • 字符设备:通过设备名直接调用(如 printf 默认输出到显示器,scanf 默认从键盘读入)
  • 块设备:通常通过文件系统间接访问;DBMS可绕过文件系统直接操控磁盘以提高效率
  • 网络设备:通过 socket/套接字等独立API访问

缓冲技术

目的

  • 平衡CPU处理速度与I/O传输速度之间的差距
  • 以空间换时间,提高I/O吞吐率

缓冲类型

  1. 单缓冲:OS在内核空间分配一个缓冲区;实现预读和滞后写
  2. 双缓冲:用户数据区↔缓冲区、缓冲区↔外设之间的数据交换可并行进行
  3. 循环缓冲:多个缓冲区构成环形,典型应用为生产者-消费者模型

预读与滞后写

  • 预读(read ahead):提前将外存数据读入缓冲区,CPU访问时无需等待
  • 滞后写(delayed write):写数据先存入缓冲区,缓冲满后再一次性写出

I/O请求完整流程(以读文件为例)

  1. 用户进程发读文件系统调用
  2. 设备无关I/O软件检查参数正确性
  3. 检查高速缓存中是否有目标数据(有则直接返回,效率高)
  4. 无缓存 → 将设备逻辑名转化为物理名,检查访问权限
  5. 封装I/O请求包,排入设备请求队列,阻塞当前进程
  6. 磁盘驱动程序获取请求,分配缓冲区,向磁盘控制器发启动读命令
  7. 磁盘控制器控制设备通过DMA传输数据(一个扇区为单位)
  8. 传输完成 → 控制器发中断
  9. CPU响应中断,调用中断处理程序
  10. 检查状态:正确 → 数据传入用户进程空间,唤醒等待进程;错误 → 重试(若干次仍错则报告故障)

磁盘物理结构与访问时间

物理结构

  • 多个盘面(platter),每个盘面对应一个磁头
  • 每个盘面有若干磁道(track)/ 柱面(cylinder)
  • 每个磁道划分为若干扇区(sector),每次读写以扇区为单位

磁盘地址组成

  • 盘面号 → 磁道号(柱面号) → 扇区号

磁盘访问时间

访问时间 = 寻道时间 + 旋转延迟 + 传输时间
时间分量说明软件可优化?
寻道时间磁头移动到目标磁道/柱面✅ 通过调度策略减少磁头移动距离
旋转延迟等待目标扇区旋转到磁头下✅ 可优化
传输时间数据从盘面读出传输❌ 由物理特性决定

寻道时间占比最大,OS通过磁盘调度策略(下节课)合理安排I/O请求顺序以最小化寻道时间。

I/O硬件发展脉络

CPU直接控制 → I/O指令引入 → 中断机制 → DMA → 通道(I/O处理机)

每一步都进一步将CPU从I/O操作中解放出来,提高CPU与I/O设备的并行程度。

考试/复习重点

  • 四种I/O控制方式对比:程序直接控制→中断→DMA→通道
  • DMA与通道的区别(DMA:固定功能控制器;通道:可编程I/O处理机,可服务多设备)
  • I/O软件四层架构及各层职责
  • SPOOLing技术原理(用磁盘空间将独占设备虚拟为共享设备)
  • 缓冲技术:单缓冲/双缓冲/循环缓冲 + 预读与滞后写
  • 磁盘访问时间公式 = 寻道 + 旋转延迟 + 传输(重点是寻道时间优化)
  • 设备控制器三大寄存器:控制、状态、数据缓冲
  • 设备分类:字符/块/网络设备

作业

其他需要回看的片段

  • [53:29] DMA方式讲解
  • [01:15:50] SPOOLing打印机假脱机原理