用于将数据回写到存储设备的系统和方法与流程

文档序号:17745050发布日期:2019-05-24 20:35阅读:296来源:国知局
用于将数据回写到存储设备的系统和方法与流程

本申请要求享有于2016年8月11日提交的美国临时申请no.62/373,650的权益,该美国临时申请通过引用整体纳入。

本公开内容涉及用于存储器管理的系统和方法,并且更具体地涉及用于将数据回写到存储设备的技术。



背景技术:

包括膝上型计算机或台式计算机、平板计算机、电视、数字视频录像机(dvr)、机顶盒、数字媒体播放器、视频游戏设备、视频游戏控制台、视频监视系统和蜂窝电话的设备可以利用文件系统来控制如何在计算机可读介质上存储数据和从计算机可读介质检索数据。例如,设备可以根据定义的文件系统卷从存储设备读数据和将数据写入到存储设备,所述存储设备诸如是存储卡(例如,安全数字(sd)存储卡,包括标准容量(sdsc)格式、高容量(sdhc)格式和扩展容量(sdxc)格式)、硬盘驱动器(hdd)和/或固态驱动器(ssd),固态驱动器包括通用串行总线(usb)固态驱动器(所谓的“闪存(flash)”驱动器、“拇指(thumb)”驱动器或“跳跃(jump)”驱动器)。文件系统的类型包括,例如,基于扩展文件系统(ext)的文件系统、基于分层文件系统(hfs)的文件系统、基于xfs文件系统的文件系统、基于z文件系统(zfs)的文件系统、基于新技术文件系统(ntfs)的文件系统、基于闪存文件系统(ffs)的文件系统以及基于文件分配表(fat)文件系统的文件系统,包括fat12文件系统、fat16文件系统、fat32文件系统、exfat文件系统和事务性exfat文件系统。相应的数据对象(例如,文件)可以存储在由文件系统定义的卷内的存储设备中。多个应用可以指示修改存储在卷内的相应的数据对象。

设备可以将设备存储器中的高速缓存实施为用于从存储设备读数据和将数据写入到存储设备的媒介。实施高速缓存可以提高系统性能,这是因为从设备存储器读数据和将将数据写入到设备存储器比从存储设备读数据和将将数据写入到存储设备快几个数量级。当数据被写入到设备存储器中的高速缓存(例如,应用使文件更新)时,存储设备上的对应数据过期。将对数据的更改传播到相应的存储设备的过程可以被称为回写数据或回写(写回)。当前用于将数据回写到存储设备的技术可能不太理想。



技术实现要素:

通常,本公开内容描述了用于执行回写的技术。特别地,本公开内容描述了用于使回写最优化的技术。本文描述的技术可以使回写以高效的方式被提交到存储设备。本文描述的技术可以提高系统的性能并且延长存储设备的寿命。应注意,文档通过引用纳入本文是出于描述的目的,并且不应该被理解为对于本文使用的术语的限制和/或造成歧义。例如,在一个纳入的参考文献提供的一个术语的定义不同于另一个纳入的参考文献提供的该术语的定义和/或不同于如该术语在本文中使用的定义的情况下,应以广泛地包括每个相应的定义的方式和/或以替代地包括每个特定定义的方式解释该术语。

根据本公开内容的一个实施例,一种用于管理对存储设备的回写的方法包括:接收将索引节点对象的实例写入存储设备的请求,确定是否已经超过元数据回写的时间阈值,以及当确定已经超过所述时间阈值时,使所述索引节点对象的实例被提交到所述存储设备。

根据本公开内容的另一个实施例,一种设备包括一个或多个处理器,所述一个或多个处理器被配置为接收将索引节点对象的实例写入存储设备的请求,确定是否已经超过元数据回写的时间阈值,并且当确定已经超过所述时间阈值时,使所述索引节点对象的实例被提交到所述存储设备。

根据本公开内容的另一个实施例,一种非暂时性计算机可读存储介质包括存储在其上的指令,所述指令在执行时导致设备的一个或多个处理器接收将索引节点对象的实例写入存储设备的请求,确定是否已经超过元数据回写的时间阈值,并且当确定已经超过所述时间阈值时,使所述索引节点对象的实例被提交到所述存储设备。

根据本公开内容的另一个实施例,一种仪器包括用于接收将索引节点对象的实例写入存储设备的请求的装置,用于确定是否已经超过元数据回写的时间阈值的装置,以及用于当确定已经超过所述时间阈值时,使所述索引节点对象的实例被提交到所述存储设备的装置。

根据本公开内容的一个实施例,一种用于管理对存储设备的回写的方法包括:接收将在与索引节点相关联的页面范围内的数据回写到存储设备的请求,确定所述索引节点是否对应于存储到所述存储设备的连续数据区域的数据对象,确定所述连续数据区域是否包含所述页面范围,以及当确定所述连续数据区域包含所述页面范围时,扩展所述页面范围并且使在扩展的页面范围内的数据被提交到所述存储设备。

根据本公开内容的另一个实施例,一种设备包括一个或多个处理器,所述一个或多个处理器被配置为接收回写在与存储设备的索引节点相关联的页面范围内的数据的请求,确定所述索引节点是否对应于存储到所述存储设备的连续数据区域的数据对象,确定所述连续数据区域是否包含所述页面范围,以及当确定所述连续数据区域包含所述页面范围时,扩展所述页面范围并且使在扩展的页面范围内的数据被提交到所述存储设备。

