Lazy loaded imageOS08 I/O与磁盘

type
status
date
slug
summary
tags
category
icon
password

I/O、磁盘与固态硬盘

I/O设备的特征

I/O设备表现出显著的异构性,各种设备在速度、数据粒度、访问模式等方面存在巨大差异。操作系统需要提供标准化的接口来屏蔽这些硬件差异,为应用程序提供一致的访问方式。
设备可靠性是另一个重要考量因素。存储媒介和传输通道可能发生错误,因此需要在软件层面增强I/O操作的可靠性,通过错误检测和纠正机制来保证数据完整性。
设备行为具有不可预知性,且速度差异极大。从高速的系统总线、PCIe接口,到中速的SATA、以太网,再到慢速的硬盘、调制解调器,最后到极慢的鼠标和键盘,不同设备的性能特征需要不同的处理策略。

现代I/O系统架构

现代计算机系统通过总线层次结构连接各种I/O设备。典型的架构包括:
  • 图像控制器连接显示器
  • IDE磁盘控制器管理磁盘设备
  • 内存控制器负责cache和主内存的协调
  • SCSI控制器通过SCSI总线连接磁盘阵列
  • 扩展总线接口连接键盘、拓展坞和USB设备等外围设备
总线本质上是一组线缆,为多个硬件设备之间的通信提供物理通道和数据传输协议。总线通常包含控制线、地址线和数据线,通过特定的握手协议来协调设备间的数据传输。一般来说,越靠近处理器的总线具有越高的带宽。
使用总线架构的主要优势在于可以用O(n)的连接复杂度替代设备间两两相连所需的O(n²)复杂度。然而,传统总线的一个主要限制是同一时刻只能处理一项事务,其他设备必须等待当前事务完成。

PCI总线演进

PCI(外围组件互连)是一种支持并行传输的总线标准。但并行总线存在信号同步、时钟偏移等问题,需要复杂的地址/数据复用机制。
PCIe(快速PCI)总线采用了根本性的变革,从并行总线转变为串行点对点连接。PCIe使用一簇高速串行线路,设备可以根据需要动态分配线路资源,实现了从时分复用到空分复用的转变。这种架构允许不同速度的设备独立运行,不再需要共享带宽。
典型的PCI架构层次:
  • 通过Host Bridge将PCI0总线与CPU相连
  • PCI1总线通过PCI Bridge与PCI0相连
  • PCI1连接各种PCI扩展槽、USB控制器和SATA控制器

处理器与设备的通信机制

CPU通过总线与设备控制器进行通信。控制器提供一组寄存器供CPU读写,有些控制器还包含内存用于缓冲请求。
处理器访问设备寄存器有两种主要方式:
  1. 端口映射I/O:使用专用的in/out指令访问独立的I/O地址空间
  1. 内存映射I/O:将控制器的寄存器和内存映射到处理器的物理地址空间中,使用普通的load/store指令访问
以内存映射的显示控制器为例:
  • 硬件在系统启动时将控制寄存器和显示内存(帧缓冲区)映射到物理地址空间
  • 处理器通过直接写入帧缓冲区来更新显示内容
  • 通过写入图形命令队列来发起复杂的图形操作
  • 通过写入控制寄存器来触发特定的硬件功能

Intel I/O架构

现代Intel平台采用分层I/O架构:
  • IMC:集成内存控制器,直接连接处理器和内存
  • DMI:直接媒体接口,连接处理器和PCH
  • PCH:平台控制中枢,通过DMI与处理器通信,集中管理各种I/O设备

I/O设备的分类特征

数据粒度

  • 字节设备:一次传输单个字节(如键盘)
  • 块设备:一次传输整个数据块(如磁盘、网卡)

访问特征

  • 顺序访问设备:必须按顺序访问(如磁带)
  • 随机访问设备:支持任意位置访问,启动传输的开销固定(如磁盘、CD)

事件通知机制

设备完成操作或发生错误时需要通知操作系统,主要有两种机制:
  1. 中断驱动I/O:设备在需要时触发中断,CPU陷入内核处理
  • 优点:能及时响应不可预测的事件
  • 缺点:频繁的中断处理开销较大
  1. 轮询I/O:操作系统周期性地检查设备状态寄存器
  • 优点:处理开销低
  • 缺点:对于不常使用的设备会造成CPU周期浪费
实际系统中通常结合使用这两种机制,根据设备特性进行优化。

数据传输机制

  1. 程序控制I/O:所有数据都通过处理器的in/out/load/store指令传输
  • 优点:硬件简单,编程直观
  • 缺点:大量数据传输时会占用大量处理器周期
  1. 直接内存访问:DMA控制器可以直接访问内存总线,无需处理器介入
  • 优点:解放处理器,提高系统整体性能
  • 缺点:需要额外的DMA控制器硬件

设备驱动程序

设备驱动是内核中与特定设备交互的代码模块,主要职责包括:
  • 实现标准设备接口
  • 为操作系统I/O子系统提供统一的访问方式
  • 通过ioctl系统调用支持设备特定配置
