Soft Updates一项消除大多数同步写操作的技术(1)

http://tech.ddvip.com   2006年04月01日    社区交流

本文详细介绍Soft Updates一项消除大多数同步写操作的技术(1)

  第2节 BSD快速文件系统中的更新依赖关系

  很多重要的文件系统操作由一系列相关的对分散的元数据更新组成。为了保证在出现了非预期的故障后能够恢复,这些修改通常必须以一个特定的顺序复制到可靠存储。例如创建一个新文件时,文件系统首先分配一个i-节点,对其进行初始化并创建一个指向它的目录项。如果系统在新目录项已被写入,而对应i-节点尚未写入时崩溃,则完整性将被破坏,因为磁盘上的i-节点状态未知。为了确保元数据的一致性,初始化过的i-节点必须先于新的目录项到达可靠存储器。我们称这一需求为更新依赖关系——安全地写入目录项依赖于首先写入i-节点。更新顺序可以用三条简单的规则描述:

  1. 绝不在一个结构被初始化之前指向它(例如,i-节点必须在目录项引用它之前初始化)2. 绝不在所有指向某一资源的指针都被清零之前重用这一资源(例如,指向数据块的i-节点指针必须在那个数据块分配给其他i-节点之前全部清零)3. 绝不在指向一个活资源的新指针设置成功之前对旧指针实施复位操作(例如,对一个文件进行更名时,在写入新名字之前不应移去这个i-节点的旧名字)。

  本节将描述BSD FFS中的更新依赖关系问题,限于篇幅,我们假定读者对[McKusick etal, 1996]描述的BSD FFS有初步的了解。

  总共有8个BSD FFS操作需要顺序地进行更新以保证崩溃后的恢复:创建文件,删除文件,创建目录,移除目录,文件/目录更名,块分配,间接块维护,以及空闲映射表管理。

  i-节点和数据块是BSD FFS管理的两种主要资源。为了管理这些资源,使用了两个位映射表来管理这些资源。对于文件系统的每一个i-节点,i-节点位映射表中都有一个对应位,当该位置1表示此i-节点在用,而置0则表示此i-节点空闲。同样,对于每个数据块,在数据块位映射表中也有一个对应位表示它是空闲还是在用。FFS文件系统可以被分割为以柱面组(cylinder groups)为单位的固定大小的单元。每个柱面组都有一个包括在当前柱面组中的i-节点和数据块的位映射表的块。对于一个大的文件系统,这一组织结构使核心内存(kernel memory)中能够只存放这种小的文件系统单元。活动的柱面组都被存放在单独的I/O缓冲区中,并可以进行独立于其他柱面组的写操作。

责编:豆豆技术应用

正在加载评论...