根据本公开内容的另一个实施例,一种非暂时性计算机可读存储介质包括存储在其上的指令,所述指令在执行时导致设备的一个或多个处理器接收回写在与存储设备的索引节点相关联的页面范围内的数据的请求,确定所述索引节点是否对应于存储到所述存储设备的连续数据区域的数据对象,确定所述连续数据区域是否包含所述页面范围,以及当确定所述连续数据区域包含所述页面范围时,扩展所述页面范围并且使在扩展的页面范围内的数据被提交到所述存储设备。

根据本公开内容的另一个实施例,一种仪器包括用于接收回写在与存储设备的索引节点相关联的页面范围内的数据的请求的装置,用于确定所述索引节点是否对应于存储到所述存储设备的连续数据区域的数据对象的装置,用于确定所述连续数据区域是否包含所述页面范围的装置,以及用于当确定所述连续数据区域包含所述页面范围时,扩展所述页面范围并且使在扩展的页面范围内的数据被提交到所述存储设备的装置。

在附图和以下描述中阐述了一个或多个实施例的细节。其他特征、目的和优点将从该描述和附图以及权利要求变得明显。

附图说明

图1是例示了可以实施本公开内容的一个或多个技术的计算设备的一个实施例的方框图。

图2是例示了可以实施本公开内容的一个或多个技术的计算设备的操作系统的一个实施例的方框图。

图3是例示了为根据本公开内容的一个或多个技术的示例虚拟文件系统定义的数据结构的实施例的概念图。

图4是例示了根据示例文件系统定义的卷的一个实施例的概念图。

图5是例示了包括与根据本公开内容的一个或多个技术的数据对象相关联的记录的目录条目的一个实施例的概念图。

图6是例示了与根据本公开内容的一个或多个技术的数据对象和存储到存储设备的数据对象相关联的目录条目的一个实施例的概念图。

图7是例示了根据本公开内容的一个或多个技术的存储堆栈的一个实施例的概念图。

图8是例示了根据本公开内容的一个或多个技术导致执行回写操作的一个实施例的流程图。

图9是例示了根据本公开内容的一个或多个技术导致执行回写操作的一个实施例的流程图。

具体实施方式

一种设备可以将设备存储器中的高速缓存实施为用于从存储设备读数据和将数据写入到存储设备的媒介。设备存储器中的高速缓存的一个实施例包括基于linux操作系统的unix中的页面高速缓存。应注意,尽管参考linux来描述本文描述的技术,但是本文描述的技术可以广泛地适用于将数据回写到任何类型的操作系统的存储设备。在linux中,一个页面表示存储器的一个基本单元。在linux中,一个页面包括随机访问存储器(ram)中的物理页面。用于中央处理单元架构的常见页面大小是4096字节(即,4千字节(kib))。其他示例页面大小可以包括8kib、16kib、32kib、64kib等。一个页面可以存储对应于定义的数据结构的数据。例如,如下文进一步详细地描述的,一个页面可以存储对应于一个索引节点对象结构的实例的数据。此外,一个页面可以存储对应于存储设备上的物理块的数据。存储对应于存储设备上的物理块的数据的页面被包括在页面高速缓存中。页面高速缓存中的页面可以包括块,其中一个块可以表示存储设备的一个或多个扇区。每个扇区的字节数可以基于存储设备,其中一个扇区表示存储设备的最小可寻址单元。例如,对于硬盘驱动器,一个常见扇区大小是512字节,并且cd-rom光盘具有2048字节的扇区。因此,在一个实施例中,页面高速缓存中的4kib页面可以包括四个块,其中每个块表示存储设备上的两个512字节扇区。应注意,对于基于存储设备的闪存存储器,术语“块”指的是可以被擦除的最小数据单元(即,擦除块)。对于基于存储设备的闪存存储器,一个擦除块包括大量页面,其中闪存存储器设备的背景下的一个页面指的是可以被写入的最小数据单元。通常,在基于存储设备的闪存存储器中,页面需要在它们可以被写入之前被擦除。基于存储设备的闪存存储器的典型块大小和页面大小分别是4-8mb(2^20字节)和8-16kib。如本文中使用的,术语“扇区”可以包括闪存存储器设备的一个页面。

在linux中,如果应用发起一个进程来打开文件,则linux内核搜索页面高速缓存来确定数据是否已经被存储到页面高速缓存。如果数据被存储到页面高速缓存,则从页面高速缓存读数据而不访问存储设备。如果数据没有被存储到页面高速缓存,则从存储设备读数据并且将数据添加到页面高速缓存以用于后续的访问。如果应用发起一个进程来将数据写入到文件,则页面高速缓存中的数据被更新。当在页面高速缓存中数据被更新时,存储在存储设备上的对应数据变得过期。应注意,在此情况下,存储设备可以被称为后备存储器。页面高速缓存中的页面与后备存储器上的数据扇区不同步并且被认为是脏的。脏页面最终会被写入到后备存储器。在一个实施例中,应用可以发起一个进程来同步数据(例如,在应用关闭或用户激活保存图表时)。应注意,系统性能可以是基于回写发生的频率。换言之,通常期望限制访问存储设备的次数,这是因为访问存储设备是相对耗时的并且会降低系统性能。然而,未回写到存储设备的数据可能在系统故障时丢失。linux内核包括一个虚拟文件系统,该虚拟文件系统包括定义的方法,所述定义的方法可以被呼叫来调用各种类型的回写。

