用于文件系统存储设备的分层分配的制作方法

文档序号:6360906阅读:187来源:国知局
专利名称:用于文件系统存储设备的分层分配的制作方法
用于文件系统存储设备的分层分配
背景技术
除了其他方面,文件系统负责管理存储设备的空闲空间。为此,文件系统可以维持与存储设备上的空间相对应的全局线性位图。位图的每个比特可以对应于存储设备上的空间组块(chunk)。如果比特被设置,则这可以指示相应的空间组块被使用。如果该比特没有被设置,则这可以指示相应的空间组块没有被使用。随着存储设备日益增大的大小,这个方案变得效率低下。在此请求保护的主题不限于解决诸如上述环境中的任何缺陷或仅操作在诸如上述环境中的实施例。相反,仅提供这个背景来阐明其中可以实践在此描述的一些实施例的一种示例技术领域。

发明内容
简略地,在此描述的主题的各方面涉及存储空间分配(storage allocation)。在各方面,分层数据结构用于跟踪利用文件系统管理的存储空间(storage)的分配数据。分层数据结构可以具有多个级别(level),其中每个级别具有与不同的存储空间的粒度有关的数据。分层数据结构的各部分可以与分层数据结构的其他部分无关地进行锁定。分层数据结构可以指示存储空间的一个或多个部分用于文件系统对象的独家使用。在预期后续操作中可以在分配的空间中预留额外空间。分配请求器可以从与分层数据结构的不同级别相关联的区域中获得存储空间分配。提供这个发明内容部分来简略地标识下面在具体描述部分中进一步描述的主题的一些方面。这个内容部分既不打算标识所请求保护的主题的关键特征或基本特征,也不打算用于限制所请求保护的主题的范围。除非上下文另有明确指示,否则短语“在此描述的主题”指的是在具体描述部分中描述的主题。术语“方面”将被解读为“至少一个方面”。标识在具体描述部分中描述的主题的方面不打算标识所请求保护的主题的关键特征或基本特征。


