延迟验证数据完整性的文件系统的制作方法

文档序号:6559659阅读:195来源:国知局
专利名称:延迟验证数据完整性的文件系统的制作方法
技术领域
本发明大体涉及在计算机、嵌入式控制器等中使用的文件系统。更具体地,本发明涉及基于事务的文件系统,其中在文件系统启动过程中对文件系统的特定部分的完整性进行验证,但延迟对文件系统的其它部分的完整性的验证。
背景技术
计算机、嵌入式控制器和基于其它微处理器的系统通常由各种不同硬件组件构成。硬件组件可包括处理器、I/O装置、人机接口装置等等。另外,这样的系统使用内存存储单元以保持系统中使用的数据。内存存储单元可具有各种不同形式,包括但不限于硬盘驱动器、软盘驱动器、随机存取存储器、闪存等等。
这样的系统中执行的高级应用程序必须经常与包括内存存储单元的这些硬件组件无缝地相互作用。为了该目的,许多系统运行担当应用程序与系统硬件之间接口的操作系统。可包括文件系统软件作为操作系统的一部分,或可提供它作为与操作系统相互作用的辅助软件组件。在任一情况下,文件系统软件对内存存储单元内的数据进行组织,用于处理器和处理器执行的高级应用程序的即时访问。
由于实现文件系统有许多方式,因此存在许多不同文件系统分类。例如,基于事务的文件系统是一个这样的系统,文件系统总保持一致性,由于对文件系统结构和数据的所有更新都被作为事务记录在事务文件中。更具体地,对文件系统做的所有更新都作为事务在事务文件中做出,通过成功应用已提交的所有事务动态地重构文件系统的内容。
事务文件中的事务或已提交或还未完成。例如,如果文件系统的操作中断,如由于停电,则可通过查阅事务文件的内容来恢复文件系统的状态。文件系统使用任何提交的事务,未完成的任何事务被重新运行,在试图更新之前将文件系统恢复到原来的状态。
恢复文件系统到一致状态要求文件系统软件执行预定启动处理。在典型的启动处理中,存储在事务文件中的每个事务的完整性在其成为文件系统的一部分之前完成验证。另外的文件系统操作也可在启动处理中执行。然而,文件系统中断之后执行事务验证与其它的文件系统操作的传统方式通常是不合标准的,因为这些操作在时间、处理和资源上是高强度的。

发明内容
公开了一种在实现基于事务的文件系统中所使用的计算机系统。该计算机系统包括处理器、处理器可访问的随机存取存储器和处理器同样可访问的持久性数据存储装置。该计算机系统还包括文件系统软件。该文件系统软件由处理器执行,并且工作以管理存储在持久性数据存储装置中的文件的文件数据和文件系统结构。此外,文件系统软件保持包括多条事务记录的事务文件。每条事务记录具有标头部分和数据部分。每条事务记录的标头部分包括一个或多个字段,指定其以存储与事务记录所表示的文件事务对应的信息。如果文件系统软件的操作中断,则文件系统软件利用启动处理继续其执行,其中在随机存取存储器中生成重构文件系统。在系统重启过程中,当事务记录满足一个或多个预定标准时,则启动处理跳过对事务记录的数据部分的验证。可选地,延迟数据部分的验证直到文件系统启动处理已完成后的一段时间。例如,假定文件存取在文件系统启动处理完成后发生,文件系统软件可在给定文件的首次或后续存取时,验证表示给定文件的每个事务记录的先前未验证的数据部分。
在一个示例中,文件系统启动处理可对仅影响文件数据的事务记录和影响文件系统的元数据的事务记录加以区别。当在启动处理中发现事务时,文件系统软件可识别事务是否影响文件数据或元数据。由于仅要求元数据来确保文件系统在启动后处于一致状态,所以可选择与元数据有关的事务记录作为属于完成验证的事务记录的仅有子集。例如,其它事务记录的验证可限于校验包含在每个剩余事务记录的标头部分中的信息。一旦文件系统启动处理已完成,即可在对应文件的首次或后续存取后验证任何先前的未验证事务记录或事务记录部分。
例如,事务文件可存储在闪存中。在这样的情况下,可进一步促进启动处理。例如,启动处理可将其标头信息验证限制于闪存装置的相同块中的事务记录序列的第一事务记录。该序列的随后事务记录的标头或数据部分在启动过程中都没有得到验证,假如有的话,启动处理继续处理下一个装置块的事务记录。此外,启动处理可校验标头部分信息以确定是否已擦除或收回装置块中的内存地址。如果已擦除或收回装置块中的内存地址,则启动处理继续下一个装置块。再有,一旦已完成文件系统启动处理,就可在对应文件的首次或后续存取后,验证任何先前未验证的事务记录或事务记录部分。
在实施例中,文件系统软件可保持表明针对给定文件的每个事务文件记录的完整性是否已被完成验证的文件验证指示器。该文件验证指示器在文件系统启动处理完成后首次(或下次)存取文件时由文件系统软件校验。如果指示器显示文件的事务记录尚未完成验证,则在此时针对该文件的事务文件记录的验证可在那个时候执行。为加快该验证处理,验证可限于文件系统启动处理中先前未验证的事务记录和事务记录部分。
在参考下面的附图和详细说明之后,对于本技术领域的技术人员本发明而言其它系统、方法、特点和优点将显而易见。将所有这样的系统、方法、特点和优点包括在本说明中,包括在本发明范围内和由下面权利要求对其进行保护。