可以根据定义的文件系统在存储设备上安排、组织和/或管理存储在备用存储器上的数据。例如,微软可扩展固件倡议fat32文件系统规范(microsoftextensiblefirmwareinitiativefat32filesystemspecification)定义了fat32文件系统的各方面,并且微软exfat修订版1.00文件系统基本规范(microsoftexfatrevision1.00filesystembasicspecification)(第四版,2009年1月1日)定义了exfat文件系统的各方面。此外,文件系统可以包括其他专有文件系统。应注意,尽管本文描述的技术是参考fat文件系统来描述的,但是本文描述的技术可以广泛地适用于任何定义的文件系统。文件系统可以指定卷的结构和要求,其中卷是为存储和检索用户数据所必需的数据空间定义的一组逻辑结构。如下文参考图4详细描述的,fat文件系统卷可以包括引导记录、文件分配表、用户数据和对应于用户数据的元数据。用户数据可以包括目录和文件和/或类似的数据结构。目录、文件和/或类似的数据结构中的每个通常可以被称为数据对象或数据项。对应于用户数据的元数据可以包括与用户数据相关联的记录。如上文描述的以及在下文进一步详细描述,linux内核包括虚拟文件系统。虚拟文件系统包括定义的数据结构,所述定义的数据结构作为使得应用能够与各种定义的文件系统的交互操作的抽象。例如,linux定义索引数据结构,所述索引数据结构是包括在文件系统卷内的数据对象的虚拟表示。

用户数据可以被物理地存储到存储设备的一个或多个扇区。文件系统可以根据多个扇区定义一个簇(或分配单元),其中簇是存储器的可以分配到数据对象的最小逻辑单元。因此,一个或多个簇被分配到存储在存储设备上的每个数据对象。文件系统内的文件分配表、分配位映射和/或类似逻辑结构提供数据对象到一个或多个分配的簇的映射,并且这样可以被称为分配映射结构。如下文进一步详细描述的,文件系统驱动可以使得数据对象在存储设备上被修改。例如,文件系统驱动可以接收回写数据请求(例如,响应于应用系统呼叫),并且可以使分配到数据对象的簇被包括在页面高速缓存内的数据重写。应注意,在分配到数据对象的簇改变时,文件系统内的文件分配表、分配位映射和类似的逻辑结构可能需要被更新。

当文件例如在普通用户访问期间被写入到对应于该文件中包括的数据的页面时,对应于文件元数据的页面和/或对应于稳健性系统结构的页面可以变得与存储到存储设备的对应数据不同步。如上文描述的,linux中的虚拟文件系统包括被调用以使备用存储器更新的方法。应注意,在一些情况下,可以每秒若干次调用使备用存储器更新的方法,这在典型的linux存储堆栈中使对应的写入被提交到存储设备。在一些情况下,执行到存储设备的过多的写入会导致存储设备的寿命缩短。例如,基于存储设备的闪存可以具有有限数量的写入循环。此外,将数据写入到存储设备是相对耗时的过程并且执行过度的回写会降低系统性能。本文描述的技术可以被用来使回写以高效的方式被提交到存储设备。

图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和页面107。如图1中例示的,存储设备112包括卷113。应注意,尽管示例计算设备100被例示为具有不同的功能块,但是这样的例示是出于描述性目的并且不将计算设备100限制到特定的硬件架构或软件架构。可以使用硬件实施方式、固件实施方式和/或软件实施方式的任何组合来实现计算设备100的功能。

中央处理单元102可以被配置为实施用于在计算设备100中执行的功能和/或进程指令。中央处理单元102可以能够检索和处理用于实施本文描述的一个或多个技术的指令、代码和/或数据结构。指令可以存储在计算机可读介质(诸如,系统存储器104或存储设备112)上。中央处理单元102可以包括数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程逻辑阵列(fpga)、或其他等同的集成逻辑电路或分立逻辑电路。中央处理单元102可以包括一个或多个多核中央处理单元。中央处理单元102可以根据页面大小来操作。

系统存储器104可以被配置为存储可以在操作期间由计算设备100使用的信息。系统存储器104可以被描述为非暂时性或有形计算机可读存储介质。在一些实施例中,系统存储器104可以提供临时存储器和/或长期存储。在一些实施例中,系统存储器104或其部分可以被描述为非易失性存储器,并且在其他实施例中,系统存储器的部分可以被描述为易失性存储器。易失性存储器的实施例包括随机访问存储器(ram)、动态随机访问存储器(dram)和静态随机访问存储器(sram)。非易失性存储器的实施例包括磁性硬盘、光盘、软盘、闪存、或电可编程存储器(eprom)或电可擦除和可编程存储器(eeprom)的形式。在一个实施例中,系统存储器104可以包括内部硬盘驱动器和/或内部闪存。如图1中例示的,系统存储器104包括页面107。如上文描述的,页面可以包括ram中的物理页面。在图1中例示的实施例中,页面107包括页面高速缓存109,该页面高速缓存109包括对应于存储设备上的物理块的页面和包括对象的页面。上文描述了页面高速缓存的实施例。对象的实施例包括定义的数据结构的实例。例如,对象可以包括为示例虚拟文件系统定义的数据结构的实例。下文详细描述了为示例虚拟文件系统定义的数据结构的实施例。