上述的方面以及在此描述的主题的其他方面通过示例来阐明而不在附图中进行限制,其中在附图中相同的参考数字指示相似的元素,且其中
图I是代表其中可以合并在此描述的主题的各方面的示例的通用计算环境的框图2是显示根据在此描述的主题的方面的部分分配数据结构的框图3是通常代表可以用于根据在此描述的主题的方面跟踪区域的分配数据的示例数据结构的框图4是代表根据在此描述的主题的方面配置的系统的框图;和图5-6是通常代表可以根据在此描述的主题的方面发生的动作的流程图。
具体实施方式
如在此使用的,术语“包括”及其变体将被解读为意味着“包括但不限于”的开放式术语。除非上下文另有明确指示,否则术语“或”将被解读为“和/或”。术语“基于”将被解读为“至少部分基于”。术语“一个实施例”和“实施例”将被解读为“至少一个实施例”。术语“另一实施例”将被解读为“至少一个其他实施例”。在下文可以包括显式或隐式的其他定义。示例操作环塏
图I显示其上可以实现在此描述的主题的各方面的合适的计算系统环境100的示例。计算系统环境100只是合适的计算环境的一个示例,并且不打算提议关于在此描述的主题的各方面的使用或功能的范围的任何限制。计算环境100也不应被解释为具有与示例操作环境100中示出的组件之中的任何一个或其组合有关的任何依赖或要求。在此描述的主题的各方面可利用众多其他的通用或专用计算系统环境或配置来操作。可能适合于与在此描述的主题的各方面一起使用的众所周知的计算系统、环境或配置的示例包括个人计算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微控制器的系统、机顶盒、可编程消费类电子设备、网络PC、小型计算机、大型计算机、个人数字助理(PDA)、游戏设备、打印机、包括机顶盒的电器、媒体中心或其他电器、汽车嵌入式或附着式计算设备、其他移动设备、包括任何上述系统或设备的分布式计算环境等等。在此描述的主题的各方面可以在计算机执行的计算机可执行指令诸如程序模块的通用上下文中进行描述。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。在此描述的主题的各方面也可以在其中利用通过通信网络链接的远程处理设备执行任务的分布式计算环境中进行实践。在分布式计算环境中,程序模块可能位于包括记忆存储设备的本地和远程计算机存储媒体二者中。参考图1,用于实现在此描述的主题的各方面的示例系统包括采用计算机110的形式的通用计算设备。计算机可以包括能够执行指令的任何电子设备。计算机110的组件可以包括处理单元120、系统存储器130以及将包括系统存储器的各种系统组件耦合至处理单元120的系统总线121。系统总线121可以是包括存储器总线或存储控制器、外设总线以及使用各种总线架构中的任何一种的本地总线的若干种类型的总线结构中的任何一种。通过示例而非限制,这样的架构包括Industry Standard Architecture (工业标准架构)(ISA)总线、Micro Channel Architecture (微通道架构)(MCA)总线、Enhanced (增强型)ISA (EISA)总线、Video Electronics Standard Association (视频电子学标准协会)(VESA)本地总线、也被称为 Mezzanine 总线的 Peripheral Component Interconnect (外设组件互连)(PCI)总线、Peripheral Component Interconnect Extended (外设组件互连扩展)(PCI-X)总线、Advanced Graphics Port (高级图形端口) (AGP)以及 PCI express(PCIe)。计算机110 —般包括各种计算机可读媒体。计算机可读媒体能够是任何的可用媒体,其能够被计算机110访问并且包括易失性和非易失性媒体以及可移除和不可移除媒体二者。通过示例而非限制,计算机可读媒体可以包括计算机存储媒体和通信媒体。计算机存储媒体包括以任何的用于存储诸如计算机可读指令、数据结构、程序模块或其他数据之类的信息的方法或技术来实现的易失性和非易失性以及可移除和不可移除媒体二者。计算机存储媒体包括RAM、R0M、EEPR0M、闪存或其他存储技术、CD-ROM、数字多用途盘(DVD)或其他光盘存储设备、磁带盒、磁带、磁盘存储设备或其他磁存储设备或任何其他的能够用于存储期望信息并且能够被计算机11访问的介质。通信媒体一般收录(embody)计算机可读指令、数据结构、程序模块或调制数据信号诸如载波或其他传输机制中的其他数据,并且包括任何的信息传递媒体。术语“调制数据信号”意味着其一个或多个特性采用诸如编码信号中的信息的方式来设置或改变的信号。 通过示例而非限制,通信媒体包括有线媒体诸如有线网络或直接连线连接以及无线媒体诸如声学、RF、红外和其他无线媒体。上述的任何的组合也应该被包括在计算机可读媒体的范围内。系统存储器130包括采用易失性和/或非易失性存储器诸如只读存储器(R0M)131和随机存取存储器(RAM) 132的形式的计算机存储媒体。一般在ROM 131中存储基本输入/输出系统133 (BIOS),其包含有助于诸如在启动期间在计算机110内的各元素之间传递信息的基本例程。RAM 132—般包含由处理单元120立即可访问和/或目前对其操作的数据和/或程序模块。通过示例而非限制,图I显示操作系统134、应用程序135、其他程序模块136和程序数据137。计算机110也可以包括其他的可移除/不可移除、易失性/非易失性计算机存储媒体。仅通过示例,图I显示从中读取或写入不可移除的非易失性磁媒体的硬盘驱动器141、从中读取或写入可移除的非易失性磁盘152的磁盘驱动器151以及从中读取或写入可移除的非易失性光盘156诸如CD-ROM或其他光学媒体的光盘驱动器155。能够在示例操作环境中使用的其他的可移除/不可移除的易失性/非易失性计算机存储媒体包括磁带盒、闪存卡、数字多用途盘、其他光盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器141 一般通过诸如接口 140之类的不可移除的存储器接口连接到系统总线121,而磁盘驱动器151和光盘驱动器155—般利用诸如接口 150之类的可移除的存储器接口连接到系统总线121。上述的且在图I中显示的驱动器及其相关联的计算机存储媒体为计算机110提供计算机可读指令、数据结构、程序模块以及其他数据的存储。在图I中,例如,硬盘驱动器141被显示为存储操作系统144、应用程序145、其他程序模块146和程序数据147。注意这些组件能够与操作系统134、应用程序135、其他程序模块136以及程序数据137相同或不同。在此对于操作系统144、应用程序145、其他程序模块146以及程序数据147给予不同的编号,以阐明在最低程度上它们是不同的拷贝。用户可以通过输入设备诸如键盘162以及通常被称为鼠标、轨迹球或触摸板的指示设备161将命令和信息输入计算机110。其他输入设备(未显示)可以包括麦克风、摇杆、游戏手柄、卫星天线、扫描仪、触敏屏幕、书写板等等。这些和其他输入设备通常通过耦合到系统总线的用户输入接口 160连接到处理单元120,但是可以利用其他接口和总线结构诸如并行端口、游戏端口或通用串行总线(USB )来连接。监视器191或其他类型的显示设备也经由接口诸如视频接口 190连接到系统总线121。除了监视器之外,计算机还可以包括其他的外设输出设备,诸如扬声器197和打印机196,这些外设输出设备可以通过输出外设接口 195来连接。计算机110可以操作在使用至一个或多个远程计算机诸如远程计算机180的逻辑连接的联网环境中。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其他共同网络节点并且一般包括上面相对于计算机110描述的元素中的许多或所有元素,尽管在图I中仅示出了记忆存储设备181。图I所描绘的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但是也可以包括其他网络。这样的联网环境在办公室、企业范围内的计算机网络、内部网和因特网中是司空见惯的。当在LAN联网环境中使用时,计算机110通过网络接口或适配器170连接到LAN171。当在WAN联网环境中使用时,计算机110可以包括用于通过诸如因特网之类的WAN 173建立通信的调制解调器172或其他装置。可以是内部或外部的调制解调器172可以经由用户输入接口 160或其他适当机制而连接到系统总线121。在联网环境中,相对于计算机110描绘的程序模块或其部分可以存储在远程记忆存储设备中。通过示例而非限制,图I将远程应用程序185显示为驻留在存储设备181上。将意识到所显示的网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其他装置。存储管理
如前所述,将全局线性位图用于在文件系统上分配存储空间可能变得效率低下。图2是显示根据在此描述的主题的各方面的部分分配数据结构的框图。分配数据结构205是分层的,并且可以包括任何数量的级别。如所示的,分配数据结构包括三个级别210-212。级别210可以被假设为高于级别211,而级别211可以被假设为高于级别212。每一个级别可以包括指示用于不同的存储空间的粒度(例如,大小)的分配数据的一个或多个节点。例如,级别210可以包括依照吉字节来指示分配数据的一个或多个节点,级别211可以包括依照兆字节来指示分配数据的一个或多个节点,而级别212可以包括依照千字节来指示分配数据的一个或多个节点。注意吉字节、兆字节和千字节的使用仅是示例性的,并且不打算将在此描述的主题的各方面仅限于这些大小。类似地,即使显示三个级别,但是在其他的实施例中可以具有两个、四个或更多的级别。每一个节点可以根据位图、阵列、范围映射(range map)或具有代表节点的分配状态的数据的其他数据结构来指示分配数据。例如,如果存储空间的大小是1000吉字节,节点215可以包括包含1000比特的位图,其中一个比特用于每个吉字节的存储空间。类似地,如果利用级别211上的节点代表的区域的大小是I吉字节并且级别211上的分配单元的大小是I兆字节,那么节点216可以包括1024个比特来代表1024兆字节的存储空间。类似地,如果利用级别212上的节点代表的区域的大小是I兆字节并且级别212上的分配单元的大小是I千字节,那么节点217和218各自可以包括1024比特来代表1024千字节的存储空间。图3是一般代表可以用于根据在此描述的主题的各方面跟踪区域的分配数据的示例数据结构的框图。数据结构可以对应于图2的节点。数据结构305包括标题310和位图315。例如,标题310可以包括以下的一个或多个1)指示与数据结构相对应的区域驻留在物理存储空间上的位置的值;2)区域的大小;3)位图315中的比特的数量;4)利用每一个比特代表的字节的数量或其他存储测量(也被称为分配单元的分配大小);5)位图315中的空闲比特的数量,其指示用于数据结构的未分配空间;6)位图315中的比特的最大连续数量,其指示用于数据结构的未分配空间的最大连续大小;7)与区域是否位于卷(volume)的一个或多个快照(snapshot)内以及(一个或多个)快照的(一个或多个)标识符有关的数据;8)其他数据,等等。返回到图2,从一个级别到另一个级别的“扇出(fan out)”在各级别之间可能是相同的或不同的。扇出指的是对于高级别的单个分配单元而言较低级别节点具有的分配单元的数量。例如,高级别节点可以利用I比特代表吉字节,而正好在高级别节点下方的节点可以将吉字节分成N个区域并且利用N个比特来代表这N个区域。在实现中,利用高级别上的节点代表的区域的大小可以被正好位于高级别节点下方的节点所代表的区域的大小整除(例如,没有余数)。在一种实现中,存储空间的分配可以利用单片(monolithic)分配器来执行,其中单片分配器使用诸如分配数据结构205之类的数据结构来确定存储设备的空闲部分(有时被称为未分配部分)并由此分配(这些空闲部分)。在另一种实现中,存储空间的分配可以利用一组分层对象(有时被称为分配器)来执行,其中这些对象可以负责分配存储空间中的特定大小的分配单元。在这种实现中,分配器可以被指派来管理利用分配数据结构的一个或多个节点代表的存储空间。每一个分配器可以负责维持用于该分配器管理的存储空间的分配数据。在这种实现中,分配数据结构205可以利用分配器管理的数据结构的集合(collection)来代表。分配器可以包括一个或多个分配存储器以及解除分配存储器的组件或由这一个或多个组件组成。在一个实施例中,每一个分配器可以作为单独的软件对象来实现。在另一实施例中,一个或多个组件可以实现多个分配器或单个单片分配器。如在此使用的,术语组件将被解读为包括设备的所有或一部分、一个或多个软件模块的集合或其部分、一个或多个软件模块或其部分和一个或多个设备或其部分的某种组合等等。从概念性观点来看,可能更容易可视化分配器的分层而非单片分配器。虽然在此描述主题的各方面时有时使用这个观点,但是并没有将在此描述的主题的各方面限于分配各块的多个分立分配器的意图。实际上,在此,如果引用多个分配器,那么这些引用在其他实施例中也将被解释为覆盖执行所指示的动作的单个单片分配器。因而,分配器的“分层”可以指的是以与分配器的分层相类似的方式来分配存储空间的各个块的单个单片分配器。当分配器接收到分配请求时,分配器可以搜索与分配器管理的一个或多个区域相对应的数据结构,以找到足够的存储空间来满足该请求。如果分配器无法在这些区域中找到足够的总的空闲存储空间乃至足够“合适的”空闲存储空间,该分配器可以提出更高级别分配器的分配请求。“合适的”存储空间可以指的是具有满足邻近(contiguity)标准的块、满足位置标准的块或满足某种其他标准的块的存储空间。邻近标准指的是存储空间的块彼此的接近度(closeness)。对于盘驱动器和其他存储设备来说,具有彼此一个挨着一个或者至少紧邻的块可以加速对这些块的访问。严格的邻近标准是使得所有被分配的块在物理存储设备上是物理上邻近的。更放松的邻近标准是使得分配的块是“接近”邻近的,其中相邻的块位于彼此的设定阈值内。在一个示例的接近邻近的标准中,将要分配的每一个块与分配的相邻块相距可能不超过X个块。邻近标准可以指的是与将分配用于分配请求的块有关的平均值和均值标准。例如,相邻块之间的平均距离可能不超过所选择的平均值和/或均值。位置标准可以指的位于或靠近指定的存储空间的物理位置的块。例如,一些应用可能寻求分配来自存储空间的特定物理部分的块。这些应用可以提供存储空间上用于分配空间的期望位置的“提示”。作为响应,可以在分层数据结构的一个或多个级别上进行现有空闲空间的搜索。该搜索可以通过依照与“提示的”(例如,期望的)位置的接近性搜索足够
8大的区域来进行。分配器随后可以提供与期望位置最靠近的空闲空间的指示。上述的标准并不打算是在尝试分配存储空间时可以应用的详尽的或穷举的标准。基于在此的教导,本领域技术人员可以认识到其他的可能有助于分配存储空间的标准而不偏离在此描述的主题的各方面的精神或范围。当较高级别分配器接收到来自较低级别分配器的分配请求时,较高级别分配器可以搜索与较高级别分配器所管理的一个或多个区域相对应的数据结构,分配该区域中的存储空间,更新数据结构来指示该分配,并向较低级别分配器提供针对所分配的存储空间的句柄(handle)。该句柄可以包括或引用至少指示所分配的存储空间的位置的数据。连同接收句柄,较低级别分配器可以初始化数据结构,以考虑(account for)从亲代(parent)分配器分配的空间,并且可以由此开始分配空间。例如,如果与节点217相对应的分配器无法找到足够的空闲空间来满足分配请求,该分配器可以向与节点216相对应的分配器发送分配请求。作为响应,这个亲代分配器可以找到可用存储空间的区域,将该存储空间标记为被分配,并向请求分配器返回针对该存储空间的句柄。作为响应,请求分配器可以初始化与所返回的存储空间相对应的数据结构(例如,另一节点)以指示该存储空间是空闲的,可以根据该分配器管理的包括返回的存储空间以及该分配器管理的其他存储空间在内的任何空闲的存储空间来满足任何的未决分配请求,并且可以酌情更新(一个或多个)数据结构。如果较高级别分配器无法找到足够的存储空间,它可以发出更高级别分配器的分配请求,以此类推,直至或找到足够的存储空间或确定没有足够的存储空间可用于满足分配请求。释放空间与分配空间类似地但是在相反的方向进行。例如,在释放区域中的空间(例如删除或截短文件)时,分配器可以将该空间返回给亲代分配器,可以在预期后续分配请求中持有(hold onto)该空间,或可以采取某种其他动作。如果返回的空间使得包括该空间的亲代的区域是完全空闲的话,那么亲代可以将空闲区域返回给其亲代(如果有的话),以此类推,直至到达与分层数据结构的最高级别相关联的分配器。在一个实施例中,存储空间消耗方(consumer)可以显式地从分层数据结构的任何级别中请求存储空间。例如,需要大量存储空间(例如,吉字节)的存储空间消耗方可以发出利用与节点215相关联的分配器直接满足的分配请求。作为另一示例,消耗方可以显式地请求从与节点216相关联的分配器中分配存储空间。在另一实施例中,存储空间消耗方可以提供期望的分配大小并允许分配管理器(或单片存储空间分配器)确定从中分配存储空间的适当级别。例如,存储空间消耗方可以请求10千字节的存储空间而不指定将从中分配存储空间的特定级别。作为响应,分配管理器可以确定用于为该请求分配存储空间的分层数据结构的级别,并且可以向适当分配器发送分配存储空间的请求。在单片存储空间分配器的情况中,单片存储空间分配器可以遍历(traverse)分配数据结构205来确定从中分配存储空间的适当级别,并且可以响应于分配请求来由此分配存储空间。确定适当级别可以基于分配请求所请求的存储空间的大小、每一个级别的存储空间的可用性、在每一个级别上可用的存储空间的邻近度、其他标准等等。例如,对于数吉字节的请求,适当级别可以是级别210。作为另一示例,对于几个兆字节的请求,适当级别可以是级别211。作为另一示例,对于500兆字节的请求,适当级别可以是级别210或级别211。被分配给最终消耗方(例如,诸如应用)的级别的分配空间可能在数据结构205的较低级别中没有附加信息。例如,如果直接从级别210中给应用分配10吉字节,则这可以利用节点215中的数据来指示并且在级别211-212的节点中可能没有附加信息。在某级别的空间被分配给在较低级别上的节点时,那个空间的分配可以进一步利用在较低级别上的数据来定义。例如,在位置220上的数据指示就涉及节点215而言,分配与位置220相对应的存储空间。换句话说,与位置220相对应的存储空间的整个块不可以分配给另一分配请求器,直至那个存储空间已被释放并被返回到节点215。此外,即使已从特定级别上的特定节点分配了存储空间,这也不意味着所分配的所有存储空间当前被分配给存储空间的最终消耗方。例如,位置220所指示的分配进一步利用级别211的节点216中的数据来定义。节点216指示存储空间的部分从节点216的角度来分配,并且存储空间的其他部分未被分配。再次,被分配给较低级别分配器的诸如在位置221和222上的部分可以进一步利用较低级别中的数据来定义。节点215-218中的标签“A”和“F”指示与节点215-218相关联的存储空间的分配状态。例如,“F”可以对应于空闲的存储空间上的邻近区域,而“A”可以对应于被部分或完全分配的存储空间上的邻近区域。如果某区域已被分配给一个或多个较低级别分配器并且在该区域中仍然剩余未分配的空间,那么该区域被部分分配。如果某区域已被分配给最终消耗方,或者如果该区域已被分配给一个或多个较低级别分配器并且较低级别分配器中的所有空间已被分配给最终消耗方,则该区域被完全分配。标签“A”和“F”仅仅为了方便起见,并且利用这些标签所指示的信息可以利用位图或其他数据来代表,如前所述。—些区域可以是专用的,并且可以仅被分配给某些文件系统对象或其部分。例如,在一个实施例中,一个或多个区域可以被指派给目录。当在该目录中创建或扩展文件时,可以从该目录专有的区域中分配空间。如果在指派给目录的(一个或多个)专用区域中没有足够的空间,那么可以从较高级别分配器中指派一个或多个附加区域给该目录。一旦被指派给该目录,这些附加的(一个或多个)区域也可以变成该目录专用的。为其他实体创建或扩展的文件无法访问被指派给该目录的(一个或多个)专用区域。区域中的空间可以被预留用于未来的与该区域有关的操作。例如,在写时拷贝技术中,可以在修改数据之前制作数据的拷贝。作为另一示例,可能已知某些文件随时间而增长。在区域中预留空间可以使得这些和其他操作更为有效。在区域中预留空间尤其在该区域是专用的时候也可以避免争用。将要预留的空间量可以依照百分比、块的数量、大小或以某一其他方式来指定。在分配区域中的空闲空间时,可以在分层数据结构的一部分上获取锁定。例如,在分配与节点217相关联的区域中的空闲空间时,对于与节点217相关联的数据可以获取锁定。虽然这种锁定可以阻止另一分配请求器同时分配与节点217相关联的空间,但是它并没有阻止分配器分配与其他节点相关联的区域中的空间。图4是代表根据在此描述的主题的各方面配置的系统的框图。图4所示的组件是示例性的,并且不意味着可能需要或包括的所有详尽的组件。在其他实施例中,结合图4描述的组件和/或功能可以包括在其他组件(显示或未显示)中或置于子组件中而不偏离在此描述的主题的各方面的精神或范围。在一些实施例中,结合图4描述的组件和/或功能可以分布在多个设备上。转到图4,系统405可以包括分配请求器410、分配组件415、存储装置450和其他组件(未显示)。分配组件415可以包括空闲空间管理器420、元数据管理器425、存储管理器430、分配器435、预留管理器440、锁定管理器445和其他组件(未显示)。系统405可以在一个或多个计算机上或利用一个或多个计算机(例如,图I的计算机110)来实现。分配组件415中的一个或多个的动作可以利用一个或多个进程来执行。如在此使用的术语“进程(process)”及其变体可以包括一个或多个执行任务的传统进程、线程、组件、库、对象等等。进程可以在硬件、软件或软硬件的组合中实现。在实施例中,进程是任何的计算机机制,然而,尽管如此称谓,其能够执行动作或在执行动作中使用。进程可以分布在多个设备或单个设备上。在一个实施例中,分配组件415可以作为分配器对象的方法来实现。在另一实施例中,分配组件415中的一个或多个可以作为一个或多个函数来实现。如在此使用的术语“函数(function)”可以被视为执行一个或多个任务的代码的一部分。虽然函数可以包括返回数据的代码块,但是其并不限于返回数据的代码块。函数也可以执行特定任务而不返回任何数据。此外,函数可能具有或可能不具有输入参数。函数可以包括子例程、子程序、过程、方法、例程等等。分配请求器410是寻求从分配组件415获得存储空间的任何实体。一些示例的实体包括应用、操作系统组件、数据库、分配器(在具有多个分配器的实现中)等等。分配请求器410可以驻留在托管分配组件415中的一个或多个的设备上或可以驻留在不同的设备上。存储装置450包括任何的能够存储文件并利用文件系统来管理的存储媒体。存储装置450可以是外部的、内部的或包括对于系统405而言是内部和外部二者的组件。如在此使用的术语文件包括目录、文件、其他文件系统对象等等。如在此使用的,文件包括数据。术语数据将被广义解读为包括可以利用一个或多个计算机存储元素来代表的任何事。在逻辑上,数据可以被表示为易失性或非易失性存储器中的一系列I和O。在具有非二进制存储介质的计算机中,数据可以根据存储介质的能力来代表。数据可以被组织成不同类型的数据结构,其包括简单数据类型诸如数字、字母等等、分层的、链接的或其他相关的数据类型、包括多个其他数据结构或简单数据类型的数据结构等等。数据的一些示例包括信息、程序代码、程序状态、程序数据、其他数据等等。空闲空间管理器425可用于搜索节点的分配数据,以找到存储设备上的空闲空间来分配给分配请求。如前所述,分配数据可以被安排在分层数据结构中,其中分层数据结构指示在分层数据结构的不同级别上的节点配对之间(例如,分层)的关系。两个直接相关的节点(例如,具有亲代/子代关系的节点)指示用于不同粒度级别的一些存储空间的分配数据。例如,参考结合图2所述的示例,节点215可以包括指示在I吉字节粒度上的分配数据的分配数据(例如,在位置220上),其中I吉字节粒度上的分配数据对应于指示用于相同的I吉字节但是在I兆字节粒度上的分配数据的分配数据(例如,节点216的分配数据)。此外,注意被显示用于每一个节点的分配数据可以代表与这些节点相关联的存储空间的邻近区域。例如,在紧挨着位置221的位置上的分配数据可以代表在存储设备上可用的物理上与位置221所代表的存储空间相邻近的存储空间。也如前所述,用于每一个节点的分配数据指示是否与该节点相关联的区域的部分被分配(从该节点的角度来看)。元数据管理器425可操作来更新节点的分配数据,以响应与该节点相关联的存储空间被分配给分配请求器(或由分配请求器释放)。如前所述,元数据管理器425也可以更新位图或其他分配表示数据来反映分配状态和其他分配数据(例如,标题中的数据)。存储管理器430可用于存储和提供对于存储设备的文件的访问。存储管理器430可以包括能够与存储设备的硬件通信的低级例程。分配器435可用于利用空闲空间管理器420来为分配请求找到空闲空间。分配器可以进一步可用于利用元数据管理器425,以便结合为分配请求分配空间来更新分配数据。在一个实施例中,空闲空间管理器420和元数据管理器425的功能可以包括在分配器自身中。预留管理器440可用于为分配请求预留附加空间。例如,预留管理器440可以增加分配请求所请求的空间,以确保附加空间可用于牵涉前述的分配空间的后续操作。在一个实施例中,在可以省略分配空间和预留服务器440时,分配器435可以自动地预留附加空间。锁定管理器445可用于结合为分配请求分配空间来锁定分层分配数据结构的部分。在锁定分层数据结构的一个部分中,锁定管理器445可以允许分层数据结构的其他部分与锁定的部分同时地、独立地进行锁定(例如,对于其他分配请求)。在其中具有一个以上的分配器的实施例中,分配组件415中的一个或多个可以被复制,以便与分配器一起使用。虽然上述的环境包括各种数量的实体,但是将认识到可以采用这些实体和其他实体之中更多、更少的实体或不同的组合而不偏离在此描述的主题的各方面的精神或范围。此外,如本领域技术人员将明白的,这些实体可以采用各种方式来配置而不偏离在此描述的主题的各方面的精神或范围。图5-6是一般代表可以根据在此描述的主题的各方面而发生的动作的流程图。为了解释的简单起见,结合图5-6描述的方法作为一系列动作来描绘和描述。将明白和意识到在此描述的主题的各方面并不受所示的动作的限制和/或并不受动作的顺序的限制。在一个实施例中,这些动作按照如下所述的顺序发生。然而,在其他实施例中,这些动作可以并行发生、按照另一顺序发生和/或与在此没有呈现和描述的其他动作一起发生。此外,并不是所有示出的动作都是实现根据在此描述的主题的各方面的方法所需要的。此外,本领域技术人员将明白和意识到该方法能够或者经由状态图表示为一系列相关的状态或表示为事件。转到图5,在方框505,这些动作开始。在方框510,存储空间可以被格式化。例如,参考图4,存储管理器430可以格式化存储装置450。连同格式化存储空间,在存储空间上可以创建和存储分层数据结构(例如,诸如图2所示的分层数据结构)。在被首先创建时,分层数据结构可以具有代表存储空间中的空闲空间的最高级别中的一个或多个节点。其他级别可以具有零个节点,直至这些级别中的存储空间被分配。
在方框515,分配请求被接收。例如,参考图4,可以从分配请求器410接收分配请求。分配请求是分配利用文件系统管理的存储装置中的存储空间的请求。分配请求可以连同处于期望位置上的提示一起到来,其中将分配来自或靠近期望位置的存储空间。在方框520,如果合适的话,该分配所请求的大小可以被增大预留量。例如,参考图4,预留管理器440可以增大该分配所请求的大小,以确保附加空间被预留用于后续操作,如前所述。如果附加信息的预留不是所期望的,那么可以省略这个方框的动作。在方框525,分层数据结构被访问。例如,参考图2-3,数据结构205可以被访问。数据结构205可以包括图3的数据结构305中的多个。如前所述,分层数据结构包括与存储空间上的分配空间和未分配空间有关的数据。这个数据指示存储空间的多个区域。该数据进一步指示在分层数据结构的不同级别上的节点配对之间的关系。如前所述,两个直接相关的节点(例如,亲代和子代节点)指示用于在不同粒度级别上的存储空间中的一些的分配数据。在方框530,为该请求的分配空间确定分层数据结构的级别。例如,参考图2和4,分配器435可以确定使用级别216来满足针对多个兆字节的存储空间的请求。作为另一示例,如果分配请求器显式地请求某个级别,那么分配器435可以但并不要求使用那个级别。在方框535,搜索所确定的级别的一个或多个节点以查找空闲空间。例如,参考图2,可以搜索级别211的一个或多个节点,以查找合适的空闲空间。如果没有足够的空闲空间是可用的,那么可以从亲代节点分配附加空间。随后,包括从附加空间获得的空间在内的空间可以被分配,以满足分配请求。在方框540,空闲空间被分配给分配请求。例如,参考图2,来自节点217的空间可以被分配,以满足分配请求。在方框545,分配数据被更新,以指示空闲空间已被分配。例如,参考图3,位图或其他数据结构可以被更新,以指示空闲空间已被分配。在方框550,可以执行其他动作,如果有的话。转到图6,在方框605,这些动作开始。在方框610,接收格式化文件系统的存储空间的请求。例如,参考图4,文件系统可以接收格式化存储装置450的卷的请求。在方框615,响应于该请求,创建分层数据结构。该分层数据结构包括与存储空间有关的分配数据。如前所述,分层数据结构能够指示在不同粒度级别上的存储空间的区域的分配。分层数据结构包括与存储空间的区域相关联的一个或多个节点,其中每一个节点包括与存储空间的相关联区域有关的分配数据。节点的分配数据是独立于另一节点的分配数据而可锁定的。例如,参考图2,与分层数据结构205相类似的分层数据结构可以被创建。在初始创建分层数据结构时,由于在格式化之后存储空间可能没有分配的存储空间,所以它可能只有一个级别。如果在格式化期间创建根目录,那么在根目录消耗存储空间中的空间时,可以创建多个级别。在方框620,分层数据结构可以存储在存储空间上。例如,参考图4,在创建分层数据结构之后,分层数据结构可以存储在存储装置450上。在方框625,分层数据结构可以被更新。例如,与节点相关联的区域可以被标记用于文件系统的目录的独家使用。作为另一示例,在一个级别中的子代节点可以被创建,亲代节点的分配数据可以被修改以指示已将存储空间分配给子代节点,并且在子代节点中可以初始化分配数据以指示分配给子代节点的存储空间是经由子代节点可分配的。如前所述,这可能牵涉更新位图或其他适当的数据结构。作为另一示例,用于分层数据结构的每一个节点的标题信息可以被更新,以包括指示节点的区域在存储空间上的物理位置的值、指示区域的大小的值以及指示位图中代表该区域的分配数据的比特的数量的值。例如,标题信息也可以利用指示节点的区域的未分配空间数量的值以及指示节点的区域中最大邻近的未分配空间的值来更新。在方框630,可以执行其他动作,如果有的话。如从以上的详细描述中能够看出的,已描述了与存储空间分配有关的各方面。虽然在此描述的主题的各方面易受各种修改和替换构造的影响,但是其中的某些示出的实施例显示在附图中并且在上面具体进行描述了。然而,应该明白并没有将所请求保护的主题局限于所公开的具体形式的意图,而恰恰相反,意图旨在覆盖落入在此描述的主题的各个方面的精神和范围内的所有修改、替换构造以及等价物。
权利要求
1.一种至少部分利用计算机实现的方法,所述方法包括 接收分配利用文件系统管理的存储空间的请求; 响应于所述请求,访问包括与存储空间上的分配空间和未分配空间有关的数据的分层数据结构,所述数据指示存储空间的多个区域,所述数据进一步指示在分层数据结构的不同级别上的节点配对之间的关系,其中两个直接相关的节点指示在不同粒度级别上的存储空间中的一些的分配数据; 确定用于为所述请求分配空间的分层数据结构的级别; 使用所述级别的一个或多个节点来搜索分层数据结构,以查找空闲空间; 为所述请求分配空闲空间; 更新分层数据结构,以指示空闲空间已被分配。
2.权利要求I的方法,其中使用所述级别的一个或多个节点来搜索分层数据结构以查找空闲空间包括访问分层数据结构中的标题和位图,所述标题与一个或多个节点之中的一个节点相关联,所述标题包括一个或多个节点中的所述一个节点的分配单元的分配大小、指示与一个或多个节点中的所述一个节点相对应的存储空间的物理位置的值以及所述位图中比特的数量,所述位图指示与一个或多个节点中的所述一个节点相对应的存储空间的分配状态。
3.权利要求2的方法,其中访问标题包括访问所述标题中的附加数据,所述附加数据指示与一个或多个节点中的所述一个节点相关联的未分配空间的大小以及与一个或多个节点中的所述一个节点相关联的未分配空间的最大邻近大小。
4.权利要求I的方法,进一步包括接收指示在存储空间上用于分配空间的期望物理位置的提示,根据与期望物理位置的接近性来搜索分层数据结构以查找所述区域的空闲空间,以及提供与期望物理位置最靠近的空闲空间的指示。
5.权利要求I的方法,其中接收分配利用文件系统管理的存储空间的请求包括接收在目录内创建或扩展文件的请求,以及其中为所述请求分配空闲空间包括分配所述目录专用的一个或多个区域中的空闲空间。
6.权利要求I的方法,进一步包括预留附加空闲空间,用于与被分配用于所述请求的空闲空间有关的后续操作。
7.权利要求I的方法,其中为所述请求分配空闲空间包括在分层数据结构的一部分上获取锁定,同时允许在分层数据结构的其他部分上获取其他锁定。
8.一种计算机存储介质,其具有计算机可执行指令,所述计算机可执行指令在被运行时执行包括以下的动作 接收格式化文件系统的存储空间的请求; 响应于所述请求,创建包括与存储空间有关的分配数据的分层数据结构,所述分层数据结构能够指示在不同粒度级别上的存储空间的区域的分配,所述分层数据结构包括与存储空间的所述区域相关联的一个或多个节点,每一个节点包括与存储空间的相关联区域有关的分配数据,一个节点的分配数据是独立于另一节点的分配数据而可锁定的; 将分层数据结构存储在存储空间上。
9.权利要求8的计算机存储介质,进一步包括修改分层数据结构,以指示与节点相关联的区域仅用于文件系统的目录的独家使用。
10.权利要求8的计算机存储介质,进一步包括创建分层数据结构的子代节点,修改子代节点的亲代节点的分配数据来指示亲代节点的区域的一部分已被分配给子代节点,以及修改子代节点的分配数据来指示所述区域的所述部分是经由子代节点而可分配的。
11.权利要求8的计算机存储介质,进一步包括利用标题信息来更新一个或多个节点中的每一个节点,所述标题信息包括指示所述节点的区域在存储空间上的物理位置的值、指示所述区域的大小的值以及指示代表所述区域的分配数据的位图中的比特数量的值。
12.一种在计算环境中的系统,包括 存储管理器,可用于存储和提供针对存储设备的文件的访问; 空闲空间管理器,可用于搜索节点的分配数据,以找到存储设备上的空闲空间,以便为存储设备的存储空间的分配请求而分配,所述分配数据被安排在分层数据结构中,所述分层数据结构指示在分层数据结构的不同级别上的节点配对之间的关系,其中两个直接相关的节点指示在不同粒度级别上的存储空间中的一些的分配数据; 元数据管理器,可用于更新所述节点的分配数据,所述分配数据指示与所述节点相关联的存储设备的邻近区域,所述分配数据也指示是否所述区域的部分被分配; 分配器,可用于利用空闲空间管理器来为分配请求找到空闲空间,所述分配器进一步可用于利用元数据管理器来结合为分配请求分配空间而更新分配数据。
13.权利要求12的系统,进一步包括锁定管理器,其可用于结合为分配请求分配空间来锁定分层数据结构的第一部分,所述分层数据结构的至少第二部分是独立于第一部分而可锁定的。
14.权利要求12的系统,进一步包括预留管理器,其可用于为分配请求预留附加空间。
15.权利要求12的系统,其中元数据管理器进一步可用于更新分配数据,其中分配数据指示所述区域中的空闲空间的大小以及所述区域中的最大邻近空闲空间。
全文摘要
在此描述的主题的各方面涉及存储空间分配。在各方面,分层数据结构用于跟踪利用文件系统管理的存储空间的分配数据。分层数据结构可以具有多个级别,其中每个级别具有与不同的存储空间的粒度有关的数据。分层数据结构的各部分可以独立于分层数据结构的其他部分被锁定。分层数据结构可以指示存储空间的一个或多个部分用于目录的独家使用。在预期后续操作中可以在分配的空间中预留额外空间。分配请求器可以从与分层数据结构的不同级别相关联的区域中获得存储空间分配。
文档编号G06F12/02GK102934094SQ201180029558
公开日2013年2月13日 申请日期2011年6月3日 优先权日2010年6月16日
发明者T.J.米勒, J.M.卡吉尔, W.R.蒂普顿, S.费尔马 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1