参考下文中的附图和说明可更好地理解本发明。图中的组件不必须是按比例,而重点是在于阐述本发明的原理。此外,在图中,相同的参考数字表示贯穿不同视图中的相同部分。
图1是可实现基于事务的文件系统的计算机系统的框图,其中对文件系统完整性的启动验证进行优化;图2是示出了可在基于事务的文件系统中实现的文件和目录的排列的示例的树图;图3是示出了可排列元文件的记录以实现图2所示的文件系统结构的方式的框图;图4示出了将基于事务的文件系统的事务文件中的事务记录进行逻辑排列的一种方式;图5示出了一种类型的闪存(flash)介质装置中内存的物理排列。
图6和7示出了在用于基于事务的文件系统的闪存介质装置中排列事务记录的各种方式。
图8示出了可用于生成外延池的许多相关处理步骤,该外延池依次应用于启动过程中计算机系统所创建的重构文件系统中。
图9至11涉及图8中所示处理步骤中使用的各种记录类型的示例性格式。
图12涉及重构文件系统中使用的重新生成的文件层次结构的目录节点记录的示例性格式。
图13涉及重构文件系统中使用的重新生成的文件层次结构的文件节点记录的示例性格式。
图14示出了可用于构建重构文件系统中使用的重新生成的文件层次结构的许多相关处理步骤。
图15是以与应用于图2所示的示例性文件和目录排列的图8至14相关的方式而生成的重构文件系统的逻辑表示。
具体实施例方式
图1表示示例性的基于事务的计算机系统10中采用的部件。如所示,示例性系统10包括处理器15、只读存储器20和持久性存储单元30。计算机系统10还可包括随机访问存储器35、I/O接口40和用户接口45。在计算机系统10中使用的具体组件是适合于计算机系统10所执行的特殊功能的。因此,除了处理器15之外,组件的存在与否取决于计算机系统10所要求的设计标准。例如,当计算机系统10是采用嵌入式控制器等的形式时,可以省略用户接口45。
只读存储器20可包括操作系统代码43,它控制由处理器15和包括存储器20与35、持久性存储单元30以及接口装置40与45的各种硬件部件所执行的高级应用程序之间的相互作用。操作系统代码43可包括用于组织在持久性存储单元30上所存储的文件的文件系统软件。可选地,可提供文件系统软件作为只与操作系统代码43相互作用的单独的软件组件。在后者的情况下,与文件系统软件对应的代码可存储在只读存储器20、持久性存储器30等中。当计算机系统10通过I/O接口40与其它计算机和/或存储装置联网时,如有需要,可将文件系统软件远程存储和下载到计算机系统10。但是,图1示出文件系统软件47存储在只读存储器20中。
持久性存储器30可采用任何不同的形式。例如,持久性存储器30可采用硬盘驱动器、软盘驱动器等形式。它也可以是非旋转的介质装置的形式,如以集成电路格式实现的非易失性存储器(如闪存等)。另外,持久性存储器单元30不需要限制于单个存储器结构。甚至,持久性存储器单元30可包括多个的同一类型的独立存储装置(如,全部为闪存)和/或不同类型的独立存储装置(如一个或多个闪存单元和一个或多个硬盘驱动器)。
在持久性存储器单元30中存储的文件包括根据由应用程序或由操作系统代码43所使用的预定格式而解释的数据。例如,文件内存储的数据可构成可执行程序的软件代码、数据库记录的ASCII文本、与计算机系统10执行(或未执行)的事务相对应的数据等等。
在本示例性系统10中,文件系统软件47利用倒置的层次结构来组织存储在持久性存储器单元30上的文件。图2是表示在其中实现一般表示为50的该倒置层次结构的一种方式。在许多文件系统采用的传统的层次结构中,文件的顶层开始于根目录,每个目录向下指向文件和包含在该目录内的子目录。但是,在示例性倒置层次结构50中,子文件和包含在父目录内的子目录向上指向父目录。根据文件在何处开始其组织,根目录可构成文件系统结构的最底层。
示例性的倒置层次结构50包括5个文件55、60、65、70和处在文件系统结构最高层的文件75。文件55、60和65包含在目录80内,而文件70和75包含在目录85内。因此,文件系统软件47将文件系统这样组织,以使表示子文件55、60和65的文件系统记录指向其父目录80的记录。类似地,表示子文件70和75的文件系统记录指向其父目录85的记录。
在该示例性倒置层次结构50的下一层,文件90和95以及目录80包含在目录100内,而目录85包含在目录105内。因此,文件系统软件47组织文件系统,以使表示子目录80和子文件90和95的文件系统记录指向它们的父目录100的记录。同理,表示子目录85的文件系统记录指向其父目录105的记录。
根目录110可形成倒置层次结构50的干线。在本示例中,目录100和105以及文件115包含在根目录110内,因此,文件系统软件47组织文件系统,以使得表示子目录100和105以及子文件115的文件系统记录指向其的父目录105的记录。
在图3中示出了表示文件系统软件47组织文件系统的记录以执行倒置层次结构的一种方式。在该文件系统的执行中,文件系统软件47生成一个或多个元文件,其包括与文件系统中使用的每个文件和目录相对应的记录。图3表示单个的元文件120和元文件120内的记录排列和格式化的示例性方式。在该示例中,元文件120排列为包括多个等长度记录条目(record entry)125的表。每个记录条目125与文件系统使用的单个文件或目录对应。如在130表示的唯一的文件标识符由文件系统软件47使用,以表示元文件120的相应的记录125。如果每个记录条目125具有相同的记录长度,可选择文件标识符130的格式,以使之可直接或间接地利用为元文件120中所需的记录的索引。例如,文件标识符130可构成与元文件120的第一记录的存储器地址位置一起使用的偏移值,以计算具有所希望的目录/文件信息的元文件记录的第一字节的存储器地址位置。
在图3的示例中,文件标识符130指向元文件120中的记录135(条目7)。在图3中所示的记录135是与元文件120相邻的扩展形式。记录135的扩展形式还示出了用于每条记录条目125的基本记录格式。在该示例中,记录135包括多个不同的字段,该字段包含与记录所表示的文件或目录相关的信息。其中,该信息与文件系统的结构内的文件或目录对应。
通过采用元文件记录格式可实现文件系统的倒置层次结构,其中每条元文件记录包括指向表示其父目录的元文件记录的指针。图3示出了元文件记录格式,其中每条元文件记录包括存储其父目录的文件标识符的父记录标识符字段140。在该示例中,元文件记录135的父记录标识符140与用于地址记录145(条目9)的文件标识符对应。反之,记录145包括与包含着文件的目录或由记录135表示的目录相关的信息。
每条元文件记录还包括与记录所表示的目录或文件有关的其它信息。在记录135的示例性的记录格式中,采用多个不同的信息字段。这些信息字段包括模式字段150、用户标识字段155、组标识字段160、存取时间字段165、修改时间字段170、创建时间字段175、文件长度字段180和短名字字段185。模式字段150用于确定由记录表示的文件或目录是否是系统文件/目录、隐藏文件/目录、只读文件/目录等等。用户标识字段155和组标识字段160包含与表示的文件或目录的用户和组所有权有关的信息。存取时间字段165、修改时间字段170和创建时间字段175分别包含与表示的文件或目录最后存取的时间、表示的文件或目录最后修改的时间和表示的文件或目录创建的时间有关的信息。长度字段185包含与记录表示的文件长度有关的信息并且对于目录记录其为零。最后,短名字字段185包含表示对应文件或目录的短文本名字的ASCII字符。例如,可按照POSIX标准选择短名字字段185的长度。此外,每条记录可包括与短名字对应的散列值和/或名字之和。文件系统软件47可使用这些杂凑值和/或名字之和,以快速搜索特定目录和/或文件记录。
元文件120中的每条记录还可包括用于扩展记录标识符字段190。扩展记录标识符190可用做指向元文件120中扩展记录的文件标识符。扩展记录还可包含由记录所表示的文件或目录的其它信息,并且属于特定文件或记录的所有信息不适合在分配给单一元文件记录的内存空间内的情况下特别有用。
图3示出了可使用扩展记录标识符190的一种方式。在该示例中,记录135的扩展记录标识符190与用于在元文件120中存取记录195(条目11)的文件标识符(fid)对应。在图3中示出了与记录135的分解图相邻的记录195的分解图。该分解图示出了可用于扩展记录的记录格式。如图所示,每条扩展记录可包括其自身的父标识符字段200。然而,扩展记录的父标识符字段200与指向扩展记录的记录的文件标识符对应。在图3所示的示例中,父标识符字段200的内容用于指回记录135(条目7)。
在分配给两个记录条目的内存空间不够保存属于文件或记录的所有信息的情况下,扩展记录195利用其自身扩展记录标识符还可指向更进一步的扩展记录,如包括在记录195的字段205中的扩展记录标识符。尽管未显示针对扩展文件标识符125指向的更进一步地扩展记录的格式,但更进一步地扩展记录同样包括指回记录195的父记录标识符。
包括在扩展记录中的信息类型可在文件系统之间改变。在图3中,扩展记录195包括长名字字段210,其包含与由记录135表示的文件或记录的长名字的文本对应的ASCII字符。其它的字段可保留在每条扩展记录如记录195的扩展区字段215中,以存储与对应文件或目录相关的另外的信息。
在上文中所述的示例中,文件系统使用的扩展记录存储在元文件120中。然而可选地,扩展记录和任何更进一步地扩展的记录可存储在独立元文件、多重元文件等中。独立元文件不需要与元文件120或彼此共享相同存储介质。然而,元文件可存储在处理器15可访问的不同存储介质中。甚至,基本元文件记录(不具有对应扩展记录的目录和文件记录)可分布在多重文件和/或多重存储介质中。同样地,尽管示例性系统的元文件记录存储在独立元文件中,但可选地元文件可为在相同或不同存储介质上的多种独立文件的形式。
通过以倒置层次结构组织计算机系统10的文件和目录,从而可能实现一个或多个文件系统优点。例如,文件系统能够以典型的文件和目录事务(即,移动文件/目录、删除文件/目录、创建文件/目录、复制文件/目录)自动随单独元文件记录的改变、添加或删除而完成的任何方式来实现。在这种实现中,例如,仅通过改变父标识符140,将记录135表示的文件/目录移动到层次中的另一个目录,这样,它为新的父记录指向元文件记录。这可利用对元文件120中记录135的单一写操作来完成。
所述倒置层次结构可用于优化基于事务或日志的系统。示例性的基于事务或日志的系统可由图1所示的部件构成。在该示例中,事务文件220保持在持久性存储单元30中,并用于保持与文件系统的每个文件和目录相关联的事务的记录。基于包含在事务文件220中的事务记录自动提交对文件系统的更新。以其中最简单的形式,每条事务记录可作为映射到持久性存储单元30的物理块或区的单一逻辑页而存储。
图4表示了可用于对计算机系统10的事务记录225进行格式化的一种方式。一般而言,事务文件220的每条事务记录225包括标头字段230和对应数据字段230。该标头字段230可包括多个不同子字段。图4中所示的子字段包括事务序列字段240、文件标识字段245、事务状态字段250、簇高(cluster high)字段255、簇低(cluster low)字段260和簇数字段265。此外,另外的子字段可包括在标头230中,以验证事务的完整性和用于错误校正。这些另外的子字段包括簇总和字段247、事务总和字段、对标头230进行校验和校正的错误校正码字段257、对数据235进行校验和校正的错误校正码字段259以及表示其中存储事务记录的内存地址状况的另外状态字段262。
标头字段230的每个子字段对于文件系统软件47都具有意义。在该示例中,事务序列字段240是由文件系统软件47指派的单调性增加的事务标识符。当新的事务记录添加到事务文件220时,存储在新记录的事务序列字段240中的值可在按时间在前的事务记录的事务序列字段的值之上增加预定量。因此,认为具有较大事务标识符值的事务记录是在时间上晚于具有较小事务标识符值的事务记录而增加至事务文件220的。如由事务序列字段240的值(和在一定情况下,事务文件220的块内的事务记录的位置)所表示的事务的时间顺序允许文件系统软件47以适当的顺序而应用(即,提交)事务,以保持文件系统内容的完整性。也可使用记录事务时间顺序的其它方式。
文件系统软件47使用事务状态字段250来确定是否提交事务记录225的事务。一旦提交事务,文件系统软件47就可禁止对提交的事务记录225再进行更改。这确保文件系统的一致性,还允许文件系统将事务文件220存储到如一次写入、闪存介质等中。
标头230的文件标识字段245识别事务记录225所影响的文件。可选择文件标识字段245的格式,这样它与元文件记录中使用的文件标识符是相同的。簇高字段255和簇低字段260由文件系统软件47使用,以确定要写入到标识文件中的数据235所在的起始地址(或偏移量),而簇数字段265用于确定由数据235重写的标识文件的簇的数目。
如上所述,持久性存储单元30可包括一个或多个闪存装置。闪存装置将信息存储在逻辑门中,该逻辑门被称为“存储单元”,其中每个逻辑门通常存储一比特的信息。闪存技术的最近进展也使得这样的装置能够每单元存储超过1比特,有时称之为多级单元装置。此外,闪存是非易失性的,这是指从装置将电源拔出时,存储单元的内容是不会丢失的。
尽管闪存装置技术不断进化,但主导技术包括NAND闪存和NOR闪存。NOR闪存装置和NAND闪存装置一般在每个存储单元所使用的逻辑门的类型上是不同的。图5示出了一种类型的NAND闪存装置275的示例性逻辑结构270。如图所示,将装置275的可用内存组织到每个具有相等数量存储单元(即,16K字节)的连续物理块280中。NAND闪存装置275进一步将每个连续块280分成特定数量的物理扇区或页290。接着,将每页物理页290进一步分成数据区域295和备用区域300。通常保留数据区域295用于数据的存储,而通常保留备用区域300用于对与存储在数据区域295中的数据相关的元信息的保持。元信息可包括,例如,用于扇区内容的验证和校正的错误校正码、循环冗余校验数据等等。
除了每页的备用区域位于数据区域的对侧之外,NOR闪存装置具有与图5所示的结构类似的结构。NOR闪存装置还提供随机存取读和编程操作,允许在独立内存位置上进行读取或读取独立内存位置。然而,一旦已写入块中的内存位置,NOR闪存装置就不允许将该块重写为一个比块小的间隔尺寸。同样,NOR闪存装置不允许在比块小的间隔尺寸进行擦除操作。插入快速标记保存文档。
数据区域295和备用区域300在NOR和NAND闪存装置中通常设置为特定长度。例如,对于528字节的总页长度,图5的示例性NAND闪存装置275的每页290包括512字节的数据区域295和16字节的备用区域300。NAND闪存装置275还采用每块280具有32页290。其它页长度可用于计算机系统10并且是市售的。例如,许多NAND装置包括具有64页的块,其中每页存储2112字节,这样,每页的总数据区域是2048字节,每页的备用区域是64字节。
闪存装置,如NAND闪存装置275,通常每次在内存的整个块280上执行擦除操作。擦除操作将块280内的所有比特设置为一致状态,通常为二进制值“1”。在闪存装置275的擦除块280上的编程操作只能改变整页290的内容(尽管可以稍微不同的方式来对NOR闪存装置编程)。一旦NAND闪存装置的页290被编程,就不能对其状态再进行改变,直到再次擦除整个块280。闪存装置275的内容的读取还发生在页级上。
图6示出了可在闪存装置如NAND闪存装置275中组织事务记录的一种方式。在该示例中,每个事务记录305包括两个或多个连接的逻辑页315。每个逻辑页315依次包括装置275的块280的两个或多个邻接物理页290。将用于事务记录310的元数据信息存储在备用区域300中,且可包括一些与图4的标头230有关的所述字段。依据每页290的备用区域300的长度,可将元数据信息在事务记录310的多重备用区域330之间分配。图6表示元数据信息在两个连续物理页290的备用区域300之间的分配。图6所示的事务记录也可这样组织,每项事务310与依次由例如两个连续物理页290构成的单一逻辑页315对应。
图7表示存在闪存装置275的每个逻辑页315和物理页290之间的一对一对应的可选设置。本设置与图6所示的设置之间的另一个不同是,所有元数据信息320都存储在事务310的第一物理页290的独立备用区域300中。当采用大容量闪存装置时,这种类型的布置非常适用。然而,元数据信息320还可在事务记录的两页连接物理页290的备用区域300之间分配。
存储在相同装置块290中的事务记录310的序列标识符可具有相同值。在这种情况下,序列标识符提供了时间序列信息,其用于对不同装置块的事务记录之间的时间关系进行比较。存储在相同块中的事务记录310的时间序列信息可从块290内事务记录310的偏移位置而获得,其中稍后发生的事务记录310出现在较大偏移量。
在计算机系统10已启动或通电后,可通过在随机存取存储器35中生成重构版本的文件系统来验证文件系统的完整性。通常利用存储在事务文件220中的有效的、已提交的事务和根据存储在元文件120中的文件/目录信息来生成图1的330所示的重构文件系统。在图1中,重构文件系统330包括重生成的文件层次335和外延表340。
图8至11表示生成外延表340的一种方式。图8示出了可用于生成外延池340的多步相关处理步骤,而图9至11示出了在操作中生成和使用的各种表和阵列的逻辑组织。
通过扫描事务文件220的块而找到所有事务记录,从而在图8的步骤345开始外延表340的生成。可按从最低序列块到最高序列块的顺序来扫描块,在其中找到提交的事务记录。当在块内找到事务时,在步骤350生成识别每个具有事务记录的装置块的块记录的阵列。
在于文件系统软件47扫描事务的事务文件220的块时,作为已撤消事务的结果或由于还未分配用于文件系统中的多个块,文件系统软件会遇到已擦除的块。事务标头可这样建构,使得有效事务不存在,该有效事务将具有设置为擦除值通常为二进制“1”的标头的所有比特。当文件系统软件47扫描事务文件220的块时,可跳过其中标头指示擦除块的任何事务。当标头不变量是相反的擦除值时,通过使用作为指示事务被文件系统使用的标志的单一比特,可执行该标头不变量。在事务标头中找到这样的擦除签名值后,跳过块中剩余页的扫描,从而保存将另外用于存取擦除页的时间。整个系统启动时间相应地缩短。
图9表示示例性块阵列355的组织。每条块阵列记录360包括序列字段365、开始事务字段370和事务数字段375。序列字段365可用于存储用于存储在块中事务记录的事务标识符值。开始事务字段370可用于存储块中第一事务的索引(index),事务数字段375可用于存储在块中找到的事务数。
在图8的步骤380中,文件系统软件47生成块阵列355中每条记录条目的事务清单表。图9示出了可组织事务清单表385的一种方式。在该示例中,块阵列355的每条记录360指向事务清单表385的至少一条事务清单记录390。更具体地,为了在给定块阵列记录360表示的块中所找到的每项事务而生成事务清单记录390。给定块阵列记录360的事务数字段375中存储的值与给定块中的事务数对应,并且指出将增加至事务清单表385的给定块的记录390的数目。
事务清单表385的每条事务清单记录390可具有相同记录长度,并包括相同的记录字段。图9的记录390中使用的示例字段包括文件簇偏移字段395、装置簇索引字段400、簇数字段405和文件标识符/索引(idx)字段410。文件簇偏移字段395可用于识别块内事务的物理位置。装置簇索引字段400可用于识别事务的数据在哪里开始。簇数字段405可用于识别在事务内出现数据簇的数目。最后,如下文中的说明,文件标识符/索引字段410是多功能的。然而,初始时,存储在文件标识符/索引字段410中的值用于识别将事务应用的文件。存储在字段410中的文件标识符值可与用于参考元文件120中记录的文件标识符直接对应。在步骤380完成后,例如以增加的块顺序来排列块阵列355的记录360,且以增加的页顺序来排列置每个块阵列记录360的记录390。
在步骤415,根据存储在序列字段365中的值对块阵列355的记录360进行分类。以时间顺序(即,对应事务将应用于文件系统的文件的顺序)设置事务清单表385的记录390而执行改操作。
然后利用块阵列355和事务清单表385的分类记录在RAM 35中生成用于存储与文件系统的事务记录对应的文件节点信息的临时文件440。最终,首先将与文件系统的根目录对应的基本记录添加到临时文件440。用于生成临时文件440中根目录节点的信息可从与存储在元文件120中的根目录文件对应的记录获得。
图10的445通常表示设置临时文件440中文件节点记录的一种方式的逻辑表示。在该示例中,每条文件节点记录450包括文件节点字段455和起始字段460。文件节点字段455的内容用于识别事务清单表385的各种事务记录390所链接的文件节点。为简单起见,文件节点字段455的内容可具有与用于访问元文件120的对应记录条目125的文件标识符相同的格式。起始字段460的内容可用于识别与文件节点字段455所标识的文件相对应的事务清单表385中的第一事务记录390的位置。这样,每条文件节点记录450识别文件系统内的文件及与标识的文件相关的第一事务的位置。
在步骤420,横向穿过块阵列355和事务清单表385的每条分类记录360和390,以确定临时文件440是否包括与存储在文件标识符/索引字段410中的文件标识符对应的文件节点记录450。如果在临时文件440中没有找到与事务记录390具有相同文件标识符的文件节点记录450,则在步骤430创建新的文件节点记录450。一旦与事务清单记录390对应的文件节点记录450存在于临时文件440中,事务清单记录390就可链接到文件节点记录450的事务清单。在这个示例中,事务清单记录390在图8的步骤435链接到文件节点记录450的事务清单。事务清单记录390链接到文件节点的事务清单的方式可取决于事务清单记录390是否是文件节点的第一事务清单记录或文件节点的后续事务清单记录。如果它是文件节点的第一事务清单记录,则更新文件节点记录450的起始字段460以识别该第一事务清单记录390的起始位置。同样地,文件节点记录450的起始字段460的内容可用于指向事务清单表385中的位置,继而该事务清单表385包含应用于文件的第一事务的扩展信息。当事务清单记录390附加至文件节点的现有事务清单记录中时(即,当它不是文件节点的第一事务清单记录时),文件标识符/索引字段410的功能改变。更具体地,字段410的值和功能改变,从而其指向与文件节点相关的最后事务记录390。这在图10中示出,其中文件节点记录450的起始字段460指向事务清单记录390的起始处。接着记录390的文件标识符/索引字段410指向事务清单记录465的起始处,其包含关于文件节点记录450表示的文件的第二事务的位置的信息。类似地,文件节点记录470的起始字段460指向事务清单记录475的起始处。事务清单记录475的文件标识符/索引字段410指向事务清单记录480的起始处,其包含关于文件节点记录470表示的文件的第二事务的位置的信息。
一旦事务清单表385的所有事务清单记录以适当方式与对应文件节点记录链接,那么在步骤485横向穿过每个文件节点的事务清单记录,以移除涉及未提交和/或坏文件事务的任何事务清单记录。这些事务清单记录的移除可以各种不同方式来完成。例如,文件系统软件47可校验最后发生事务的状态字段,以确定其是否被提交。如果事务已提交,则事务清单表385中的对应记录未受干扰。然而,如果事务未提交,那么移除事务清单表385中的对应记录,否则将其忽略。
为了加速这种类型的事务提交校验,文件系统软件47仅需要确保最后发生的事务已提交。由于仅最后发生的事务受到电力故障、不正常的系统停止等等的影响,所以可跳过所有其它记录的提交校验。通过跳过所有其它记录的提交校验,系统启动所要求的时间可充分缩短。
尽管作为线性序列的一部分而示出,但当结合对应文件节点来处理每条事务清单记录时,可执行步骤485。例如,文件系统软件47可校验包括在每条事务记录的标头中的状态信息,以确定事务是否已提交。由于每条事务记录用于总装对应事务清单记录,所以该校验可发生。一旦文件系统软件47找到未被提交的事务,那么不需要对图8的步骤420至485中的事务清单表385的进一步处理。
在步骤490,条目在每个文件节点的外延池340中生成。图11表示其可以完成的一种方式。在该示例中,每个文件节点的起始字节460的内容可改变,因此,其现在作为外延索引字段487而工作。外延索引字段487指向包含文件第一事务的事务数据位置信息的外延池340的第一位置。每个扩展记录490可包括多个簇字段495、起始簇字段500和下一个外延字段505。起始簇字段500识别装置270中的起始位置,在其中存储与文件节点对应的文件的第一文件事务。簇数字段495识别用于存储文件事务的装置270的数目。下一个外延字段505对文件节点所表示的文件的下一个扩展记录的外延索引进行识别。在该示例中,外延索引487指向扩展记录510,而扩展记录510的下一个外延字段505指向扩展记录515。
用于生成外延池340的记录的数据可至少部分地从存储在事务清单表385中的数据获取。在此处表示的示例中,外延池340是事务清单表385的更紧凑的形式。最终,如果事务清单记录是相同文件节点的一部分,文件系统软件47将具有连续数据的事务清单记录合并为独立外延记录条目。类似地,不需要再在RAM 35中保存块阵列355。因此,块阵列355可从RAM 35删除。
在用于生成外延池340的各种步骤的执行过程中校验事务文件220中的事务的完整性。例如,可在图8的步骤350或380的过程中执行事务记录的完整性校验。普通数据校验包括CRC和ECC技术。
为了缩短计算机系统10的启动时间,错误校验技术可限于包括在特定事务的标头中的信息。当在图8所示的启动处理过程中找到事务时,文件系统软件47可识别事务是否影响文件数据或元数据,如元文件120中的目录结构信息。该差别可以是根据与事务相关的文件标识符。通常,元数据会由众所周知的并且硬编码至文件系统软件47中的文件标识符(例如,它们将元文件120识别为属于事务的文件)而表示。由于仅要求元数据确保文件系统在启动后处于一致状态,所以仅当事务涉及这样的元数据时执行关于事务的数据部分的数据校验技术。如果事务不涉及元数据的变化,那么数据校验技术最初可仅限于标头信息的校验。在图6所示的事务记录格式中,必须在系统启动时验证的主要标头信息存储在每条事务记录310的第一备用区域300。这允许文件系统软件47跳过对包括在每条事务记录310的第二备用区域中的标头信息的验证,从而进一步优化启动顺序。如下文将进一步详细解释的,可延迟每项事务的数据部分的错误校验,直到在启动序列完成后对应文件首次由文件系统软件47存取的时间为止。
可通过仅对一系列序列事务的第一事务标头的错误校验进行限制来进一步优化事务记录的任何启动验证。在事务文件220的启动扫描过程中,当找到指示相同文件流的序列事务记录数的事务标头时,一旦验证了序列的第一事务记录的标头,则可跳过对序列中随后事务的标头的验证。然后,标头信息的扫描和验证可与最后部事务的下一个块一起重新继续。
在RAM 35中生成重构文件系统330的下一步大的步骤是,重新生成的文件层次335的构建。在本示例中,重新生成的文件层次335包括文件和目录节点记录。图12的520大体示出了节点记录的示例性格式,而图13的525大体示出了文件节点相应的示例性格式。
目录节点格式520包括文件系统软件47使用的多个不同的字段。更具体地,目录节点记录520可包括兄弟节点(sibling)字段530,文件标识符字段535,父标识符字段540,子字段545和目录命名字段550。类似地,图13的文件记录包括文件系统软件47所使用的多个不同的字段。文件节点记录字段可包括兄弟节点字段555,文件标识符字段560,外延索引字段565与名称总和字段570。
由于在重新生成的文件层次335的构建中使用元文件120的记录中所包含的数据,设置在元文件120中的元文件记录的方式对系统启动性能具有影响。因此,元文件120的记录设置在单个元文件中,其中将具有相同长度的邻接记录全部存储在相同的存储介质中。该设置提高了文件系统软件47存取元文件数据的速度,并减少了这样的存取所需要的处理量。
图14示出了用于生成重新生成的文件层次335的每条文件节点记录525和目录节点记录520的字段的步骤的顺序。为元文件120的每条记录而执行所示出的序列,可在步骤575起始。在步骤575,根据元文件120内的第一记录条目的偏移而生成文件标识符。在步骤580进行重新生成的文件层次335的校验,以确定是否已经存在与文件标识符对应的文件节点记录525或目录节点记录520。如果不存在相应的记录520或525,那么在重新产生的文件层次335中创建新的记录文件。新创建的记录的格式取决于文件标识符是与元文件120中的文件条目对应还是与目录条目对应。文件系统软件47将进行该确定,并应用适当的记录文件格式520或525。
在步骤585,利用在元文件120中发现的文件/目录的属性来生成新创建记录的字段。如果新创建记录对应于目录节点,则利用元文件120中相应记录的父标识符和短名称字段中的数据来产生父标识符字段540和目录命名字段550。如果新创建记录对应于文件节点,那么利用元文件120中相应记录的文件名数据所直接存储的数据或从其中获得的数据来生成名称总和字段570。利用相应的文件节点记录450的外延索引字段487中查找到的数据来生成外延索引字段565(参见图11)。
如果新创建文件与目录节点对应,那么在步骤590进行在重新生成的文件层次335中的搜索,以确定父节点是否存在。如果父节点不存在,那么将与父节点的目录对应的记录增加至重新生成的文件层次335中。
在步骤595,将新生成的文件/目录记录链接至父目录节点的树结构中。如果新生成的文件/目录记录的子字段545表示父目录不具有子目录,那么将父目录记录的子字段545的值重置,以指向新生成的文件/目录记录,并且设置新生成的文件/目录记录的兄弟节点字段555或530以表示新生成的文件/目录记录不具有任何兄弟节点。如果父节点记录的子字段545表示父目录节点具有子目录,那么设置新生成的文件/目录记录的兄弟节点字段565或530,以指向父目录的现有子目录,并且设置父目录的子字段545以指向新生成的文件/目录记录。如果新生成的文件/目录记录与目录节点对应,那么设置新生成的目录记录的父标识符字段540,从而指向父目录节点。
在步骤600,文件系统软件47从新生成文件/目录记录中父目录开始,递归地上升父目录节点,并执行一系列处理步骤,直到到达根节点。在此,新生成的文件/目录记录的父目录节点可称作当前目录节点。在图14所示的示例性处理中,文件系统软件47校验重新生成的文件层次335,以确定是否存在与当前目录的父节点对应的目录节点记录。在步骤605和610执行该处理。如果在重新生成的文件层次335中不存在这样的目录记录,那么在步骤615生成新目录记录。然后,设置新生成的目录记录的子字段545,以指向作为新目录记录的唯一子记录的当前目录节点记录。在步骤620,设置当前目录节点记录的父标识符字段540,以指向新生成的目录记录。在步骤625设置当前目录节点记录的兄弟节点字段530,以表示当前目录节点记录没有兄弟节点。
如果在步骤605和610执行的校验表示与当前目录的父节点对应的重新生成的文件层次335中存在目录记录,则在步骤630将当前目录节点链接至父目录节点的一般化的树结构中。因此,设置当前节点的父标识符字段540,以指向重新生成的文件层次335中的父节点记录的位置。设置当前目录节点的兄弟节点字段530,以指向与父节点记录的子字段545所指向记录相同的记录。最后,设置父目录节点的子字段545,以指向当前目录节点的位置。
在步骤635,文件系统软件47进行校验,以确定是否完成递归目录处理。在本示例中,当处理进行到具有唯一的和可识别的文件标识符的根节点时,完成了递归目录处理。如果在步骤635达到根节点,则在步骤640开始对元文件120中的下一个文件记录条目的处理,该步骤640将处理控制返回至步骤575。如果在步骤635没有达到根节点,则在步骤605重复开始,处理在上升的文件/目录层次中的下一个父节点。
图15是重构的文件系统330的逻辑表示,并对与具有图2所示的文件层次的文件系统所应用的图8和14的处理步骤对应。在本示例性表示中,线665、670、675和680分别表示与表示目录105、100、80和85的目录节点记录的父标识符字段540的内容对应的指针。线645、650、660、655和652分别表示与表示目录110、100、105、80和85的目录节点记录的子标识符字段545的内容对应的指针。线685、690、695和705分别表示与相应于目录100、105和80的目录节点记录的兄弟节点标识符字段530的内容对应的指针。线700、705、710和715分别表示与相应于文件90、55、60和70的文件节点记录的同属标识符字段555的内容对应的指针。
图15还表示利用重构文件系统330的在持久性存储单元30的事务文件220中存取数据的一种方式。如图所示,文件系统软件47为软件将要存取的文件节点记录而提供文件标识符730。在本示例中,文件标识符730指向表示文件55的文件节点记录。然后,文件系统软件47利用文件节点记录的内容索引565的内容作为外延池(extents pool)340的索引,以对事务文件220中的文件的数据定位。但是,应明白文件系统软件47能够以除了图15中所示的方式之外的多种不同方式,来使用重构文件系统330的内容。
如上所述,在启动过程中,不执行文件完整性的全部验证,以加速启动处理。可选地,文件系统软件47可延迟与给定文件对应的事务记录的全部验证或先前未验证部分的验证,直到第一次存取给定文件或后继存取给定文件时。因此,文件系统软件47保存表示给定文件的每个事务文件记录的完整性是否已完全验证的表。可选地,文件系统软件47可利用重新生成的文件层次335中的每条文件节点记录的一个或多个比特,以指出文件的事务记录的完整性是否已完全验证。在文件系统启动处理完成之后,第一次(或以后)取文件时,文件系统软件47校验该文件验证指示符。如果该指示符表示文件的事务记录没有完全验证,此时,可执行事务文件记录的验证。为加快验证过程,可将事务文件记录的验证限制为原来没有验证的特定部分的记录。例如,由于在文件系统启动过程中已经校验文件的大多数事务记录的标头,文件系统软件只需要验证文件的每个事务记录的数据部分的完整性。该验证处理可包括一个或多个CRC处理、一个或多个ECC处理等。如图5、6和7所示,每条事务记录标头中的许多不同的字段可专用于验证事务记录的完整性。如果完整性校验失败,并且利用有关错误校正代码的应用程序不能改正该错误,则将程序错误报告回作出访问文件内容请求的应用程序或系统。一旦将所有的文件事务记录全部验证,文件系统软件47可相应地改变文件的验证指示符。
尽管已描述了本发明的各种实施例,对于本领域技术人员很明显,在本发明的范围内可存在更多的实施例和实现方式。因此,除了按照所附的权利要求及其等效之外,本发明不受限制。
权利要求
1.一种计算机系统,其包括处理器;所述处理器可访问的随机存取存储器;和所述处理器可访问的持久性数据存储装置;文件系统软件,该文件系统软件由所述处理器执行,以管理存储在所述持久性数据存储装置中文件的文件数据和文件系统结构;所述文件系统软件保存的事务文件,其中所述事务文件包括多条事务记录,每条事务记录具有标头部分和数据部分,其中每条所述事务记录的标头部分包括一个或多个字段,所述一个或多个字段包含与所述事务记录所表示的文件事务相对应的信息;其中所述文件系统软件执行启动处理,在所述启动处理中在所述随机存取存储器中产生重构文件系统,并且当所述事务记录满足一个或更多个预定要求时,启动处理将跳过所述事务记录的数据部分中存储的信息的验证;并且其中在所述启动处理完成后发生给定文件的首次或后续存取时,所述文件系统软件对表示给定文件的每条事务记录的先前未验证的数据部分进行验证。
2.一种计算机系统,其包括处理器;所述处理器可访问的随机存取存储器;和所述处理器可访问的持久性数据存储装置;文件系统软件,其由所述处理器执行,以管理存储在所述持久性数据存储装置中文件的文件数据和文件系统结构;所述文件系统软件保存的事务文件,其中所述事务文件包括多条事务记录,每条所述事务记录具有标头部分和数据部分,其中每条所述事务记录的标头部分包括一个或多个字段,所述一个或多个字段包含与所述事务记录所表示的文件事务相对应的信息;其中所述文件系统软件执行启动处理,在所述启动处理中在所述随机存取存储器中生成重构文件系统,并且除非所述事务记录影响所述文件系统结构的元数据,否则所述启动处理将跳过对所述事务记录的数据部分中存储的信息的验证;以及其中所述启动处理对影响所述文件系统结构的元数据的事务记录的标头部分和数据部分中存储的信息进行验证,和在所述启动处理完成以后发生给定文件的首次或后续存取时,所述文件系统软件对表示给定文件的每条所述事务记录的先前未验证的数据部分进行验证。
3.一种计算机系统,其包括处理器;所述处理器可访问的随机存取存储器;和所述处理器可访问的持久性数据存储装置;文件系统软件,该文件系统软件由所述处理器执行,以管理存储在所述持久性数据存储装置中文件的文件数据和文件系统结构;由闪存介质中的所述文件系统软件保存的事务文件,所述闪存介质被组织成为存储块,每个所述存储块包括多页存储页,且所述事务文件包括多条事务记录,其中每条事务记录包括标头部分和数据部分,所述每条事务记录的标头部分包括一项或多项包含与所述事务记录所表示的文件事务相对应的字段;其中所述文件系统软件执行启动处理,在所述启动处理中在随机存取存储器中生成重构文件系统,并且当第一次发生的事务记录和随后的事务记录存储在相同的存储块中并影响相同的文件时,所述启动处理验证一系列事务记录中的所述第一次发生的事务记录的标头部分,而跳过对任何随后的事务记录的验证,并且其中在所述启动处理完成后发生给定文件的首次或后续存取时,所述文件系统软件对表示给定文件的每条事务记录的先前未验证的标头和/或数据部分进行验证。
4.如权利要求1所述的计算机系统,其中所述启动处理对存储在多个事务记录的标头部分中的信息进行验证。
5.如权利要求1所述的计算机系统,其中所述启动处理对错误校正码字段进行验证,以校验存储在多条事务记录的标头部分中的信息。
6.如权利要求1所述的计算机系统,其中所述一致数据存储装置包括闪存类的介质。
7.如权利要求6所述的计算机系统,其中将所述闪存类的介质组织成为存储块,且其中每个所述存储块包括多个存储页。
8.如权利要求1所述的计算机系统,其中所述重构文件系统包括重新生成的文件层次结构和外延表。
9.如权利要求8所述的计算机系统,其中所述重新生成的文件层次结构是由所述文件系统按照倒置的文件层次结构软件来组织。
10.如权利要求1所述的计算机系统,其中除非所述事务记录影响所述文件系统结构的元数据,否则所述启动处理跳过对存储在所述事务记录的数据部分中的信息的验证,且其中当所述事务记录影响所述文件系统结构的元数据时,所述启动处理对存储在事务记录的标头部分和数据部分中的信息进行验证。
11.如权利要求7所述的计算机系统,其中当所述第一次发生的事务记录和随后的事务记录存储在相同的存储块中并影响相同的文件时,所述启动处理验证一系列事务记录中的所述第一次发生的事务记录的标头部分,而跳过对任何随后的事务记录的验证。
12.如权利要求2所述的计算机系统,其中所述启动处理对存储在多个事务记录的标头部分中的信息进行验证。
13.如权利要求2所述的计算机系统,其中所述启动处理对错误校正码字段进行验证,以校验存储在多个所述事务记录的标头部分中的信息。
14.如权利要求2所述的计算机系统,其中所述持久性数据存储装置包括闪存类的介质。
15.如权利要求14所述的计算机系统,其中所述闪存类的介质组织成为存储块,和其中每个所述存储块包括多个存储页。
16.如权利要求2所述的计算机系统,其中所述重构文件系统包括重新生成的文件层次结构和外延表。
17.如权利要求16所述的计算机系统,其中所述重新生成的文件层次结构是由所述文件系统按照倒置的文件层次结构软件来组织。
18.如权利要求14所述的计算机系统,其中当所述第一次发生的事务记录和随后的事务记录存储在相同的存储块中并影响相同的文件时,所述启动处理验证一系列事务记录中的所述第一次发生的事务记录的标头部分,而跳过对任何随后的事务记录的验证。
19.如权利要求3所述的计算机系统,其中所述启动处理对存储在多条事务记录的标头部分中的信息进行验证。
20.如权利要求3所述的计算机系统,其中所述启动处理对错误校正码字段进行验证,以校验存储在多条事务记录的标头部分中的信息。
21.如权利要求3所述的计算机系统,其中所述重构文件系统包括重新生成的文件层次结构和外延表。
22.如权利要求21所述的计算机系统,其中所述重新生成的文件层次结构是由所述文件系统按照倒置的文件层次结构软件来组织。
23.如权利要求3所述的计算机系统,其中除非所述事务记录影响所述文件系统结构的元数据,否则所述启动处理跳过存储在所述事务记录的数据部分中的信息的验证,并且其中当所述事务记录影响所述文件系统结构的元数据时,所述启动处理对存储在所述事务记录的标头部分和数据部分中的信息进行验证。
24.如权利要求23所述的计算机系统,其中当所述第一次发生的事务记录和随后的事务记录存储在相同的存储块中并影响相同的文件时,所述启动处理验证一系列事务记录中的所述第一次发生的事务记录的标头部分,而跳过对任何随后的事务记录的验证。
全文摘要
公开了一种在实现基于事务的文件系统中所使用的计算机系统。该计算机系统包括处理器、处理器可访问的随机存取存储器和处理器同样可访问的持久性数据存储装置。该计算机系统还包括文件系统软件。该文件系统软件由处理器执行,并且操作以管理存储在持久性数据存储装置中的文件的文件数据和文件系统结构。此外,文件系统软件保持包括多条事务记录的事务文件。每条事务记录具有标头部分和数据部分。每条事务记录的标头部分包括一个或多个字段,指定所述字段以存储与事务记录所表示的文件事务对应的信息。如果文件系统软件的操作中断,则文件系统软件利用启动处理继续进行其工作,其中在随机存取存储器中生成重构文件系统。在系统重启过程中,当事务记录满足一个或多个预定标准时,则启动处理跳过事务记录的数据部分的验证。可选地,延迟数据部分的验证直到完成文件系统启动处理之后的一段时间。例如,假定文件存取在文件系统启动处理完成后发生,那么文件系统软件可在给定文件的首次或后续存取时,验证表示给定文件的每个事务记录的先前未验证的数据部分。
文档编号G06F17/30GK1983267SQ20061009318
公开日2007年6月20日 申请日期2006年6月23日 优先权日2005年7月1日
发明者D·道奇 申请人:Qnx软件操作系统德国有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1