系统接口110可以被配置为使得计算设备100的部件之间能够通信。在一个实施例中,系统接口110包括使得能够将数据从一个对等设备传送到另一个对等设备或传送到存储介质的结构。例如,系统接口110可以包括支持外围部件互连(pci)总线协议、高速外围部件互连(pcie)总线协议、专有总线协议或可以用来互连对等设备的任何其他形式的结构的芯片组(chipset)。

存储设备112表示计算设备100的存储器,该存储器可以被配置为在与系统存储器104不同的时期内存储不同量的信息。类似于系统存储器104,存储设备112还可以包括一个或多个非暂时性或有形计算机可读存储介质。存储设备112可以是内部存储器或外部存储器,并且在一些实施例中可以包括非易失性存储元件。存储设备可以包括存储卡(例如,安全数字(sd)存储卡,包括标准容量(sdsc)格式、高容量(sdhc)格式和扩展容量(sdxc)格式)、外部硬盘驱动器和/或外部固态驱动器。存储在存储设备112上的数据可以根据定义的文件系统(诸如,例如fat12文件系统、fat16文件系统、fat32文件系统、exfat文件系统、事务性exfat文件系统、ntfs文件系统和/或专有文件系统)存储。如图1中例示的,存储设备112包括卷113。卷113可以包括根据文件系统定义的卷。

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循环等)表达的算法。操作系统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和块驱动208。虚拟文件系统204是使得应用106能够与各种定义的文件系统交互操作的抽象的一个实施例。例如,应用106可以发出系统呼叫(例如,标准unix系统呼叫),并且虚拟文件系统204可以使呼叫在特定的文件系统中被调用。虚拟文件系统204可以定义接口和数据结构。为虚拟文件系统定义的数据结构的实施例被例示在图3中。

文件系统驱动206可以被配置为在虚拟文件系统204与存储设备(诸如存储设备112)之间提供抽象层。在一个实施例中,文件系统驱动206可以被配置为允许根据基于文件分配表(fat)文件系统的文件系统将数据存储到系统存储器104和/或存储设备112,所述文件分配表(fat)文件系统包括fat12文件系统、fat16文件系统、fat32文件系统、exfat文件系统、事务性exfat文件系统、ntfs文件系统和/或专有文件系统,所述专有文件系统包括tuxera闪存文件系统(tffs)。应注意,在一些实施例中,文件系统驱动206可以被实施为实施多个文件系统(例如,fat文件系统和exfat文件系统二者)的一个二进制驱动。在其他实施例中,文件系统驱动206可以包括用于相应的文件系统的单独的二进制驱动。块驱动208可以被配置为导致存储设备i/o操作发生。例如,当用户希望打开在页面高速缓存中不可获得的文件时,块驱动208可以接收从存储设备读对应于该文件的块的请求。应注意,在一些实施例中,块驱动208可以包括i/o调度器。i/o调度器可以管理i/o请求。例如,i/o调度可以使读请求优先于写请求,这是因为应用可能需要先从文件读数据,之后该应用继续,而写请求可能在系统性能方面对时间不太敏感。

如上文所述,虚拟文件系统204可以定义数据结构,图3是例示了为根据本公开内容的一个或多个技术的示例虚拟文件系统定义的数据结构的实施例的概念图。图3中例示的示例虚拟文件系统300可以对应于基于为linux内核定义的虚拟文件系统(或虚拟文件交换机)的虚拟文件系统。然而,应注意,为了简洁起见,本文没有详细描述在linux中定义的包括附加数据结构的虚拟文件系统的完整论述。然而,参考了由linux内核组织维护的文档。此外,应注意,本文描述的技术可以广泛地适用于文件系统抽象。如图3中例示的,虚拟文件系统300包括超级块对象、索引节点对象、地址空间对象和页面对象。超级块对象的实例表示具体安装的文件系统。例如,超级块对象可以表示存储到安装到计算设备的存储设备的fat卷。如图3中例示的,超级块对象可以包括文件系统类型(例如,fat32)和对应该文件系统类型的索引节点列表。索引节点对象的实例表示特定数据对象(例如,文件)。例如,索引节点对象可以表示存储到存储设备的fat卷中包括的用户文件。如图3中例示的,可以通过数字来标识索引节点。

如上文所述,存储对应于存储设备上的物理块的数据的页面被包括在页面高速缓存中。页面对象的实例可以表示设备存储器中的页面,例如,可以是页面107中包括的每个页面的页面对象的实例。如图3中例示的,页面对象指向地址空间对象,并且地址空间对象指向索引节点对象。因此,地址空间对象的实例可以将对应于索引节点的数据(例如,形成文件的多个字节的数据)映射到物理页面。例如,索引节点可以对应于48kib文件,地址空间对象可以包括十二个4kib页面的映射,所述十二个4kib页面包括文件的数据。如上文描述的,页面高速缓存中与备用存储器上的数据扇区不同步的页面被认为是脏的。如图3中例示的,虚拟文件系统300中的数据结构包括指示页面(从而相关联的索引节点)是否脏的列表和标记。如上文描述的,虚拟文件系统204可以定义接口。接口可以包括包含在每个虚拟文件系统对象中的操作对象。例如,超级块操作对象可以包括可以在特定文件系统上调用的方法并且索引节点操作对象可以包括可以在索引节点上调用的方法,下面进一步详细描述了这些方法的实施例。

