OS08 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读写,有些控制器还包含内存用于缓冲请求。
处理器访问设备寄存器有两种主要方式:
- 端口映射I/O:使用专用的
in/out
指令访问独立的I/O地址空间
- 内存映射I/O:将控制器的寄存器和内存映射到处理器的物理地址空间中,使用普通的
load/store
指令访问
以内存映射的显示控制器为例:
- 硬件在系统启动时将控制寄存器和显示内存(帧缓冲区)映射到物理地址空间
- 处理器通过直接写入帧缓冲区来更新显示内容
- 通过写入图形命令队列来发起复杂的图形操作
- 通过写入控制寄存器来触发特定的硬件功能
Intel I/O架构
现代Intel平台采用分层I/O架构:
- IMC:集成内存控制器,直接连接处理器和内存
- DMI:直接媒体接口,连接处理器和PCH
- PCH:平台控制中枢,通过DMI与处理器通信,集中管理各种I/O设备
I/O设备的分类特征
数据粒度
- 字节设备:一次传输单个字节(如键盘)
- 块设备:一次传输整个数据块(如磁盘、网卡)
访问特征
- 顺序访问设备:必须按顺序访问(如磁带)
- 随机访问设备:支持任意位置访问,启动传输的开销固定(如磁盘、CD)
事件通知机制
设备完成操作或发生错误时需要通知操作系统,主要有两种机制:
- 中断驱动I/O:设备在需要时触发中断,CPU陷入内核处理
- 优点:能及时响应不可预测的事件
- 缺点:频繁的中断处理开销较大
- 轮询I/O:操作系统周期性地检查设备状态寄存器
- 优点:处理开销低
- 缺点:对于不常使用的设备会造成CPU周期浪费
实际系统中通常结合使用这两种机制,根据设备特性进行优化。
数据传输机制
- 程序控制I/O:所有数据都通过处理器的
in/out/load/store
指令传输
- 优点:硬件简单,编程直观
- 缺点:大量数据传输时会占用大量处理器周期
- 直接内存访问:DMA控制器可以直接访问内存总线,无需处理器介入
- 优点:解放处理器,提高系统整体性能
- 缺点:需要额外的DMA控制器硬件
设备驱动程序
设备驱动是内核中与特定设备交互的代码模块,主要职责包括:
- 实现标准设备接口
- 为操作系统I/O子系统提供统一的访问方式
- 通过
ioctl
系统调用支持设备特定配置
设备驱动通常分为两部分:
- 上半部分:在系统调用路径中执行,实现标准的设备无关操作(如
open
、close
、read
、write
),可能挂起调用线程
- 下半部分:作为中断处理程序运行,响应设备中断,处理输入数据或准备下一个输出块,可能在I/O完成时唤醒等待的线程
I/O请求的生命周期
- 用户程序发起I/O请求
- 陷入内核I/O子系统,向设备驱动发送请求,可能阻塞进程
- 驱动上半部分处理请求,向控制器发送指令
- 控制器执行硬件I/O操作,完成后触发中断
- 驱动下半部分处理中断,存储输入数据或更新状态
- 驱动上半部分确认I/O完成,向I/O子系统报告状态变化
- I/O子系统向用户进程返回数据或错误信息
I/O子系统设计目标
I/O子系统的核心目标是提供通用接口,屏蔽各种设备的巨大差异。这些接口由具体的设备驱动实现:
块设备接口(磁盘、磁带、DVD)
- 支持数据块级别的访问
- 提供
open/read/write/seek
等标准操作
- 支持原始I/O或文件系统访问
- 支持内存映射文件访问
字符设备接口(键盘、鼠标、串口)
- 支持单字符级别的访问
- 提供
get/put
基本操作
- 支持行编辑等高级功能
网络设备接口(以太网、无线网、蓝牙)
- 提供socket接口
- 支持管道、FIFO、流等通信抽象
用户层I/O时序处理
应用程序处理I/O请求时序有三种主要模式:
- 阻塞式接口:发起I/O请求时使进程休眠,直到操作完成
- 非阻塞式接口:立即返回,指示已传输的字节数,可能返回"暂无数据"
- 异步式接口:传入用户缓冲区指针,内核在后台完成操作后通知用户
存储设备概述
现代计算机系统主要使用两种类型的存储设备:传统的机械硬盘和新兴的固态硬盘。
机械硬盘
机械硬盘以其大容量和低成本优势,仍然是大量数据存储的主要选择。它支持块级别的随机访问,但在顺序访问时性能表现更佳。
硬盘物理结构
硬盘的基本传输单位是扇区。多个扇区组成磁道,相同半径的磁道堆叠形成柱面。磁道宽度约1微米,磁道间有保护区域防止错位读写。
由于外圈磁道更长,现代硬盘采用分区记录技术,将磁盘表面划分为多个区域,每个区域内磁道包含相同数量的扇区。
先进技术
SMR技术通过重叠磁道(类似瓦片排列)提高存储密度,但写入时需要先擦除相邻磁道,导致随机写入性能下降,适合冷数据存储。
柱面概念指读写头位置不变时,通过磁盘旋转可访问的所有磁道区域。
磁盘访问时序
磁盘访问时间由三部分组成:
- 寻道时间:移动读写头到目标磁道,通常4-6ms
- 旋转延迟:等待目标扇区旋转到读写头下,取决于磁盘转速(如3600/7200RPM)
- 传输时间:实际数据传输时间,通常50-250MBps
提高磁盘效率的关键在于最小化寻道和旋转时间,尽可能实现顺序访问。
磁盘可靠性技术
- 扇区纠错码:检测和纠正读取错误
- 扇区替换:用备用扇区永久替换损坏扇区
- 滑动替换:将后续扇区整体后移,保持连续性
- 磁道偏斜:偏移相邻磁道起始扇区,优化跨磁道连续访问
固态硬盘
固态硬盘在价格和性能之间提供了良好的平衡,支持块级随机访问,读性能优异但写性能相对较差。
发展历程
- 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写入特性:
- 必须按块擦除后才能写入,无法直接覆盖单个页
- 擦除操作耗时0.2-1.7ms
- 控制器维护空闲块池优化写入性能
- 写入比读取慢约10倍,擦除比写入慢约10倍
寿命管理与优化技术
寿命限制:每个闪存块有有限的擦写周期(SLC:10万次,MLC:1万次,TLC:1-3千次,QLC更低)
关键优化技术:
- 闪存转换层:维护逻辑地址到物理地址的动态映射,实现磨损均衡
- 写时复制:新数据写入空闲页,更新映射表,标记旧页无效
- 垃圾回收:合并有效数据,回收无效页,整理存储空间
优缺点总结
优点:
- 低延迟、高吞吐量
- 无机械部件、轻量、静音
- 高数据密度
- 读取性能极佳
缺点:
- 价格相对较高
- 写入和擦除开销大
- 使用寿命有限
Prev
OS07 虚拟内存
Next
OS09 文件系统
Loading...