用于使得能够修改文件系统卷内的多个数据对象的系统和方法与流程

文档序号:17123828发布日期:2019-03-16 00:06阅读:152来源:国知局
本申请要求享有于2016年4月1日提交的美国临时申请no.62/317,375的权益,该美国临时申请通过引用整体纳入。本公开内容涉及用于与文件系统一起使用的系统和方法,并且更具体地涉及用于修改文件系统卷内的多个数据对象的技术。
背景技术
::包括膝上型计算机或台式计算机、平板计算机、电视、数字视频录像机(dvr)、机顶盒、数字媒体播放器、视频游戏设备、视频游戏控制台、视频监视系统和蜂窝电话的设备可以利用文件系统来控制如何在计算机可读介质上存储数据和从计算机可读介质检索数据。例如,设备可以根据定义的文件系统卷从存储设备读数据和将数据写到存储设备,所述存储设备诸如是存储卡(例如,安全数字(sd)存储卡,包括标准容量(sdsc)格式、高容量(sdhc)格式和扩展容量(sdxc)格式)、硬盘驱动器和/或固态驱动器,固态驱动器包括通用串行总线(usb)固态驱动器(所谓的“闪存(flash)”驱动器、“拇指(thumb)”驱动器或“跳跃(jump)”驱动器)。文件系统的类型包括,例如,基于扩展文件系统(ext)的文件系统、基于分层文件系统(hfs)的文件系统、基于xfs文件系统的文件系统、基于z文件系统(zfs)的文件系统、基于新技术文件系统(ntfs)的文件系统以及基于文件分配表(fat)文件系统的文件系统,包括fat12文件系统、fat16文件系统、fat32文件系统、exfat文件系统和事务性exfat文件系统。相应的数据对象(例如,文件)可以存储在卷内的存储设备中。多个应用可以指示修改存储在卷内的相应的数据对象。当前用于修改存储在卷内的相应的数据对象的技术可能不太理想。技术实现要素:通常,本公开内容描述了用于修改文件系统卷内的多个数据对象的技术。特别地,本公开内容描述了用于使得能够以并行方式修改文件系统内的多个数据对象的技术。本文描述的技术可以被用来以并行方式将一个文件系统卷内的分配单元分配到多个文件。本文描述的技术对于要求将多个相对大的文件同时存储到存储设备(例如,记录多个视频流)的用户应用特别有用。应注意,文档通过引用纳入本文是出于描述的目的,并且不应该被理解为对于本文使用的术语的限制和/或造成歧义。例如,在一个纳入的参考文献提供的一个术语的定义不同于另一个纳入的参考文献提供的该术语的定义和/或不同于如该术语在本文中使用的定义的情况下,应以广泛地包括每个相应的定义的方式和/或以替代地包括每个特定定义的方式解释该术语。根据本公开内容的一个实施例,一种用于为数据对象的存储分配簇的方法包括:接收对应于将簇分配到该数据对象的指令,将指派到该数据对象的一个分配映射结构的一个窗口锁定,将簇分配到该数据对象,以及将指派到该数据对象的该窗口解锁。根据本公开内容的另一个实施例,一种用于为数据对象的存储分配簇的设备包括一个或多个处理器,所述一个或多个处理器被配置为接收对应于将簇分配到该数据对象的指令,将指派到该数据对象的一个分配映射结构的一个窗口锁定,将簇分配到该数据对象,以及将指派到该数据对象的该窗口解锁。根据本公开内容的另一个实施例,一种非暂时性计算机可读存储介质包括存储在其上的指令,所述指令在执行时导致设备的一个或多个处理器接收对应于将簇分配到该数据对象的指令,将指派到该数据对象的一个分配映射结构的一个窗口锁定,将簇分配到该数据对象,以及将指派到该数据对象的该窗口解锁。根据本公开内容的另一个实施例,一种用于为数据对象的存储分配簇的仪器包括用于接收对应于将簇分配到该数据对象的指令的装置,用于将指派到该数据对象的一个分配映射结构的一个窗口锁定的装置,用于将簇分配到该数据对象的装置,以及用于将指派到该数据对象的该窗口解锁的装置。在附图和以下描述中阐述了一个或多个实施例的细节。其他特征、目的和优点将从该描述和附图以及权利要求变得明显。附图说明图1是例示了可以实施本公开内容的一个或多个技术的计算设备的一个实施例的方框图。图2是例示了可以实施本公开内容的一个或多个技术的计算设备的操作系统的一个实施例的方框图。图3是例示了根据示例文件系统定义的卷的一个实施例的概念图。图4是例示了指示存储到待被修改的卷的相应的数据对象的多个应用的一个实施例的概念图。图5a-图5b是例示了导致以串行方式执行相应的分配操作的一个实施例的概念图。图6是例示了根据本公开内容的一个或多个技术在逻辑上组织分配映射结构的一个实施例的概念图。图7是例示了根据本公开内容的一个或多个技术导致执行相应的分配操作的一个实施例的概念图。图8是例示了根据本公开内容的一个或多个技术导致执行相应的分配操作的一个实施例的流程图。具体实施方式可以根据定义的文件系统在存储设备上安排、组织和/或管理用户数据。例如,微软可扩展固件倡议fat32文件系统规范(microsoftextensiblefirmwareinitiativefat32filesystemspecification)(版本1.03,2000年12月6日)——其全部内容通过引用纳入——定义了fat32文件系统的各方面,并且微软exfat修订版1.00文件系统基本规范(microsoftexfatrevision1.00filesystembasicspecification)(第四版,2009年1月1日)——其被描述在美国专利号8,321,439的附录a中并且其全部内容通过引用纳入——定义了exfat文件系统的各方面。此外,文件系统可以包括其他专有文件系统。文件系统可以指定卷的结构和要求,其中卷是为存储和检索用户数据所必需的数据空间定义的一组逻辑结构。如下文参考图3详细描述的,卷可以包括引导记录、文件分配表、分配位映射和用户数据。用户数据可以包括目录和文件和/或类似的数据结构。目录、文件和/或类似的数据结构中的每个通常可以被称为数据对象或数据项。在基于unix的文件系统中,术语索引节点(inode)可用来指代文件或目录数据对象。如本文所使用的,术语索引节点可以更通常指代与用户数据相关联的数据对象。用户数据可以被物理地存储到存储设备的一个或多个扇区。文件系统可以根据多个扇区定义一个簇(或分配单元),其中簇是存储器的可以分配到数据对象的最小逻辑单元。因此,一个或多个簇被分配到存储在存储设备上的每个数据对象。文件系统内的文件分配表、分配位映射和/或类似逻辑结构提供数据对象到一个或多个分配的簇的映射,并且这样可以被称为分配映射结构。如下文进一步详细描述的,文件系统驱动可以允许应用和/或与应用相关联的进程使得数据对象在存储设备上被修改。例如,修改数据对象可以包括创建文件、添加附加数据到文件、从文件移除数据或删除文件。修改数据对象可以包括将附加簇分配到数据对象或将簇从数据对象解除分配。此外,当簇到数据对象的分配改变时,文件系统内的文件分配表、分配位映射和类似的逻辑结构被更新。例如,当用户向文档添加内容时,使用文字处理应用生成的文档文件的大小可以增加(即,包括更多数据并且在存储设备上要求附加的空间)。文档文件的大小可以以这样的方式增加,即需要将附加簇分配到文档文件。在此情况下,文字处理应用可以向文件系统驱动发出一个或多个指令(例如,写文件命令),并且文件系统驱动可以导致卷发生改变以适应文件大小的增加。例如,文件系统驱动可以在必要时将附加簇分配到文件、将数据写到新分配的簇、更新文件分配表和/或更新分配位映射。在一些情况下,多个应用可以同时访问存储到一个卷的相应的数据对象。例如,一个卷可以存储对应于一个文字处理文档文件的数据对象,并且可以存储对应于一个数字图像文件的数据对象。在此情况下,文字处理应用可以向驱动发出指令以修改与该文字处理文档对应的文件,并且数字图像编辑应用可以向驱动发出指令以修改与该数字图像对应的文件。在为数据对象分配簇或解除分配簇的情况下,通常,文件系统驱动将在分配或解除分配期间锁定分配映射结构。通常,当为特定的分配锁定分配映射结构时,在分配映射结构被解锁之前不能够发生其他分配或解除分配。例如,在文件系统包括文件分配表的情况下,在从第一应用接收到要求为第一数据对象分配或解除分配簇的指令时,文件系统驱动通常将锁定文件分配表,执行与来自第一应用的指令相关联的操作(例如,分配附加簇,将数据写到新分配的簇,以及更新文件分配表),并且在完成操作时将文件分配表解锁。在此情况下,如果第二应用发出要求以并发方式为第二数据对象分配簇或解除分配簇的指令(例如,在与由第一应用发出的指令相关联的操作被完成和/或文件分配表被解锁之前),与由第二应用发出的指令对应的操作被延迟,直到文件分配表被解锁。也就是说,常规文件系统驱动以串行方式执行分配。以串行方式执行分配可能不太理想,特别是在频繁要求分配的情况下。例如,dvr设备可以同时记录多个电视节目,并且可能要求为与一个记录的电视节目对应的每个数字视频文件频繁分配。本文描述的技术可以使得能够以并行方式执行与同时发布的指令相关联的相应的修改。图1是例示了可以实施本公开内容的一个或多个技术的计算设备的一个实施例的方框图。计算设备100可以包括一个或多个处理器和多个内部和/或外部存储设备。存储设备的实施例包括文件服务器、ftp服务器、网络附接存储(nas)设备、本地磁盘驱动器、可移动存储器设备(诸如例如,存储卡和usb存储器设备)或能够存储数据的任何其他类型的设备或存储介质。存储介质可以包括光学存储介质(例如,dvd、cd-rom等)、磁存储介质、闪存或任何其他合适的数字存储介质。当部分地以软件实施本文描述的技术时,设备可以将用于软件的指令存储在合适的非暂时性计算机可读介质中,并且使用一个或多个处理器在硬件中执行所述指令。计算设备100是被配置为在计算机可读介质上存储数据或从计算机可读介质检索数据的计算设备的一个实施例。数据可以包括例如应用文件、文档文件、媒体文件(音频文件和/或视频文件)等。计算设备100可以被配备用于有线通信和/或无线通信,并且可以包括设备,诸如例如,台式计算机或膝上型计算机、移动设备、智能手机、蜂窝电话、平板设备、机顶盒、dvr、监视系统、个人游戏设备和汽车信息娱乐系统。如图1中例示的,计算设备100包括中央处理器单元102、系统存储器104、系统接口110、存储设备112、i/o设备114以及网络接口116。如图1中例示的,系统存储器104包括应用(app)106和操作系统108。应注意,尽管示例计算设备100被例示为具有不同的功能块,但是这样的例示是出于描述性目的并且不将计算设备100限制到特定的硬件架构或软件架构。可以使用硬件实施方式、固件实施方式和/或软件实施方式的任何组合来实现计算设备100的功能。中央处理单元102可以被配置为实施用于在计算设备100中执行的功能和/或过程指令。中央处理单元102可以能够检索和处理用于实施本文描述的一个或多个技术的指令、代码和/或数据结构。指令可以存储在计算机可读介质(诸如,系统存储器104或存储设备112)上。中央处理单元102可以包括数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程逻辑阵列(fpga)、或其他等同的集成逻辑电路或分立逻辑电路。中央处理单元102可以包括一个或多个多核中央处理单元。中央处理单元102可以根据页面大小操作,其中页面包括一个固定长度的连续的虚拟存储器块。用于中央处理单元架构的常见页面大小是4096字节(即,4千字节(kib))。其他示例页面大小可以包括8kib、16kib、32kib、64kib等。系统存储器104可以被配置为存储可以在操作期间由计算设备100使用的信息。系统存储器104可以被描述为非暂时性或有形计算机可读存储介质。在一些实施例中,系统存储器104可以提供临时存储器和/或长期存储。在一些实施例中,系统存储器104或其部分可以被描述为非易失性存储器,并且在其他实施例中,系统存储器的部分可以被描述为易失性存储器。易失性存储器的实施例包括随机访问存储器(ram)、动态随机访问存储器(dram)和静态随机访问存储器(sram)。非易失性存储器的实施例包括磁性硬盘、光盘、软盘、闪存、或电可编程存储器(eprom)或电可擦除和可编程存储器(eeprom)的形式。在一个实施例中,系统存储器104可以包括内部硬盘驱动器和/或内部闪存。系统接口110可以被配置为使得计算设备100的部件之间能够通信。在一个实施例中,系统接口110包括使得能够将数据从一个对等设备传送到另一个对等设备或传送到存储介质的结构。例如,系统接口110可以包括支持外围部件互连(pci)总线协议、高速外围部件互连(pcie)总线协议、专有总线协议或可以用来互连对等设备的任何其他形式的结构的芯片组(chipset)。存储设备112表示计算设备100的存储器,该存储器可以被配置为在与系统存储器104不同的时间周期内存储不同量的信息。类似于系统存储器104,存储设备112还可以包括一个或多个非暂时性或有形计算机可读存储介质。存储设备112可以是内部存储器或外部存储器,并且在一些实施例中可以包括非易失性存储元件。存储设备可以包括存储卡(例如,安全数字(sd)存储卡,包括标准容量(sdsc)格式、高容量(sdhc)格式和扩展容量(sdxc)格式)、外部硬盘驱动器和/或外部固态驱动器。存储在存储设备112上的数据可以根据定义的文件系统(诸如,例如fat12文件系统、fat16文件系统、fat32文件系统、exfat文件系统、事务性exfat文件系统、ntfs文件系统和/或专有文件系统)存储。i/o设备114可以被配置为接收输入并且为计算设备100提供输出。输入可以由输入设备生成,所述输入设备是诸如例如触敏屏、触控板(trackpad)、触控点(trackpoint)、鼠标、键盘、麦克风、一个或多个摄像机或被配置为接收输入的任何其他类型的设备。输出可以被提供到输出设备,诸如例如,扬声器或显示设备。在一些实施例中,i/o设备114可以在计算设备100外部,并且可以使用标准化通信协议(诸如例如,通用串行总线协议(usb))操作性地耦合到计算设备100。网络接口116可以被配置为使得计算设备100能够经由一个或多个网络与外部计算设备通信。网络接口116可以是网络接口卡(诸如以太网卡)、光学收发器、射频收发器或可以发送和接收信息的任何其他类型的设备。网络接口116可以被配置为根据一个或多个通信协议操作,所述一个或多个通信协议是诸如例如全球系统移动通信(gsm)标准、码分多址(cdma)标准、第三代合作伙伴计划(3gpp)标准、互联网协议(ip)标准、无线应用协议(wap)标准和/或ieee标准(诸如,802.11标准中的一个或多个)以及其多种组合。如图1中例示的,系统存储器104包括应用106和操作系统108。应用106可以包括在计算设备100内实施或由计算设备100执行的任何应用,并且可以被实施或被包含在计算设备100的部件内,可由计算设备100的部件操作,由计算设备100的部件执行,和/或操作性地/通信地耦合到计算设备100的部件。应用106可以包括可以导致计算设备100的中央处理单元102执行特定功能的指令。应用106可以导致中央处理单元102将数据写到计算机可读介质或从计算机可读介质读数据,所述计算机可读介质诸如例如是系统存储器104和/或存储设备112。应用106可以包括以计算机编程语句(诸如,for循环、while循环、if语句、do循环等)表达的算法。如图1中进一步例示的,应用106可以在操作系统108之上执行。操作系统108可以被配置为便于应用106与中央处理单元102以及计算设备100的其他硬件部件交互。操作系统108可以是被设计用于安装在膝上型计算机和台式计算机上的操作系统。例如,操作系统108可以是操作系统、linux或macos。操作系统108可以是被设计为安装在智能手机、平板设备、机顶盒和/或游戏设备上的操作系统。例如,操作系统108可以是linux、macos、android、ios、windows或windows操作系统。应注意,尽管可能根据特定示例操作系统描述技术,但是本文描述的技术不限于特定操作系统。图2是例示了可以实施本公开内容的一个或多个技术的计算设备的操作系统的一个实施例的方框图。如图2中例示的,操作系统108包括内核202。在一个实施例中,内核202可以是基于linux内核的内核。在其他实施例中,内核202可以是操作系统的组成部分或指令的子集。如图2中例示的,内核包括设备驱动204和文件系统驱动206。设备驱动204可以被配置为作为操作系统108和硬件设备(诸如例如,系统接口110)之间的接口操作。文件系统驱动206可以被配置为在应用106和/或操作系统108与存储设备(诸如例如,系统存储器104和/或存储设备112)之间提供抽象层。例如,文件系统驱动206可以允许应用修改存储设备112上的数据对象,而不要求该应用执行文件管理的方面。修改数据对象可以包括卷内的任何类型的数据改变,从创建、修改、重命名或删除文件到创建、修改、重命名、移动或删除目录。如下文详细描述的,修改数据对象可以包括修改引导记录、修改目录条目、修改文件分配表、修改分配位映射、分配簇和/或解除分配簇。在一个实施例中,文件系统驱动206可以被配置为允许根据基于文件分配表(fat)文件系统的文件系统将数据存储到系统存储器104和/或存储设备112,所述文件分配表(fat)文件系统包括fat12文件系统、fat16文件系统、fat32文件系统、exfat文件系统、事务性exfat文件系统、ntfs文件系统和/或专有文件系统。应注意,在一些实施例中,文件系统驱动206可以被实施为实施多个文件系统(例如,fat文件系统和exfat文件系统二者)的一个二进制驱动。在其他实施例中,文件系统驱动206可以包括用于相应的文件系统的单独的二进制驱动。图3是例示了根据示例文件系统定义的卷的一个实施例的概念图。在一个实施例中,可以根据exfat文件系统来定义卷300。应注意,尽管在一些实施例中参考exfat文件系统描述了卷300,但是本文描述的技术不限于exfat文件系统并且可以与其他文件系统一起使用,所述其他文件系统包括例如fat12文件系统、fat16文件系统、fat32文件系统和专有文件系统。此外,应注意,示例卷300表示卷的例示性实施例,并且为了简洁起见,不意在作为根据一个文件系统定义的卷的穷尽描述。可以在对应的文件系统规范中找到卷的附加细节。例如,在根据基于exfat文件系统的文件系统定义卷300的情况下,可以在微软exfat修订版1.00文件系统基础规范(microsoftexfatrevision1.00filesystembasicspecification)(第四版,2009年1月1日)中找到卷300的附加细节。在根据基于fat12文件系统、fat16文件系统和fat32文件系统中的一个或多个的文件系统定义卷300的情况下,可以在微软可扩展固件倡议fat32文件系统规范(版本1.03,2000年12月6日)(microsoftextensiblefirmwareinitiativefat32filesystemspecification)中找到卷的附加细节。在图3中例示的实施例中,卷300包括引导记录302、文件分配表304和数据区域306。引导记录302、文件分配表304和数据区域306中的每个可以是根据扇区值在存储设备(诸如例如,存储设备112)上可寻址的。引导记录302包括描述文件系统参数的数据条目。在一个实施例中,引导记录302包括用于自举卷的数据、卷的基本文件系统参数以及多种错误检查信息。引导记录302可以包括一个或多个引导记录。在一个实施例中,引导记录302包括主引导记录和备份引导记录,其中备份引导记录是主引导记录的副本。如图3中例示的,引导记录302中包括的信息的实施例包括卷长度、文件分配表长度、簇计数、根目录的第一个簇、每扇区的字节和每簇的扇区。在一个实施例中,卷长度以扇区指定卷300的大小。在一个实施例中,文件分配表长度以扇区指定文件分配表304的大小。在一个实施例中,簇计数指定数据区域306中包括的簇的数目。应注意,尽管未在图3中例示,但是引导记录302还可以包括指示分配的簇的百分比的信息和允许卷300被自举的信息。如下面详细描述的,可以在修改文件和目录时更新引导记录302。在一个实施例中,根目录的第一个簇指定根目录在数据区域306中的扇区位置。在一个实施例中,每扇区的字节指定一个扇区中包括的字节的数目。在一个实施例中,每扇区的字节的数目可以以2的幂记数法表达,并且可以在每扇区512字节的最小值到每扇区4096字节的最大值的范围内。在一个实施例中,每簇的扇区指定每簇的扇区的数目。在一个实施例中,每簇的扇区的最小数目可以是1,并且每簇的扇区的最大数目可以提供32kib的最大簇大小。应注意,在一些实施例中,簇的大小可取决于卷大小。例如,对于最大卷的符合标准的fat卷,定义为大于32千兆字节(gib)(其中1gib为1,0243字节)的卷,簇大小将是fat的最大簇大小,其是32kib(例如,64个512字节的扇区或8个4096字节的扇区)。符合标准的32gibfat卷将使用大小为16kib的簇。符合标准的16gibfat卷将使用8kib簇。符合标准的8gibfat卷将使用4kib簇。文件分配表304可以包括一个或多个文件分配表。在一个实施例中,文件分配表304包括单个文件分配表304。在另一个实施例中,文件分配表304包括两个或更多个文件分配表。文件分配表304可以被用来描述被分配到数据区域306中的数据对象(诸如文件)的簇的序列(也称为簇的链)。如图3中例示的,一个文件分配表可以包括一个条目和一个与该条目对应的值。在图3中例示的实施例中,条目00包括指示媒体类型的值,并且条目01包括占位符值。条目02到簇计数+1可以提供描述分配到数据对象的簇的序列的信息。在一个实施例中,条目可以包括指示簇的序列中的一个后续簇条目的值,指示“坏”簇的值,指示簇未被使用的值,或指示簇的序列结束(eof)的值。在图3中例示的实施例中,根文件目录在簇02处开始。如图3中例示的,条目02包括指示根目录未被指派任何附加簇的eof标记。此外,在图3中例示的实施例中,文件在簇03处开始。如图3中例示的,条目03包括04的地址,指示文件的序列中的下一个簇是簇04。条目04包括指示文件未被指派任何附加簇的eof标记。以此方式,文件分配表可以被用来识别分配到数据对象的簇的序列。应注意,尽管在图3中例示的实施例中,分配到数据对象的簇是连贯的,但是在其他实施例中,分配到数据对象的簇可以包括不连贯的簇(例如,指向条目07的条目03等)。数据区域306可以是卷300的存储构成数据对象的数据的区域。例如,数据区域306可以包括表示一种或多种类型的文件的数据对象。例如,数据区域306可以包括文字处理文档(诸如例如,microsoftword文档)、媒体文件(诸如例如,jpeg文件、视频文件)和/或其他类型的文件。在一些实施例中,数据区域306可以被称为簇堆。如上文描述的,关于数据区域306的配置的信息可以被包括在引导记录302(例如,簇计数和分配的簇的百分比)中。应注意,在大多数情况下,通常在安装事件时更新引导记录302。如上文进一步描述的,对存储在数据区域306中的数据对象的修改可能要求更新文件分配表304。如图3中例示的,数据区域包括目录、分配位映射、大写字母表(up-casetable)和文件数据。目录可以包括描述指示文件和目录之间的关系的树结构的一系列条目。例如,目录可以指示特定文件存储在父目录的子目录中。在图3中例示的实施例中,目录包括根目录和“我的项目”子目录,并且文字处理文档文件(“report.doc”)和图片文件(“pic.jpg”)被存储在“我的项目”目录中。在图3中例示的实施例中,当卷包括分配位映射时,根目录可以包括关于卷和数据区域的一般信息,例如,分配位映射的位置。应注意,目录条目可以包括根据文件系统定义的一个或多个不同类型的记录(例如,目录条目记录、流扩展记录、文件名扩展记录等)。一个或多个记录可以将一个数据对象映射到一个数据区域。例如,一个记录中的第一个簇字段可以提供一个文件到一个或多个数据簇的最初映射。当修改存储到一个卷的数据对象时,可以更新记录。为简洁起见,本文未提供对记录类型的完整讨论。再次参考图3,分配位映射可以维持数据区域304中的簇的分配状态,并且可以被用来确定卷中哪些簇当前可用于写,即,当前未被分配。如图3的实施例中例示的,分配位映射包括对应于数据区域306的每个簇的条目,其中二进制值“1”指示一个特定的簇被分配,并且二进制值“0”指示一个簇被解除分配。应注意,但是一些文件系统(诸如例如,fat12、fat16和fat32)可以不包括分配位映射。本文描述的技术可以供包括或不包括分配位映射的文件系统使用。再次参考图3,在exfat的实施例中,大写字母表可以包含用于将小写字符转换为大写字符的数据。例如,大写字母表可以包含统一码(unicode)字符阵列。在exfat的实施例中,文件名可以以不区分大小写的方式存储,并且文件名可以在搜索操作期间被转换为大写。应注意,在fat12、fat16和fat32的实施例中,数据区域306不包括大写字母表。文件数据可以包括表示文件(诸如例如,图3的实施例中的report.doc和pic.jpg)的数据。如上文描述的,操作系统108和/或文件系统驱动206可以被配置为基于由一个或多个应用接收的指令根据卷来将数据存储到存储设备。在一个实施例中,操作系统108和/或文件系统驱动206可以被配置为分配簇和解除分配簇。应注意,当数据对象的修改涉及不止一个扇区时,这样的修改可以被称为非原子的(例如,单个扇区写被认为是原子的)。如上文描述的,在一些情况下,多个应用可以以并发方式将要求为数据对象分配或解除分配簇的指令发出到文件系统驱动。此外,应注意,在一些情况下,单个应用可以以并发方式将要求为数据对象分配或解除分配簇的指令发出到文件系统驱动(例如,同时记录多个电视节目的dvr应用)。图4是例示了发出与存储到一个卷的相应的数据对象对应的指令的多个应用的一个实施例的概念图。在图4中例示的实施例中,数据对象、file_a、file_b、file_c和file_d被存储在卷300上,并且应用106a、应用106b、应用106c和应用106d中的每个将与file_a、file_b、file_c和file_d相关联的相应的写命令(即,writefile__a、writefile__b、writefile__c和writefile_d)发出到文件系统驱动206。如上文描述的,典型的文件系统驱动将锁定用于与一个指令相关联的分配操作的分配映射结构(即,图4中的fat和分配位映射),从而导致并发分配操作,并且潜在地,导致以串行方式执行指令。图5a-图5b是例示了导致以串行方式执行相应的分配操作的一个实施例的概念图。如上文描述的,一个文件分配表描述分配到一个数据对象的簇的一个链。参考图5a-图5b,参考文件分配表条目的修改例示了导致簇被分配到存储到一个卷的相应的数据对象。然而,应注意,如上文描述的,对要求分配或解除分配簇的数据对象的修改可以包括对卷的逻辑结构的附加修改(例如,更新记录、更新文件数据和/或更新分配位映射)。参考图5a-图5b,该实施例例示了在最初分配状态(即,文件file_a、file_b、file_c和file_d被存储到卷)下的文件分配表以及在后续中间状态下的文件分配表,所述后续中间状态对应于文件系统驱动执行与以串行方式执行的writefile_a命令、writefile_b命令、writefile_c命令和writefile_d命令相关联的相应操作。在图5a-图5b中例示的实施例中,writefile_a、writefile_b、writefile_c和writefile_d中的每个要求将附加簇分配到相应的文件file_a、file_b、file_c和file_d。此外,在图5a-图5b中例示的实施例中,当正将簇分配到一个特定的文件时,文件分配表被锁定。也就是说,在图5a-图5b中例示的实施例中:第一分配操作包括锁定文件分配表,将两个附加簇分配到file_a,并且在完成将附加簇分配到file_a时,将文件分配表解锁;第二分配操作包括锁定文件分配表,将两个附加簇分配到file_b,并且在完成将附加簇分配到file_b时,将文件分配表解锁;第三分配操作包括锁定文件分配表,将两个附加簇分配到file_c,并且在完成将附加簇分配到file_c时,将文件分配表解锁;以及第四分配操作包括锁定文件分配表,将两个附加簇分配到file_d,并且在完成将附加簇分配到file_d时,将文件分配表解锁,其中每个分配操作必须等到将文件分配表解锁才开始。应注意,在图5a-图5b中例示的实施例中,下一个可用的空闲簇被用于分配,并且结果如图5b中例示的,使file_a、file_b、file_c和file_d中的每个交错和分段。在一个实施例中,根据本文描述的技术,文件系统驱动206可以被配置为以并行方式执行分配操作。也就是说,文件系统驱动206可以被配置为基于在逻辑上划分为一个或多个窗口的分配映射结构来执行分配操作。图6是例示了根据本公开内容的一个或多个技术在逻辑上组织分配映射结构的一个实施例的概念图。在图6中例示的实施例中,文件分配表包括偏移区域和划分为多个窗口的区域。偏移区域可以对应于包括自举数据等的簇。每个窗口可以对应于多个簇。应注意,在一些实施例中,偏移区域可以包括与窗口相同数目的簇。在一个实施例中,一个窗口可以包括32768个簇。如上文描述的,对于符合标准的fat卷,簇大小取决于卷大小。在此情况下,一个窗口包括32768个簇,一个具有32kib簇大小的64gib卷将包括64个窗口,一个具有16kib簇大小的32gibfat卷也将包括64个窗口,一个具有8kib簇大小的16gibfat卷也将包括64个窗口,并且一个具有4kib簇大小的8gibfat卷也将具有64个窗口。如上文描述的,用于中央处理单元102的页面大小可以是4096字节。在一个窗口包括32768个簇的情况下,一个窗口中的簇的数目等于一个页面大小中的位的数目(即,4096*8=32768)。应注意,对于典型使用情况,在一个给定的时间间隔期间要求分配附加簇的数据对象的数目通常小于64。例如,在dvr、安全摄像机记录应用等的情况下,被同时记录的视频流的数目通常小于64。应注意,在一些实施例中,一个分配映射结构可以被划分为更小的窗口大小或更大的窗口大小,包括取决于应用的可变窗口大小。也就是说,一个窗口中包括的簇的数目可以动态地减少,以使得可以增加窗口的数目。在一个实施例中,为了使得能够同时写多个小文件(例如,通常不超过几个mib的.mp3文件),可以在分配映射结构的前面(例如,前半部)放置较小的窗口,并且剩余的分配映射结构可以包括每窗口大小32768个簇,以同时写更大的文件(例如,几个gib)。例如,多媒体记录设备可以同时记录几个相对较小的音频流和较少的相对较大的视频流。如上文描述的,文件系统驱动206可以被配置为基于在逻辑上划分为一个或多个窗口的分配映射结构来执行分配操作。图7是例示了根据本公开内容的一个或多个技术的导致执行相应的分配操作的一个实施例的概念图。图7例示了file_a、file_b、file_c和file_d中的每个最初被分配到一个文件分配表的一个实施例,其中该文件分配表被划分为一个或多个窗口。图7还例示了在最初分配之后为file_a、file_b、file_c和file_d中的每个分配附加簇的情况。在图7中例示的实施例中,在最初分配之后,将两个附加簇分配到每个file_a、file_b、file_c和file_d。也就是说,图7中的实施例可以基于并发writefile_a、writefile_b指令、writefile_c指令和writefile__d指令,如上文参考图4以及图5a-图5b描述的。参考图7,该文件分配表包括四个窗口,并且file_a、file_b、file_c和file_d中的每个最初分别被分配到窗口1、窗口2、窗口3和窗口4。也就是说,当file_a、file_b、file_c和file_d中的每个最初被存储到一个卷(例如,文件被打开或被复制到存储设备)时,每个被指派一个唯一的窗口。在一个实施例中,为了保护描述窗口的信息(其可以称为窗口元数据),当一个窗口被指派到一个数据对象时,可以对窗口元数据应用锁定。将窗口元数据锁定可以被称为应用全局锁定。在一个实施例中,全局锁定可以包括自旋锁。在一个实施例中,全局锁定可以包括互斥对象(互斥元)。在一些实施例中,窗口元数据可以存储关于以下中的一个或多个的信息:一个窗口在簇堆中何处开始和/或结束、一个窗口中有多少空闲簇、一个窗口最后被修剪的时间和/或一个窗口的用户数目。在一个实施例中,关于一个窗口中有多少空闲簇的信息可以包括一个空闲计数值,其中一个空闲计数值指示一个窗口中的空闲簇的数目。如果针对一个窗口的空闲计数值等于零,则文件系统驱动206可以确定该窗口是满的(即,不具有可用于分配的簇)。在一个实施例中,关于一个窗口中有多少空闲簇的信息可以包括一个在使用的计数值,其中在使用的计数值指示一个窗口的被分配的簇的数目。在一个实施例中,窗口元数据可以包括允许可选的描述信息被选择性呈现的标记结构,诸如,一个窗口是否包括可用的良好对齐的簇区域(例如,一个窗口是否包括可用于分配的至少10个顺序簇的序列等)。此外,在一个实施例中,良好对齐的簇区域可以指在一个对齐边界(其可以取决于存储介质类型)开始并且大小等于两个对齐边界之间的空间的顺序簇的序列。因此,例如,在闪存上,闪存擦除块大小可以被用作边界,并且每个顺序块的大小可以是一个擦除块。此外,窗口元数据还可以包括一个窗口字段的用户数目。用户数目字段可以指示当前指派到一个窗口的数据对象的数目。此外,在一些实施例中,用户数目字段可以指示指派到一个窗口的活动数据对象的数目。例如,如果一个文件是在前一周创建的并且自创建以来未被修改过,则它可以被视为是不活动的。在一些实施例中,当文件驱动206将一个窗口指派到一个数据对象时,文件驱动206可以基于指派到一个窗口的数据对象的数目和/或一个窗口中可用的空间的量或类型(良好对齐的簇)来选择将要指派的窗口。窗口元数据基于指派进行更新。图7例示了file_a、file_b、file_c和file_d中的每个被指派一个窗口并且簇最初被分配到file_a、file_b、file_c和file_d的情况。也就是说,在图7中例示的实施例中,最初的分配操作包括将窗口元数据锁定,将一个窗口指派到一个文件,在完成指派时将窗口元数据解锁,将指派的窗口锁定,以及最初将指派的窗口内的簇分配到所述文件。应注意,全局锁定和窗口锁定是独立的。也就是说,例如参考图7,可以应用全局锁定以将窗口2指派到file_b,同时窗口1内的簇被最初分配到file_a。再次参考图7,在图7中例示的实施例中,在为file_a、file_b、file_c和file_d中的每个最初分配之后接收writefile_a指令、writefile_b指令、writefile_c指令和writefile_d指令。在一个实施例中,文件系统驱动206可以在特定持续时间期间接收writefile_a指令、writefile_b指令、writefile_c指令和writefile_d指令中的每个,使得可以以同时方式执行与所述指令相关联的操作。在图7中例示的实施例中,分配操作包括将指派到一个文件的一个窗口锁定,将该窗口内的两个附加簇分配到该文件,以及在完成将附加簇分配到该文件时将该窗口解锁。如图7中例示的,因为每个窗口被唯一地指派到一个文件,所以可以以并行方式执行分配操作。也就是说,例如,窗口内的簇的分配是独立的。以并行方式执行分配可以使得能够以比串行分配更有效率的方式将数据对象写到存储设备(例如,可以在更短的时间周期内执行文件写操作)。此外,如参考图7例示的,将窗口唯一地指派到文件可以防止文件变得交错和/或分段,这可以提高计算设备100的性能。应注意,图7中的实施例例示了在将附加簇分配到file_a、file_b、file_c和file_d中的任何一个之前针对所有file_a、file_b、file_c和file_d发生的最初分配,当以随机方式接收对应于用于一个数据对象的最初分配的指令和要求将附加簇分配到一个数据对象的指令时,本文描述的技术可以是可适用的。图8是例示了根据本公开内容的一个或多个技术导致存储到一个卷的相应的数据对象被修改的一个实施例的流程图。应注意,尽管图8中的步骤被描述为通过文件系统驱动206执行,但是图8中例示的步骤可以通过计算设备100的硬件部件和软件部件的任何组合和所有组合来执行。文件系统驱动206接收要求为一个数据对象分配簇的指令(802)。如上文描述的,要求为一个数据对象分配簇的指令可以包括从一个应用接收的一个写指令。文件系统驱动206确定该数据对象是否被指派到一个窗口(804)。在一些情况下,一个指令可以指定一个数据对象是新数据对象还是现有数据对象。例如,可以从一个用于创建新文件的指令推断该文件当前未被指派一个窗口。此外,如上文描述的,一个或多个记录可以将一个数据对象映射到一个数据区域(例如,第一个簇字段)。可以使用一个或多个记录或其他类型的数据结构来确定一个数据对象是否被指派到一个窗口。此外,应注意,在一些实施例中,如果一个数据对象已经被创建但是当前未被高速缓存在存储器中,则它不具有一个指派的窗口。在此情况下,在预定时间量内不活动的数据对象被抛出高速缓存,从而不再具有一个指派的窗口。如果一个数据对象已经被创建并且被高速缓存在存储器中,则该数据对象的存储器内高速缓存(例如,存储器内索引节点结构)可以指向当前指派的窗口。在确定一个窗口未被指派到数据对象时,文件系统驱动206将窗口元数据锁定(806)。窗口元数据可以包括上文描述的窗口元数据的类型的任何组合和所有组合。此外,如上文描述的,将窗口元数据锁定可以被称为全局锁定,并且可以包括自旋锁或互斥元。文件系统驱动206评估一个或多个窗口(808)。例如,文件系统驱动206可以基于一个或多个元数据属性对一个或多个窗口进行排名。例如,文件系统驱动206可以为具有大量空闲簇和/或具有相对少量的用户(例如,指派到它的活动文件很少)的窗口设置相对高的排名。文件系统驱动206基于评估将一个窗口指派到数据对象(810)。在一个实施例中,文件系统驱动206可以将满足最小标准的第一评估窗口指派到数据对象。例如,如果一个窗口就窗口的用户数目和在使用的计数值而言具有零值,则文件系统驱动206可以为该窗口指派数据对象而不评估任何附加窗口。在一个实施例中,文件系统驱动206可以评估预定数目的窗口,并且可以将具有最高排名的窗口指派到数据对象。例如,在窗口就窗口的用户数目和在使用的计数值而言具有非零值的情况下,可以基于良好对齐的簇区域是否可用来对窗口进行排名。基于指派到数据对象的窗口,更新窗口数据(812)。应注意,更新窗口元数据可以包括更新用户数目值,更新指示空闲簇的数目的值等。应注意,更新指示空闲簇的数目的值本质上在窗口中保留用于为数据对象分配簇的空间。文件系统驱动206将窗口元数据解锁(814)。如上文描述的,将窗口元数据解锁可以使得后续能够将指派窗口到数据对象。此外,应注意,更新的窗口元数据可以用于评估用于后续指派的窗口。参考图8,文件系统驱动206将指派到对象的窗口锁定(816)。文件系统驱动206将窗口中的簇分配到数据对象(818)。在一个实施例中,将窗口中的簇分配到数据对象可以包括扫描一个分配位映射中的位以在指派的窗口内找到空闲簇并且将空闲簇分配到数据对象。文件系统驱动206将窗口解锁(820)。应注意,在一些实施例中,文件系统驱动206可以被配置为在分配完成之后的预定时间内将窗口解锁。以此方式,只要数据对象保持被写入/被分配,该窗口可以保持忙碌,然后当完成分配/写入时,可以使窗口在预定时间周期(例如,5秒)内空闲。如上文描述的,在812处更新窗口元数据本质上可以在窗口中保留用于为数据对象分配簇的空间。在一些情况下,可能期望或必需在发生分配之后更新窗口元数据。例如,一个数据对象可能要求比在指派一个窗口时最初分配的簇更多的簇。图8例示了基于发生的实际分配可选地锁定(822)、更新(824)和解锁(826)窗口元数据的情况。以此方式,计算设备100表示被配置为使得能够以存储设备的并行方式修改一个文件系统内的多个数据对象的设备的一个实施例。在一个或多个实施例中,可以用硬件、软件、固件或其任何组合来实施描述的功能。如果用软件来实施,则所述功能可以作为一个或多个指令或代码存储在计算机可读介质上或通过计算机可读介质传输,并且通过基于硬件的处理单元来执行。计算机可读介质可以包括计算机可读存储介质,其对应于有形介质(诸如数据存储介质),或包括便于例如根据通信协议将计算机程序从一个地方传送到另一个地方的任何介质的通信介质。以此方式,计算机可读介质通常可以对应于(1)非暂时性的有形计算机可读存储介质或(2)通信介质,诸如信号或载波。数据存储介质可以是可以由一个或多个计算机或一个或多个处理器访问以检索用于实施在本公开内容中描述的技术的指令、代码和/或数据结构的任何可用介质。计算机程序产品可以包括计算机可读介质。通过实施例而非限制的方式,这样的计算机可读存储介质可以包括ram、rom、eeprom、cd-rom或其他光盘存储器、磁盘存储器或其他磁性存储设备、闪存或可以用来以指令或数据结构的形式存储所需的程序代码并且可以由计算机访问的任何其他介质。此外,任何连接被适当地称为计算机可读介质。例如,如果使用同轴电缆、光缆、双绞线、数字用户线路(dsl)或无线技术(诸如红外线、无线电和微波)从网站、服务器或其他远程源传输指令,则同轴电缆、光缆、双绞线、dsl或无线技术(诸如,红外线、无线电和微波)被包含在介质的定义中。然而,应理解,计算机可读存储介质和数据存储介质不包括连接、载波、信号或其他暂态介质,而是指向非暂态、有形的存储介质。如本文使用的磁盘和光盘包括压缩光盘(cd)、激光光盘、光学光盘、数字通用光盘(dvd)、软盘和蓝光光盘,其中磁盘通常以磁性方式复制数据,而光盘用激光以光学方式复制数据。上述的组合也应被包括在计算机可读介质的范围内。指令可以由一个或多个处理器(诸如,一个或多个数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程逻辑阵列(fpga)或其他等同的集成逻辑电路或离散逻辑电路系统)执行。因此,如本文使用的术语“处理器”可以指任何前述结构或适合于实施本文描述的技术的任何其他结构。此外,在一些方面,可以在专用硬件模块和/或软件模块内提供本文描述的功能。此外,可以在一个或多个电路或逻辑元件中完全地实施所述技术。本公开内容的技术可以在多种设备或装置中实施,所述设备或装置包括无线手持机、集成电路(ic)或一组ic(例如,芯片组)。在本公开内容中描述了多种部件、模块或单元,以强调被配置为执行公开的技术的设备的各功能方面,但是不一定要求由不同的硬件单元实现。而是,如上文描述的,各种单元可以被组合在一个编解码器硬件单元中,或由互操作性硬件单元(包括如上文描述的一个或多个处理器)的集合连同合适的软件和/或固件来提供。已经描述了多个实施例。这些和其他实施例在以下权利要求的范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1