如上文描述的,卷113可以包括根据文件系统定义的卷。图4是例示了根据示例文件系统定义的卷的一个实施例的概念图。在一个实施例中,可以根据fat文件系统来定义卷400。应注意,尽管在一些实施例中参考fat文件系统描述了卷400,但是本文描述的技术不限于fat文件系统并且可以与其他文件系统一起使用。此外,应注意,示例卷400表示卷的例示性实施例,并且为了简洁起见,不意在作为根据一个文件系统定义的卷的穷尽描述。可以在对应的文件系统规范中找到卷的附加细节。例如,在根据基于fat12文件系统、fat16文件系统和fat32文件系统中的一个或多个的文件系统定义卷400的情况下,可以在微软可扩展固件倡议fat32文件系统规范(版本1.03,2000年12月6日)(microsoftextensiblefirmwareinitiativefat32filesystemspecification)中找到卷的附加细节。

在图4中例示的实施例中,卷400包括引导记录402、文件分配表404和数据区域406。引导记录402、文件分配表404和数据区域406中的每个可以是根据扇区值在存储设备(诸如存储设备112)上可寻址的。引导记录402包括描述文件系统参数的数据条目。在一个实施例中,引导记录402包括用于自举卷的数据、卷的基本文件系统参数以及多种错误检查信息。引导记录402可以包括一个或多个引导记录。在一个实施例中,引导记录402包括主引导记录和备份引导记录,其中备份引导记录是主引导记录的副本。如图4中例示的,引导记录402中包括的信息的实施例包括卷长度、文件分配表长度、簇计数、根目录的第一个簇、每扇区的字节和每簇的扇区。在一个实施例中,卷长度以扇区指定卷400的大小。在一个实施例中,文件分配表长度以扇区指定文件分配表404的大小。在一个实施例中,簇计数指定数据区域406中包括的簇的数目。应注意,尽管未在图4中例示,但是引导记录402还可以包括指示分配的簇的百分比的信息和允许卷400被自举的信息。

在一个实施例中,根目录的第一个簇指定根目录在数据区域406中的扇区位置。在一个实施例中,每扇区的字节指定一个扇区中包括的字节的数目。在一个实施例中,每扇区的字节的数目可以以2的幂记数法表达,并且可以在每扇区512字节的最小值到每扇区4096字节的最大值的范围内。在一个实施例中,每簇的扇区指定每簇的扇区的数目。在一个实施例中,每簇的扇区的最小数目可以是1,并且每簇的扇区的最大数目可以提供32kib的最大簇大小。应注意,在一些实施例中,簇的大小可取决于卷大小。例如,对于最大卷的符合标准的fat卷,定义为大于32千兆字节(gib)(其中1gib为1,0243字节)的卷,簇大小将是fat的最大簇大小,其是32kib(例如,64个512字节的扇区或8个4096字节的扇区)。符合标准的32gibfat卷将使用大小为16kib的簇。符合标准的16gibfat卷将使用8kib簇。符合标准的8gibfat卷将使用4kib簇。

文件分配表404可以包括一个或多个文件分配表。在一个实施例中,文件分配表404包括单个文件分配表304。在另一个实施例中,文件分配表404包括两个或更多个文件分配表。文件分配表404可以被用来描述被分配到数据区域406中的数据对象(诸如文件)的簇的序列(也称为簇的链)。如图4中例示的,一个文件分配表可以包括一个条目和一个与该条目对应的值。在图4中例示的实施例中,条目00包括指示媒体类型的值,并且条目01包括占位符值。条目02到簇计数+1可以提供描述分配到数据对象的簇的序列的信息。在一个实施例中,条目可以包括指示簇的序列中的一个后续簇条目的值、指示“坏”簇的值、指示簇未被使用的值或指示簇的序列结束(eof)的值。

在图4中例示的实施例中,根文件目录在簇02处开始。如图4中例示的,条目02包括指示根目录未被指派任何附加簇的eof标记。此外,在图4中例示的实施例中,文件在簇03处开始。如图4中例示的,条目03包括04的地址,指示文件的序列中的下一个簇是簇04。条目04包括指示文件未被指派任何附加簇的eof标记。以此方式,文件分配表可以被用来识别分配到数据对象的簇的序列。应注意,尽管在图4中例示的实施例中,分配到数据对象的簇是连贯的,但是在其他实施例中,分配到数据对象的簇可以包括不连贯的簇(例如,指向条目07的条目03等)。

数据区域406可以是卷400的存储构成数据对象的数据的区域。例如,数据区域406可以包括表示一种或多种类型的文件的数据对象。例如,数据区域406可以包括文字处理文档(诸如microsoftword文档)、媒体文件(诸如jpeg文件、视频文件)和/或其他类型的文件。在一些实施例中,数据区域406可以被称为簇堆。如上文描述的,关于数据区域406的配置的信息可以被包括在引导记录402(例如,簇计数和分配的簇的百分比)中。如图4中例示的,数据区域包括目录表和文件数据。

