Soft Updates一项消除大多数同步写操作的技术(2)
http://tech.ddvip.com 2006年04月01日 社区交流
本文详细介绍Soft Updates一项消除大多数同步写操作的技术(2)
在详细介绍i-节点所关联的其他依赖关系之前,需要描述一下图3介绍的和更新i-节点有关的步骤。步骤1:内核调用vnode操作,VOP_UPDATE。这将产生通过适当的磁盘缓冲机制把i-节点驻留在磁盘上的部分(称为dinode)复制到内存中的vnode结构的请求。

这个磁盘缓冲保持整个盘块的内容。它通常足以保存64个dinode。某些依赖关系只有在i-节点被写盘后才被满足。对于这些关系,依赖关系结构需要追踪i-节点的写入过程。因此,在步骤1中,一个SoftUpdate例程, "softdep_update_inodeblock"将被调用,以从"incore update"表中把allocdirect结构移动到"buffer update",以及把freefile, freeblks, freefrag, diradd, 或mkdir结构(后文介绍)从"inode wait"中移动到"buf wait"表中。步骤2:内核将调用vnode操作,VOP_STRATEGY,它将为写入包含指向dinode的bp指针的缓冲区做准备。SoftUpdate例程,"softdep_disk_io_initiation",将识别inodedep依赖关系,并调用"initiate_write_inodeblock"以便作适当的回滚。步骤3:完成缓冲区输出之后系统将调用"biodone",以通知等待的进程当前写入已经完成。"biodone"例程将随后调用SoftUpdate例程"softdep_disk_write_complete",这一例程将识别inodedep依赖关系,并调用"handle_written_inodeblock", 以便恢复回滚所做的操作,并清除"buf wait"和"buffer update"表中的依赖关系。
3.4 追踪直接块依赖关系
图4描绘了由直接块分配使用的依赖关系结构。考虑最关键的依赖关系:盘上的i-节点指向新分配的块之前,相关位映射表块以及新块本身都必须首先写入磁盘。
责编:豆豆技术应用