操作系统基础-第三篇:持久性

本文详细探讨了硬件I/O设备的接口与内部结构,标准协议的优化策略,磁盘驱动器的访问模型和调度,以及文件系统中的数据完整性和容错技术,如RAID的不同级别、日志结构文件系统和错误检测与修复方法。
摘要由CSDN通过智能技术生成

硬件:I/O设备

标准设备包括两部分。第一部分是向其他硬件提供的接口,让系统软件来控制它,其接口包括状态寄存器、命令寄存器和数据寄存器。第二部分是它的内部结构,实现其特定功能。

标准协议包括四个步骤:1)轮询设备状态,等待其就绪;2)写数据到设备的数据寄存器;3)写命令到设备的命令寄存器;4)轮询设备状态,等待其完成。

对于标准协议涉及到的步骤,有两种优化技术。一个是通过中断来减少CPU轮询开销。另一个是通过DMA引擎来减少编程的I/O带来的开销。

硬件与设备交互的方式包括内存映射和显示的指令(例如,x86中的in和out指令)。两种方法没有一个具有极大的优势,它们至今仍然被使用。

设备驱动程序是文件系统栈中抽象开具体的设备的细节的部分。文件系统栈示意图如下:

硬件:磁盘驱动器

合理的磁盘驱动器功能模型是把它视作一个由多个磁盘组成的几何表面,每个磁道有多个扇区。访问某一扇区数据的步骤是:寻道->等待->传输。计算I/O时间的公式是

                        T(io)=T(seek)+T(wait)+T(transfer)

现代磁盘驱动器都有缓存,一般称为磁道缓冲区。另外,顺序访问的I/O时间一般远远好于随机访问的I/O时间。

磁盘调度包括最短寻道时间优先、最短定位时间优先、电梯算法等。I/O合并技术也是一个调度技术。

硬件:廉价冗余磁盘阵列

通过使用多个磁盘来为操作系统提供一个单一的大磁盘的抽象,廉价冗余磁盘阵列保证了其透明性,使得其易于部署。性能、容量、可靠性是度量廉价冗余磁盘阵列的三个核心指标。这三个性质也是其优于单一磁盘的地方。

RAID-0级仅仅使用了条带化,使得容量的到完全的利用,并行性也是RAID中最大的,也就是说其拥有最好的性能。但其无法允许一个磁盘故障。RAID-1级在RAID-0级的基础上实现了镜像。允许任一条带的一个磁盘故障。性能和容量几乎是RAID-0级的一半。RAID-4级和RAID-5级通过舍去了性能,换来了更大的容量,但只允许一个磁盘故障。

需要根据实际的工作负载来选择最合适的RAID。

软件:文件系统实现

文件系统是一个纯软件。基本的文件系统组成包括下列三部分

  • 超级块:存储文件系统的元信息,包括文件系统的类型、大小和状态等。

  • 分配数据结构:存储inode和数据块的是否空余的信息。

  • 数据块:存储用户数据。

inode是文件的元信息,其中包含文件的大小、访问权限、访问时间和数据块指针等信息。

目录实际上是一个存储着(inode,name)对的文件。

操作系统将虚拟内存页面和文件系统页面集成到统一页面缓存(unified page cache)中,为文件系统提供动态划分的缓存分配。通过使用文件系统页面缓存,操作系统可以批处理I/O请求、调度I/O以及潜在的I/O避免。

软件:局部性和快速文件系统

老Unix文件系统存在着局部性差的缺点,快速文件系统(Fast file system, FFS)引入磁盘意识来解决该缺点,提供快速的文件系统操作。

FSS的大致想法是将磁盘划分为柱面组(cylinder group)。每个组中都有一个超级块,这是为了可靠性保证。此外,每个组中还有分配数据结构和数据块。通过将相关的文件放在一起,FSS提供了更好的局部性。

在处理大文件的时候,FSS不是直接在一个柱面组中填满,而是几乎均匀地把数据分配到多个柱面组中。通过在每个柱面组中放入较多的数据可以摊销寻道和旋转带来的开销。

在处理小文件的时候,FSS通过引入子块和写入缓冲两个技术来解决过小文件浪费块空间以及复制子块到块的开销问题。

为了避免在读取磁盘一个扇区的时候,下一扇区已经离开而不能处理接下来的连续读请求(例如,申请访问扇区0并且FSS收到回复后,FSS再申请访问扇区1)。磁盘布局被优化为扇区号连续的扇区在物理上可能间隔一个扇区。现代的磁盘会直接读入整个磁道并且放入缓冲区中。

容错:崩溃一致性及其解决方案

崩溃一致性指的是,如果在向磁盘发送两个写请求的过程中,出现第一个写请求完成而在第二个写请求开始前,磁盘出现故障而停止工作从而产生的数据不一致的情况。例如,为文件新增数据块时,inode更新而数据块未被写入。

解决方案一是FSCK(文件系统检查程序)。其目标是保证文件系统元数据的一致性。包括检查超级块内的数据、inode与分配数据结构的一致性等。

解决方案二是预写日志。包括数据日志和元数据日志,元数据日志由于其只是写入元数据的日志项,从而有更少的I/O流量,是现在流行的日志实现技术。为了优化日志技术,文件系统使用日志缓存来减少频繁的I/O。

其他的解决方案包括软更新,基于反向指针的一致性和乐观崩溃一致性等。

需要注意的是,这里的解决方案是为了实现崩溃一致性,而非确保数据不丢失。

容错:日志结构文件系统

简单来说,日志结构文件系统就是将文件系统发生的变化按顺序记录到日志中。

为了避免频繁的I/O写入日志,文件系统使用写入缓冲技术。为了减少查找inode时的开销,文件系统使用了imap映射,将inode映射到其最新的块位置。检查点区域包含了所有的imap位置,每30秒更新一次。

为减少不必要的日志项存在,文件系统使用垃圾回收技术。大致原理是读取M个段,将其打包为N个段(其中,N<M)。通过分析对比该块是否为最新的有效块来判断该块的死活。也可以通过版本号来完成。文件系统可以周期性地或者空闲时间中或者磁盘已满时进行垃圾回收。

容错:数据的完整性和保护

除了故障-停止这样的简单故障模型外,还需要考虑故障-部分故障模型。常见的两个故障情况:扇区错误和块讹误。

扇区错误产生的原因可能是磁头损坏了扇区,解决方案是磁盘通过使用纠错码来发现扇区错误,如果是RAID这样的磁盘系统,会使用冗余备份来修复发现的故障,如果没有备份,那么就会返回错误。

块讹误产生的原因可能是块被写入了错误的位置,解决方案是通过块的校验和来发现该错误。当发现块讹误时,如果存储系统中存在备份,那么使用备份来修复它,反之,报告错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值