目录表可以包括描述指示文件和目录之间的关系的树结构的条目。例如,目录表可以指示特定文件存储在父目录的子目录中。在图3中例示的实施例中,目录表包括根目录、“我的项目”目录。如图3中进一步例示的,文字处理文档文件(“report.doc”)和图片文件(“pic.jpg”)被存储在“我的项目”目录中。在图4中例示的实施例中,根目录可以包括关于卷和数据区域的一般信息。应注意,目录条目可以包括根据文件系统定义的一个或多个不同类型的记录。一个或多个记录可以将一个数据对象映射到一个数据区域。例如,一个记录中的第一个簇字段可以提供一个文件到一个或多个数据簇的最初映射。当修改存储到一个卷的数据对象时,可以更新记录。为简洁起见,本文未提供对记录类型的完整论述。

目录表中包括的目录条目可以包括不同类型的一个或多个记录。图5是例示了包括与数据对象相关联的记录的目录条目的实施例的概念图。图5中例示的示例目录条目500大体上对应于根据fat12、fat16和fat32定义的目录条目。目录条目500包括目录条目记录502(其可以被称为短目录条目记录)并且可以包括一个或多个长名称目录条目记录504。在fat12、fat16和fat32的实施例中,目录条目记录502和一个或多个长名称目录条目记录504在一个或多个扇区中的顺序可能如下:一个或多个长名称目录条目记录504和目录条目记录502。应注意,在其他实施例中,可以定义其他类型的目录条目。例如,exfat定义目录条目记录、流扩展记录和文件名称扩展记录。应注意,示例目录条目500表示根据文件系统定义的目录条目的示例性实施例并且为了简洁起见,本文未提供根据文件系统定义的目录条目的详尽描述。

如上文描述的,文件系统驱动206可以被配置为在虚拟文件系统204与存储到存储设备的卷定义的文件系统之间提供抽象层。以此方式,文件系统驱动可以被配置为从卷接收数据并且生成为虚拟文件系统204定义的数据结构对象的实例。例如,参考图3,索引节点对象包括时间数据,所述时间数据可以包括关于特定文件最后被修改的时间的信息。索引节点对象可以定义这样的信息的特定格式。参考图5,目录条目502包括时间数据信息。因此,在此情况下,文件系统驱动206可以转换(或翻译)目录条目502中的信息,以生成索引节点对象的一个实例的时间数据值。此外,如上文描述的,虚拟文件系统204可以定义包括可以在特定文件系统上调用的方法的接口。文件系统驱动206可以被配置为接收方法请求并且使用文件系统特定的方法完成该方法。例如,虚拟文件系统204可以调用写入索引节点方法(例如,write_inode),所述写入索引节点方法请求将给定的索引节点写入到存储设备。在此情况下,文件系统驱动206可以接收该请求,转换索引节点对象的实例中的信息,并且使存储到存储设备的对应目录条目更新。下文进一步详细描述了根据本公开内容的一个或多个技术的可以在特定文件系统上调用的其他方法和用于以高效的方式将对应数据提交到存储设备的技术。

如上文描述的,用户数据可以在物理上存储到存储设备的一个或多个扇区。此外,元数据(诸如目录条目)在物理上存储到存储设备的一个或多个扇区。图6是例示了与数据对象和根据本公开内容的一个或多个技术存储到存储设备的数据对象相关联的目录条目的一个实施例的概念图。在图6中例示的实施例中,目录表被分配一个包括至少512字节的扇区(扇区1和扇区2)的簇。如图6中例示的,report.doc和pic.jpg的目录条目被存储到扇区1中包括的32字节数据槽。如图6中例示的,report.doc被分配到一个包括至少512字节的扇区(扇区101和扇区102)的簇和簇链中的附加簇。如上文描述的,一个块可以包括一个或多个扇区。因此,扇区1和扇区2可以对应于第一页面中的块,并且扇区101和扇区102可以对应于第二页面中的块。如上文进一步描述的,在设备存储器中可以使用多个页面来表示文件(例如,48kib文件将需要至少十二个4kib页面)。如上文进一步描述的,在一些实施例中,簇的大小可以在4kib到32kib的范围。因此,在一些实例中,页面高速缓存中的页面可以被认为包括文件的组块(chunk)。

如上文描述的,当文件正被写入时,对应于该文件中包括的数据的页面变脏。如上文描述的,可以执行回写以将存储到存储设备的文件数据与存储在页面高速缓存中的文件数据同步。虚拟文件系统204可以被配置为调用若干种类型的、请求对于特定页面执行回写的方法。在一些实施例中,虚拟文件系统204可以调用请求对于特定索引节点将始于特定页面索引处的大量页面写入到后备存储器的方法。此外,在一个实施例中,虚拟文件系统204可以调用请求将对应于特定地址对象的页面写入到后备存储器的方法。应注意,在一些情况下,为了在一些情况下同步数据(例如,在文件关闭或未安装设备之前)以及为了在一些情况下立即更新数据(例如,虚拟文件系统可能调用周期性回写请求)可以调用方法。参考图6,在请求始于特定页面索引处的大量页面写入到针对report.doc的后备存储器的情况下,页面的范围可以对应于存储设备的连续数据区域中包括的簇。例如,在report.doc包括十二个4kib簇(例如,簇05至簇16)的连续簇链的情况下,回写两个4kib页面的请求可以对应于连续簇链中被重写的两个连续簇(例如,簇10至簇11)。此外,如上文描述的,虚拟文件系统204可以调用写入索引节点方法,所述写入索引节点方法请求将给定索引节点写入到存储设备。参考图6,在为对应于report.doc的索引节点请求写入索引节点方法的情况下,将该请求提交到存储设备将包括重写扇区1。应注意,在典型的linux实施中,不管是为了同步数据还是为了立即更新数据而调用的回写请求(例如,回写页面或将索引节点写入到光盘的请求)简单地通过文件系统驱动传递并且被提交到存储设备。如下文进一步详细描述的,文件系统驱动206可以被配置为接收回写请求并且使回写以高效的方式提交到存储设备。

