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

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

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

  我们的实现使用了多种数据结构在文件系统结构中追踪未决的更新依赖关系。表1列了使用的依赖关系结构、主要功能,以及与它们关联的块。这些依赖依赖关系数据结构在文件操作完成时被分配并关联到块上。在内核内存中的副本中它们使用指针关联到对应块的头。所有列出的依赖关系结构的两种一般的样式是工作表(worklist)结构和保存追踪依赖关系状态的结构。

  表1 BSD SoftUpdates实现中使用的依赖关系结构

  worklist结构作为所有依赖关系结构首项的公共头。它包含了一系列连接指针,以及一个表示它被嵌入的结构类型的字段。worklist结构使得将不同类型的依赖关系结构连到同一链表中成为可能。SoftUpdates代码能够遍历这种异质链表,使用类型字段判别它遇到的依赖关系结构,并据此进行相应的操作。

  对worklist的典型应用是将一系列依赖关系关联到缓冲区上。整个系统中的每个缓冲区都附加了一个worklist头指针。任何与缓冲区关联的更新依赖关系都被接到这个链表中。缓冲区锁定后,在写开始前,I/O系统把缓冲区送给相关代码,SoftUpdates从而得知将开始一次写操作并遍历关联到缓冲区上的依赖关系,以便进行适当的数据回滚。磁盘写入完成后,在解除对缓冲区的锁定之前,I/O子系统会再次调用SoftUpdates代码,告知写操作完成。这些代码将进行适当的前滚操作,释放已完成写入的那些依赖关系结构。

  另一个SoftUpdates代码维护的表是tasklist,它指明了工作守护进程需要进行的后台任务。已经可以安全地写入,但由于某种原因(如锁或I/O)而被阻塞的那些依赖关系由写盘子程序追加到tasklist中来描述。每秒syncer守护进程都会被唤醒(这一进程也是SoftUpdates的工作进程),它调用SoftUpdates代码以处理tasklist中的项目。在表中进行的操作与项目类型有关。例如,freeblks结构列出的块将在块位映射表中被标记为空闲;对dirrem结构,相关i-节点的引用计数将被减少,并可能触发文件删除操作。

责编:豆豆技术应用

正在加载评论...