设备驱动通常分为两部分:
  1. 上半部分:在系统调用路径中执行,实现标准的设备无关操作(如openclosereadwrite),可能挂起调用线程
  1. 下半部分:作为中断处理程序运行,响应设备中断,处理输入数据或准备下一个输出块,可能在I/O完成时唤醒等待的线程

I/O请求的生命周期

  1. 用户程序发起I/O请求
  1. 陷入内核I/O子系统,向设备驱动发送请求,可能阻塞进程
  1. 驱动上半部分处理请求,向控制器发送指令
  1. 控制器执行硬件I/O操作,完成后触发中断
  1. 驱动下半部分处理中断,存储输入数据或更新状态
  1. 驱动上半部分确认I/O完成,向I/O子系统报告状态变化
  1. I/O子系统向用户进程返回数据或错误信息

I/O子系统设计目标

I/O子系统的核心目标是提供通用接口,屏蔽各种设备的巨大差异。这些接口由具体的设备驱动实现:

块设备接口(磁盘、磁带、DVD)

  • 支持数据块级别的访问
  • 提供open/read/write/seek等标准操作
  • 支持原始I/O或文件系统访问
  • 支持内存映射文件访问

字符设备接口(键盘、鼠标、串口)

  • 支持单字符级别的访问
  • 提供get/put基本操作
  • 支持行编辑等高级功能

网络设备接口(以太网、无线网、蓝牙)

  • 提供socket接口
  • 支持管道、FIFO、流等通信抽象

用户层I/O时序处理

应用程序处理I/O请求时序有三种主要模式:
  1. 阻塞式接口:发起I/O请求时使进程休眠,直到操作完成
  1. 非阻塞式接口:立即返回,指示已传输的字节数,可能返回"暂无数据"
  1. 异步式接口:传入用户缓冲区指针,内核在后台完成操作后通知用户

存储设备概述

现代计算机系统主要使用两种类型的存储设备:传统的机械硬盘和新兴的固态硬盘。

机械硬盘

机械硬盘以其大容量和低成本优势,仍然是大量数据存储的主要选择。它支持块级别的随机访问,但在顺序访问时性能表现更佳。

硬盘物理结构

硬盘的基本传输单位是扇区。多个扇区组成磁道,相同半径的磁道堆叠形成柱面。磁道宽度约1微米,磁道间有保护区域防止错位读写。
由于外圈磁道更长,现代硬盘采用分区记录技术,将磁盘表面划分为多个区域,每个区域内磁道包含相同数量的扇区。

先进技术

SMR技术通过重叠磁道(类似瓦片排列)提高存储密度,但写入时需要先擦除相邻磁道,导致随机写入性能下降,适合冷数据存储。
柱面概念指读写头位置不变时,通过磁盘旋转可访问的所有磁道区域。

磁盘访问时序

磁盘访问时间由三部分组成:
  1. 寻道时间:移动读写头到目标磁道,通常4-6ms
  1. 旋转延迟:等待目标扇区旋转到读写头下,取决于磁盘转速(如3600/7200RPM)
  1. 传输时间:实际数据传输时间,通常50-250MBps
提高磁盘效率的关键在于最小化寻道和旋转时间,尽可能实现顺序访问。

磁盘可靠性技术

  1. 扇区纠错码:检测和纠正读取错误
  1. 扇区替换:用备用扇区永久替换损坏扇区
  1. 滑动替换:将后续扇区整体后移,保持连续性
  1. 磁道偏斜:偏移相邻磁道起始扇区,优化跨磁道连续访问

固态硬盘

固态硬盘在价格和性能之间提供了良好的平衡,支持块级随机访问,读性能优异但写性能相对较差。

发展历程

  • 1995年:出现基于电池供电DRAM的早期SSD
  • 2009年:广泛采用NAND闪存技术
  • 现代SSD:数据组织为4KB的页,多个页(通常4-64个)组成块

性能特征

SSD读取性能
  • SATA SSD:300-600MB/s
  • NVMe SSD:3500-7000MB/s(PCIe 4.0/5.0)
  • 读取延迟:10-100μs,包括排队延迟、控制器处理时间和数据传输时间
SSD写入特性
  1. 必须按块擦除后才能写入,无法直接覆盖单个页
  1. 擦除操作耗时0.2-1.7ms
  1. 控制器维护空闲块池优化写入性能
  1. 写入比读取慢约10倍,擦除比写入慢约10倍

寿命管理与优化技术

寿命限制:每个闪存块有有限的擦写周期(SLC:10万次,MLC:1万次,TLC:1-3千次,QLC更低)
关键优化技术
  1. 闪存转换层:维护逻辑地址到物理地址的动态映射,实现磨损均衡
  1. 写时复制:新数据写入空闲页,更新映射表,标记旧页无效
  1. 垃圾回收:合并有效数据,回收无效页,整理存储空间

优缺点总结

优点
  • 低延迟、高吞吐量
  • 无机械部件、轻量、静音
  • 高数据密度
  • 读取性能极佳
缺点
  • 价格相对较高
  • 写入和擦除开销大
  • 使用寿命有限
Prev
OS07 虚拟内存
Next
OS09 文件系统
Loading...
Article List
SunVapor的小站
计算机系统导论
操作系统
文档