图7是例示了根据本公开内容的回写如何被提交到存储设备的存储堆栈的一个实施例的概念图。如图7中例示的,应用106a-106n可以调用读和写入系统呼叫以及同步系统呼叫。虚拟文件系统204可以接收系统呼叫并且调用文件系统驱动206中的方法。换言之,为了在一些情况下同步数据以及为了在一些情况下立即更新数据,虚拟文件系统204可以调用方法。文件系统驱动206可以接收虚拟文件系统方法并且调用块i/o操作。块驱动208可以接收块i/o操作、调度i/o请求以及将i/o请求发送到存储设备112。在数据写入请求的情况下,存储设备112可以响应于请求在物理上将数据提交到存储介质。图8和图9是可以通过文件系统驱动206执行以使回写以高效的方式提交到存储设备的技术的实施例。应注意,尽管方法800和方法900被描述为通过文件系统驱动206来执行,但是方法800和方法900可以更广泛地通过计算设备200及其部件的组合来执行。

参考图8,文件系统驱动206接收写入索引节点的请求(802)。例如,虚拟文件系统204可以调用针对report.doc的写入索引节点请求。在图8中例示的实施例中,请求可以对应于间歇性数据更新。换言之,更新存储到存储设备的卷的对应目录记录中的数据对于应用后续读数据不是必须的。例如,对于图5中例示的时间数据(例如,最后访问的或最后修改的数据),为了确保在卷的后续安装期间的故障安全操作,当卸载卷时或当不再访问索引节点时,可能仅需要更新时间数据。因此,文件系统驱动206可以执行关于间歇性写入索引节点请求的方法800并且可以执行用于同步写入索引节点请求的其他方法。在804处,文件系统驱动206确定最后的元数据写入的时间。换言之,例如,文件系统驱动206可以确定写入索引节点请求被提交到存储设备的最后时间。在一个实施例中,文件系统驱动206可以记录元数据写入的时间以及读取记录的时间。在806处,文件系统驱动206确定是否已经超过写入时间阈值。例如,写入时间阈值可以是x秒,其中x是可以由文件系统驱动206、应用和/或用户设置的值。例如,x对于某些系统可以是5并且对于其他系统是10。文件系统驱动206可以确定当前时间是否大于最后的元数据写入的记录的时间和写入时间阈值(例如,当前时间>记录的时间+阈值)。

当确定尚未超过时间阈值时,文件系统驱动206可以延迟写入请求。换言之,写入请求未被提交到存储设备。在图8中例示的实施例中,文件系统驱动206将该请求添加到写入列表(808),所述写入列表可以包括其他写入请求。例如,参考图6中例示的实施例,文件系统驱动206可以接收写入针对pic.jpg的索引节点的请求并且随后接收写入针对report.doc的索引节点的请求。在此情况下,如果写入针对pic.jpg的索引节点的请求被延迟,则它会被包括在写入列表中。在810处,文件系统驱动206可以指示请求未被执行。例如,文件系统驱动206可以回叫虚拟文件系统204并且指示请求未被执行。在一些实施例中,文件系统驱动206可以设置指示数据未被同步的值。

当确定已经超过时间阈值时,在812处,文件系统驱动206可以执行元数据写入。例如,文件系统驱动206可以使写入请求被提交到存储设备。此外,文件系统驱动206可以使写入请求与任何之前延迟的写入请求一起被提交到存储设备。例如,在写入针对pic.jpg的索引节点的请求被延迟的情况下,它可以与当前的写入针对report.doc的索引节点的请求一起被提交到存储设备。以此方式,文件系统驱动206可以被配置为合并或批处理间歇性索引节点写入请求。应注意,在图6中例示的实施例中,合并针对pic.jpg的写入索引节点请求和针对report.doc的写入索引节点请求会导致扇区1被重写一次而不是两次,这会延长存储设备的寿命并且提高系统性能。在此参考图8,在814处,文件系统驱动206可以指示所执行的回写。应注意,在一些实施例中,文件系统驱动206可以被配置为使延迟的元数据回写在计时器到期时发生。例如,每y秒延迟写入列表可以被提交到存储设备,无论是否接收后续的间歇性写入请求。

