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

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

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

  创建文件时,在不同的独立块中的三组元数据都将被修改。首先是一个新的、初始化过的i-节点,其内容包括文件类型、被设置为1的连接计数(这表示它是活动的,如被某一目录项引用)、它的权限以及其他信息;随后是i-节点位映射表,以反映i-节点被分配这一状况;最后是新目录项,它将包括新的文件名,以及一个指向i-节点的指针。为确保位映射表总反映全部已经分配资源,位映射表必须在i-节点或目录项之前写入。由于初始化好的i-节点在写盘之前处于未知状态,规则1要求所有关于它的相关更新必须它写入后进行。尽管未被明确地要求,绝大多数FFS实现在创建文件这一系统调用返回之前,也写入目录块。这个附加的同步写入确保了当应用程序在其后进行“fsync”系统调用时文件名已经被保存到可靠的存储器中。如果没这么做,那么“fsync”调用将必须查找所有未写入的包含该文件名字的目录块,并写入磁盘。类似的更新依赖关系也存在于为一个i-节点指定另一个名字时(也称hard link,硬连接),因为增加第二个名字需要文件系统增加i-节点的连接计数,并在写入目录项之前重写这个i-节点。

  删除文件时,将修改目录块,i-节点,以及若干柱面组位映射表。在目录块中,相关的目录项将被“移除”,这一操作将i-节点指针清零。在i-节点块中,相关i-节点的类型字段、连接计数,以及数据块指针将被清零。被删文件的数据块以及i-节点随后被相应的数据块/i-节点映射表反映。规则2规定了目录项和i-节点之间,以及i-节点和所有修改了的映射表位之间的更新依赖关系。为了保持连接计数适当地大(这也简化实现),在移除一个文件别名(硬连接)时也存在类似的依赖关系。

  创建和删除目录大体和前述的对普通文件的操作相同。不过,因为“..”是子目录指向父目录的连接,这引发了更多的更新依赖。特别地,在创建时,父目录的连接计数必须在新目录的“..”指针之前增加并同步到磁盘。同样,在删除时,父目录的连接计数必须在子目录的“..”指针清零之后减少(当然,这一清零过程在删除子目录时暗含,不真正执行)。

责编:豆豆技术应用

正在加载评论...