如上文描述的,除了接收间歇性写入索引节点请求,文件系统驱动206可以接收回写一个索引节点的页面范围的间歇性请求。参考图9,在902处,文件系统驱动206接收回写与一个索引节点相关联的脏页面范围的请求。在图9中例示的实施例中,该请求可以对应于间歇性数据更新。因此,文件系统驱动206可以执行关于间歇性回写请求的方法900并且可以执行同步请求的其他方法。如上文描述的,在一些情况下,其中将始于特定页面索引的大量页面写入到后备存储的请求可以包括对应于存储设备的连续数据区域中包括的簇的页面范围。文件系统驱动206可以确定该请求中包括的脏页面范围是否包括在连续区域中(904)。在一个实施例中,文件系统驱动206可以评估文件分配表。换言之,文件系统驱动206可以确定连续的簇链是否基于fat以及所述页面范围是否包括在连续簇链中。例如,如上文描述的,report.doc可以包括十二个簇(例如,簇05至簇16)组成的连续簇链,并且回写两个页面的请求可以对应于连续簇链中的两个连续簇(例如,簇10至簇11)被重写。

再次参考图9,在906处,文件系统驱动206可以确定是否存在针对连续区域的附加脏页面。例如,在report.doc包括簇05至簇16组成的连续簇链并且回写两个页面的请求对应于簇10至簇11的情况下,文件系统驱动206可以确定对应于簇05-09和簇12-16中的任何一个的页面是否是脏的。在确定连续区域中的附加页面是脏的时,文件系统驱动206可以将该页面范围扩展为对应于簇09-12。在910处,文件系统驱动206使该页面范围(例如,扩展的或未扩展的范围)被提交到存储设备。应注意,扩展页面范围会导致存储设备的数据区域被重写一次而不是多次,这可以延长存储设备的寿命并且提高系统性能。例如,在基于闪存的存储设备的情况下,代替执行两个擦除-写入循环,可以执行一个擦除-写入循环,例如在范围被扩展一个擦除块时。因此,在一些情况下,扩展范围可以被对齐在擦除块边界内。此外,在硬件驱动存储设备的情况下,扩展页面范围会导致更少的寻找。

应注意,在一些情况下,以上文参考图8描述的方式类似的方式,间歇性回写请求可以被延迟并且在接收到附加间歇性回写请求时被提交到存储设备。例如,在report.doc包括簇05至簇16组成的连续簇链的情况下,回写簇10-11的请求可以被延迟并且在接收到回写簇05-09和簇12-16中任一个的后续请求时被提交到存储设备。以此方式,文件系统驱动206可以被配置为以高效的方式执行回写。

在一个或多个实施例中,可以用硬件、软件、固件或其任何组合来实施描述的功能。如果用软件来实施,则所述功能可以作为一个或多个指令或代码存储在计算机可读介质上或通过计算机可读介质传输,并且通过基于硬件的处理单元来执行。计算机可读介质可以包括计算机可读存储介质,其对应于有形介质(诸如数据存储介质),或包括便于例如根据通信协议将计算机程序从一个地方传送到另一个地方的任何介质的通信介质。以此方式,计算机可读介质通常可以对应于(1)非暂时性的有形计算机可读存储介质或(2)通信介质,诸如信号或载波。数据存储介质可以是可以由一个或多个计算机或一个或多个处理器访问以检索用于实施在本公开内容中描述的技术的指令、代码和/或数据结构的任何可用介质。计算机程序产品可以包括计算机可读介质。

通过实施例而非限制的方式,这样的计算机可读存储介质可以包括ram、rom、eeprom、cd-rom或其他光盘存储器、磁盘存储器或其他磁性存储设备、闪存或可以用来以指令或数据结构的形式存储所需的程序代码并且可以由计算机访问的任何其他介质。此外,任何连接被适当地称为计算机可读介质。例如,如果使用同轴电缆、光缆、双绞线、数字用户线路(dsl)或无线技术(诸如红外线、无线电和微波)从网站、服务器或其他远程源传输指令,则同轴电缆、光缆、双绞线、dsl或无线技术(诸如,红外线、无线电和微波)被包含在介质的定义中。然而,应理解,计算机可读存储介质和数据存储介质不包括连接、载波、信号或其他暂态介质,而是指向非暂态、有形的存储介质。如本文使用的磁盘和光盘包括压缩光盘(cd)、激光光盘、光学光盘、数字通用光盘(dvd)、软盘和蓝光光盘,其中磁盘通常以磁性方式复制数据,而光盘用激光以光学方式复制数据。上述的组合也应被包括在计算机可读介质的范围内。

指令可以由一个或多个处理器(诸如,一个或多个数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程逻辑阵列(fpga)或其他等同的集成逻辑电路或分立逻辑电路系统)执行。因此,如本文使用的术语“处理器”可以指任何前述结构或适合于实施本文描述的技术的任何其他结构。此外,在一些方面,可以在专用硬件模块和/或软件模块内提供本文描述的功能。此外,可以在一个或多个电路或逻辑元件中完全地实施所述技术。

本公开内容的技术可以在多种设备或装置中实施,所述设备或装置包括无线手持机、集成电路(ic)或一组ic(例如,芯片组)。在本公开内容中描述了多种部件、模块或单元,以强调被配置为执行公开的技术的设备的各功能方面,但是不一定要求由不同的硬件单元实现。而是,如上文描述的,各种单元可以被组合在一个编解码器硬件单元中,或由互操作性硬件单元(包括如上文描述的一个或多个处理器)的集合连同合适的软件和/或固件来提供。

已经描述了多个实施例。这些和其他实施例在以下权利要求的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1