CN116661981A - 一种文件处理方法、文件系统、电子设备及介质 - Google Patents

一种文件处理方法、文件系统、电子设备及介质 Download PDF

Info

Publication number
CN116661981A
CN116661981A CN202210152798.6A CN202210152798A CN116661981A CN 116661981 A CN116661981 A CN 116661981A CN 202210152798 A CN202210152798 A CN 202210152798A CN 116661981 A CN116661981 A CN 116661981A
Authority
CN
China
Prior art keywords
file
data
memory
sequence number
type
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210152798.6A
Other languages
English (en)
Inventor
董明凯
易纪非
吴方诺
陈海波
方炜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202210152798.6A priority Critical patent/CN116661981A/zh
Publication of CN116661981A publication Critical patent/CN116661981A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Retry When Errors Occur (AREA)

Abstract

本申请涉及文件系统技术领域,公开了一种文件处理方法、文件系统、电子设备及介质。方法包括:获取用户对文件数据进行写入操作产生的更新数据;响应于用户对更新数据的保存请求,获取执行更新数据的保存请求所需的各操作;各操作包括第一类操作和第二类操作,第一类操作包括通过文件系统接口能够观察到的更新操作,第二类操作包括读操作和/或通过文件系统接口不能观察到的更新操作;通过第一执行方式执行第二类操作;在第二类操作执行完后,通过调用硬件事务内存的方式执行第一类操作。基于上述方案,文件系统可以只将各操作中第一类操作即可见的写操作采用硬件事务内存执行,能够有效避免由于硬件内存执行操作过多而导致事务失败的问题发生。

Description

一种文件处理方法、文件系统、电子设备及介质
技术领域
本申请涉及文件系统技术领域,特别涉及一种文件处理方法、文件系统、电子设备及介质。
背景技术
文件系统是操作系统中非常重要的组成部分,文件系统一般用于进行文件信息的存储和管理。为了更好的进行文件管理,文件系统需要保证数据的一致性。其中,数据的一致性包括崩溃一致性和并发一致性。
其中,崩溃一致性指保证当系统崩溃并重启后,所有先前的文件系统请求都应满足全有或全无的语义,即对文件系统状态的所有修改应该被全部保存或完全没有被保存。当崩溃一致性无法保证,例如用户在写入数据时发生了系统崩溃,可以理解,向一个文件写入新数据需要先分配存储空间,再进行数据写入,用户在系统恢复后可能会读取到旧数据,即新的数据并没有写入成功,因此该文件没有使用新分配的存储空间,但文件系统却会认为这些存储空间已被该文件正常使用,因此会存在这些存储空间丢失的情况发生。并发一致性指对于任意的文件系统请求,其他并发任务观察到的对文件系统状态的修改应该一致的。例如,当用户在对文件修改时,存在并发任务为读取该文件,则读取到的文件状态为已保存的修改,而不能读取到文件中未保存的修改。
现有技术中,一般采用日志技术执行文件的写入操作,但是基于日志技术在将数据写入系统之前需要写到专门的日志中,因此存在增大写入,即增大占用内存的问题。还有一些方案基于硬件事务内存执行文件的写入操作,硬件事务内存能够有效保证事务或数据的一致性。但由于硬件事务内存是基于硬件实现事务的执行,因此由于硬件资源的限制,难以执行数量较多的或者占用内存较大的操作。
发明内容
为解决上述由于硬件资源的限制,硬件事务内存难以执行数量较多的或者占用内存较大的操作的问题,本申请实施例提供一种文件处理方法、文件系统、电子设备及介质。
第一方面,本申请实施例提供一种文件处理方法,包括:
获取用户对文件数据进行写入操作产生的更新数据;
响应于用户对所述更新数据的保存请求,获取执行所述更新数据的保存请求所需的各操作;所述各操作包括第一类操作和第二类操作,所述第一类操作包括通过文件系统接口能够观察到的更新操作,所述第二类操作包括读操作和/或通过文件系统接口不能观察到的更新操作;
通过第一执行方式执行所述第二类操作;
在所述第二类操作执行完毕后,通过第二执行方式执行所述第一类操作,所述第二执行方式包括调用硬件事务内存的方式。
可以理解,本申请实施例中,文件系统可以只将执行更新数据的保存请求所需的各操作中第一类操作即可见的写操作采用硬件事务内存执行,能够有效避免由于硬件内存执行操作过多而导致事务失败的问题发生。
其次,由于可见的写操作是基于硬件事务内存完成的,根据硬件事务内存执行操作的特性,即原子性、一致性和隔离性,使得在发生系统崩溃时,能够有效保证数据的崩溃一致性和并发一致性。
可以理解,在一些实施例中,在检测到用户对所述更新数据的保存请求,即用户的保存操作后,可以确定用户的写入操作所涉及的更新数据的占用内存。并当确定用户的写入操作所涉及的更新数据的占用内存大于设定值时,只将第一类操作即可见的写操作采用硬件事务内存执行。第二类操作采用其他方式执行,例如,对于不可见的写操作可以基于动态随机存取存储器的影子页技术进行执行。
当确定用户的写入操作所涉及的更新数据的占用内存小于等于设定值时,将第一类操作和第二类操作均采用采用硬件事务内存执行。
在上述第一方面的一种可能的实现中,所述文件数据具有对应的序列编号;
所述第一类操作包括:采用更新数据替换所述文件数据以及将所述文件数据对应的序列编号修改为所述更新数据对应的序列编号。
可以理解,给文件数据设置序列编号,在文件写入操作被提交后,修改初始的序列编号,能够便于后文所述的读取操作中,能够根据当前序列编号与初始记录的序列编号不一致从而推断文件数据已经被修改。以保证最终读取到的数据和写入的数据为一致的数据,保证读写操作和写入操作的并发一致性。
在上述第一方面的一种可能的实现中,当确定执行所述更新数据的保存请求所需的占用内存小于等于设定值,所述第一执行方式包括调用硬件事务内存的方式。
可以理解,当确定写入操作所涉及的更新数据的占用内存小于等于设定值,则可以推断写入操作所涉及的数据的占用内存可能小于等于硬件事务所能运行的事务内存,因此硬件事务内存可以直接执行提交所述写入操作所需的所有操作,即包括第一类操作和第二类操作,但仍然是先执行第二类操作,再执行第一类操作。
在上述第一方面的一种可能的实现中,当确定执行所述更新数据的保存请求所需的占用内存大于设定值,所述第一执行方式不采用调用硬件事务内存的方式。
可以理解,当确定写入操作所涉及的更新数据的占用内存大于设定值,则可以确定写入操作所涉及的数据的占用内存可能大于硬件事务内存所能运行的事务内存,硬件事务内存难以执行提交写入操作所需的全部操作,则可以只采用硬件事务内存执行第一类操作,以减少硬件事务内存执行操作的数量。
在上述第一方面的一种可能的实现中,所述文件数据包括文件的数据页内的数据,所述数据页具有对应的第一序列编号;
所述通过第一执行方式执行所述第二类操作,包括:
通过影子页技术,将所述更新数据写入影子页;
所述通过第二执行方式执行所述第一类操作,包括:
调用硬件事务内存,用所述影子页替换所述数据页,并将所述数据页对应的第一序列编号更改为第二序列编号。
在上述第一方面的一种可能的实现中,所述采用第二执行方式执行所述第一类操作,还包括:
修改文件访问时间以及提交内存分配信息至文件系统。
在上述第一方面的一种可能的实现中,所述文件数据包括文件的元数据。
在上述第一方面的一种可能的实现中,
所述对所述文件数据进行写入操作包括:对文件的存储位置信息进行写入操作;
所述通过第一执行方式执行所述第二类操作,包括:
读取文件的原存储位置信息和目标存储位置信息;
所述通过第二执行方式执行所述第一类操作,包括:
调用硬件事务内存,用所述更新数据替换所述文件数据,并修改所述文件对应的槽序列编号和目录项序列编号。
可以理解,采用上述方法,将读操作房子可见的写操作之前执行,能够有效避免现有技术中存在一些文件处理方法中,在读取操作未执行完,便执行可见的写操作造成的事务失败的问题。
在上述第一方面的一种可能的实现中,还包括:
当在执行所述第二类操作的过程中存在并发的进程访问所述文件数据,则控制所述第二类操作执行失败。
在上述第一方面的一种可能的实现中,当所述第二类操作执行失败的次数达到设定次数,则锁定所述文件数据所对应的文件。
本申请实施例中,当硬件事务反复失败达到失败上限时,采用inode级别锁,即完全锁定该文件来保证文件数据的读取操作和写入操作的并发一致性。且能够有效避免高并发场景下硬件事务内存多次失败导致性能下降的问题。
在上述第一方面的一种可能的实现中,还包括:
记录待读取数据的初始序列编号;
读取所述待读取数据;
调用硬件事务内存,获取所述待读取数据的当前序列编号;
当所述待读取数据的当前序列编号与所述初始序列编号一致,修改所述文件的访问时间,并关闭所述硬件事务内存。
在上述第一方面的一种可能的实现中,当所述待读取数据的当前序列编号与所述初始序列编号不一致,记录所述待读取数据的当前序列编号,读取所述待读取数据。
可以理解,本申请实施例中,在读取数据之前会记录数据对应的序列编号,在最后提交阶段,会调用硬件事务内存,获取数据对应的当前序列编号,并在判断出当前的数据的序列编号与初始记录的数据的序列编号不一致时,重新读取数据的序列编号和数据,以保证最终读取到的数据和写入的数据为一致的数据,保证读操作和写入操作的并发一致性。
第二方面,本申请实施例提供一种文件系统,包括处理器,所述处理器用于执行所述的文件处理方法。
在上述第二方面的一种可能的实现中,文件系统还包括内核文件系统和用户态文件系统库;
所述用户态文件系统库包括至少一个原子内存分配器,所述内核文件系统包括内核内存分配器;
所述原子分配器用于分配所述对文件进行写入操作所需的空闲页;
所述原子分配器还用于向所述内核内存分配器发送内存分配请求;
所述内核内存分配器用于根据所述内存分配请求向所述原子分配器分配对应的内存。
在上述第二方面的一种可能的实现中,所述原子分配器包括空闲页链表和待分配链表,所述空闲页链表包括未分配指针区域和已分配指针区域,所述未分配指针区域包括至少一个未分配指针,所述已分配指针区域包括至少一个已分配指针;
当用户对文件数据进行写入操作时,所述原子内存分配器从所述未分配指针区域选取对文件数据进行写入操作所需的预设指针;
所述原子内存分配器将所述预设指针加入待分配链表;
当所述第二类操作执行完毕后,所述原子内存分配器分配所述预设指针给所述文件数据对应的文件。
在上述第二方面的一种可能的实现中,当所述第二类操作执行失败,所述原子内存分配器将所述预设指针分配至所述空闲页链表的未分配区域。
可以理解,本申请实施例中,当事务失败或系统崩溃重启时,待分配链表会被直接加入到空闲链表的头部,即将执行该事务分配到的内存页重新归为未被分配的内存页,能够有效避免由于事务失败,事务并未成功执行,但内存也却被占用所导致的内存泄漏的问题的发生。
在上述第二方面的一种可能的实现中,还包括文件项,所述文件项包括多个数据页,每个所述数据页均有对应的序列编号。
在上述第二方面的一种可能的实现中,还包括目录,所述目录包括至少一个槽,每个槽具有对应的指针和对应的槽序列编号;
所述至少一个槽中的每个槽包括至少一个目录项,所述至少一个目录项中的每个目录项均具有对应的目录项序列编号。
第三方面,本申请实施例提供一种电子设备,包括所述的文件系统。
第四方面,本申请实施例提供一种电子设备,包括:
存储器,用于存储由皮套键盘的一个或多个处理器执行的指令;
处理器,是所述电子设备的一个或多个处理器中的一个,用于执行上述文件处理方法。
第五方面,本申请实施例提供一种可读介质,所述可读介质上存储有指令,该指令在电子设备上执行时使机器执行权利要求上述文件处理方法。
第六方面,本申请实施例一种计算机程序产品,包括指令,所述指令用于执行上述文件处理方法。
附图说明
图1根据本申请的一些实施例,示出了一种文件处理方法的场景示意图。
图2根据本申请的一些实施例,示出了一种文件系统的结构示意图。
图3a根据本申请的一些实施例,示出了一种原子内存分配器的结构示意图。
图3b根据本申请的一些实施例,示出了一种原子内存分配器的结构示意图。
图3c根据本申请的一些实施例,示出了一种原子内存分配器的结构示意图。
图4根据本申请的一些实施例,示出了一种文件项的结构示意图。
图5根据本申请的一些实施例,示出了一种目录的结构示意图。
图6根据本申请的一些实施例,示出了一种文件处理方法的流程示意图。
图7根据本申请的一些实施例,示出了一种文件处理方法的流程示意图。
图8根据本申请的一些实施例,示出了一种文件处理方法的流程示意图。
图9根据本申请的一些实施例,示出了一种文件处理方法的流程示意图。
具体实施方式
本申请的说明性实施例包括但不限于一种文件处理方法和文件系统、和电子设备。
为了更加理解本申请实施例中的方案,首先对申请实施例中涉及的名词进行相应的解释。
事务:指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。下面以银行转账为例,对事物的概念进行说明:
例如,用户A需要转账一定金额至用户B的帐户,此时需要的事务操作包括从用户的帐户A中扣除上述金额的操作,在用户的帐户B中增加上述金额的操作。若在执行完从用户A的帐户中扣除上述金额的操作后,在执行在用户B的帐户中增加上述金额的操作之前程序被中断,则事务会保证从用户A的帐户中扣除上述金额的操作被撤销,即使得事务中的所有操作全都失败。
硬件事务内存:一种基于共享存储的多处理器结构的存储器,由硬件电路实现事务的执行,能够保证事务的原子性、一致性和隔离性。
原子性:指的是事务中的动作为全部执行或者全部都不执行的状态;例如,在数据的更新的过程中,若存在其他用户访问该文件,则展示给其他用户的文件状态只能为数据被更新,或数据完全没有被更新的状态,而不能是数据被更新到一半的状态。
一致性:指任何一个对共享数据进行访问操作的事务在其执行前后系统的状态都应该是一致的。
隔离性:指事务在正常提交之前,其内部的操作对外是不可见的,即未提交的事务操作不会影响系统的状态。
为解决前述由于硬件资源的限制,硬件事务内存难以执行数量较多的或者占用内存较大的操作的技术问题,本申请提供一种文件处理方法,可以由文件系统执行。包括:获取用户对文件数据的写入操作,其中,文件数据具有对应的序列编号;当检测到用户的保存操作,确定用户的写入操作所涉及的更新数据的占用内存。当确定用户的写入操作所涉及的更新数据的占用内存大于设定值,则获取提交该写入操作所需的各个操作。并首先执行各个操作中可见的写操作之外的其他操作,在其他操作执行完后,调用硬件事务内存,执行可见的写操作。当确定写入操作所涉及的更新数据的占用内存小于等于设定值,则直接调用硬件事务内存,通过硬件事务内执行提交用户的写入操作所需的所有操作。
其中,可见的写操作包括采用新数据替换旧数据的操作,修改文件数据对应的序列编号、修改文件数据对应文件的访问时间以及提交对应的内存分配信息至文件系统等通过文件系统接口可以观察到的更新操作。
可见的写操作之外的其他操作包括读取操作和不可见的写操作,其中不可见的写操作为无法通过文件系统接口观察到的更新操作,例如内存分配操作、获取更新数据的操作等。本申请实施例中,可见的写操作之外的其他操作可以由其他任意的存储设备执行。例如,对于不可见的写操作可以基于动态随机存取存储器的影子页技术进行执行。
可以理解,上述文件数据可以包括文件内数据页内的数据或文件的元数据。其中,文件的元数据包括描述一个文件的特征的系统数据,例如目录项、属性、存储位置信息等数据。
本申请实施例提供的上述文件处理方法,当确定用户的写入操作所涉及的更新数据的占用内存较大时,文件系统获取提交该写入操作的所需的各操作,并只将各操作中可见的写操作采用硬件事务内存执行。能够有效减小硬件事务内存中的操作数量,避免由于硬件内存执行操作过多而导致事务失败的问题。
其次,由于可见的写操作是基于硬件事务内存完成的,根据硬件事务内存执行操作的特性,即原子性、一致性和隔离性,使得在发生系统崩溃时,能够有效保证数据的崩溃一致性和并发一致性。
下面以文件数据为文件的数据页内的数据,对文件中数据页的写入操作为例,对本申请实施例中提供的文件处理方法进行说明。下面以用户在word文档中的数据页的写入操作为例,说明本申请实施例中的方案。
例如,如图1所示,用户在word文档中的第一数据页101和第二数据页102写入了数据,文件系统获取用户在文档中第一数据页101和第二数据页102的写入操作,其中,第一数据页101和第二数据页102具有对应的序列编号。
当检测到用户的点击“保存”控件的操作或其他形式的保存操作,则确定用户的上述写入操作所涉及的数据即写入数据的占用内存,当确定用户的上述写入数据的占用内存大于设定值,例如大于4096b,则获取提交该写入操作所需的所有操作,具体可以包括新数据的获取操作和新数据替换旧数据操作,其中,新数据替换旧数据为可见的写操作,此时先执行获取新数据的操作这一不可见的写操作,然后执行新数据替换旧数据这一可见的写操作。其中新数据的获取操作通过影子页技术执行,具体的为给第一数据页101和第二数据页102分配对应的第一影子页103和第二影子页104,将写入数据写入第一影子页103和第二影子页104中,当写入数据全部写入第一影子页103和第二影子页104后,调用硬件事务内存,通过硬件事务内存实现第一影子页103和第二影子页104对第一数据页101和第二数据页102的替换,本申请实施例中,通过硬件事务内存执行的可见的写操作还可以包括修改第一数据页101和第二数据页102对应的序列编号、修改文件的访问时间以及提交对应内存分配信息。其中,内存分配信息可以为分配了两个影子页。
下面以文件数据为元数据,对文件的元数据的写入操作为例,对本申请实施例中提供的文件处理方法进行说明。
例如,用户将一个文件从C盘移动到F盘,则该文件的存储位置信息将会改变,即文件的元数据将会被修改,即对文件元数据执行的写入操作。当文件系统获取该写入操作,并在检测到用户的保存操作后,则确定用户的上述写入操作所对应数据即写入数据的占用内存,当确定用户的上述写入数据的占用内存大于设定值,则获取提交该写入操作所需的所有操作,例如包括C盘的读取操作和F盘的读取操作,以及C盘的文件删除操作和F盘的文件加入操作。其中C盘的文件删除操作和F盘的文件加入操作为可见的写操作,C盘的读取操作和F盘的读取操作为读操作。此时,文件系统会首先执行C盘的读取操作和F盘的读取操作,然后调用硬件事务内存执行C盘的文件删除操作和F盘的文件加入操作,并同时修改该文件对应的目录项序列编号和槽序列编号。
采用上述方法,能够有效避免现有技术中存在一些文件处理方法中,在读取操作未执行完,便执行可见的写操作造成的事务失败的问题,例如,在上述F盘的读取操作未执行完时,即执行C盘的文件删除操作和F盘的文件加入操作,此时却发现F盘不存在,因此,造成了事务执行的失败。
为了更加了解本申请实施例中提供的方案,下面首先对本申请涉及的文件系统的结构进行说明。如图2所示,图2示出了一种文件系统的示意图。
可以理解,本申请实施例中提供的文件系统可以包括内核文件系统和用户态文件系统库。
其中用户态文件系统库包括多个数据区域,例如数据区域A、数据区域B和数据区域C,以及多个用户态原子内存分配器,例如原子内存分配器A、原子内存分配器B和原子内存分配器C。用户态文件系统能够采用多个用户态原子内存分配器分别对多个数据区域中的数据和元数据进行管理。例如,原子内存分配器A对数据区域A中的数据和元数据进行管理,原子内存分配器B对数据区域B中的数据和元数据进行管理,原子内存分配器C对数据区域C中的数据和元数据进行管理。
用户态文件系统还能够通过用户态原子内存分配器对每个数据区域中的单独的空闲页进行分配。当数据区域的空闲页不够时,该数据区域对应的用户态原子内存分配器可以向内核文件系统的内核内存分配器发送内存分配请求,以使得内核内存分配器能够分配额外的空闲页至该数据区域。例如,当数据区域A的空闲页不够时,该数据区域A对应的用户态原子内存分配器A可以向内核文件系统的内核内存分配器发送内存分配请求,以使得内核内存分配器能够分配额外的空闲页至数据区域A。
其中,原子内存分配器的基本结构如图3a所示,为一个空闲链表200,其中当前位置之前的每个指针都代表了一个未被使用的空闲页,而当前位置之后的指针都是已经被使用的内存页。例如,如图3a所示,指针4以及指针4右端的所有指针均代表已分配的内存页,指针1、指针2和指针3代表未被分配的内存页。当文件系统需要分配一页内存时,如图3b所示,原子内存分配器会将当前位置向前移动一位,分配出来的内存页的指针,例如指针3会被加入到一个与空闲链表200具有相同结构的待分配链表中。当事务被提交时,待分配链表会被直接释放,从而完成内存的永久分配。而当事务失败或系统崩溃重启时,待分配链表会被直接加入到空闲链表200的头部,例如,待分配链表里只有指针3,则如图3c所示,指针3会被加入到空闲链表200的头部。即将执行该事务分配到的内存页重新归为未被分配的内存页,能够有效避免由于事务失败,事务并未成功执行,但内存也却被占用所导致的内存泄漏的问题的发生。
可以理解,上述每个数据区域具有单独的原子内存分配器,能够使得内存分配器可以单独的管理对应的数据区域,避免多个数据区域对内存分配产生竞争,因此可以使得安全地将内存分配器的修改归为不可见的写操作类型。
由于内存分配操作也可归属于不可见的写操作,因此内存分配操作必须在写操作之前完成,采用上述结构的原子内存分配器能够实现高效提交和回滚,并能够有效防止原子内存分配器在事务提交之前发生崩溃。
用户态文件系统库中还可以包括文件项和目录,文件项可以包括多个文件,每个文件的结构可以如图4所示,包括多个数据页例如页0、页1...页n,每个数据页具有对应的指针,例如,页0对应的指针为指针0,页1对应的指针为指针1,页n对应的指针为指针n;其中每个指针都有一个对应的序列编号,例如指针0对应序列编号0,指针1对应序列编号1,指针2对应序列编号2;即每个数据页具有一个对应的序列编号,例如页0对应序列编号0,页1对应序列编号1,页2对应序列编号2;当每次数据被修改,则该数据所对应的数据页的序列编号也会被同步修改。
目录结构如图5所示,为一个哈希表。具体包括多个槽,每个槽中存储有多个目录项,例如,槽0中具有目录项0、目录项1和目录项2;每个槽具有对应的槽序列编号和指针,例如,槽0具有对应的序列编号0和指针0,每个目录项具有对应的目录项序列编号、目录项编号以及目录项名称。例如目录项0具有对应的目录项序列编号0、目录项编号0以及目录项名称0。文件系统在执行目录项的访问操作时,首先会对访问目录名称进行哈希计算映射到对应的槽中,遍历该槽的所有目录项,从而找到与上述目录名称对应的目录项。当目录项被修改时,槽序列编号和目录项序列编号均会被同步修改。
内核文件系统包括内核内存分配器,内核内存分配器能够负责文件系统的初始化和所有数据区域的元数据管理,当接收到用户态原子内存分配器发送的内存分配请求,内核内存分配器能够分配额外的空闲页至该用户态原子内存分配器管理的数据区域。
下面结合上述文件系统对本申请实施例中提供的文件处理方法进行介绍。图6示出了本申请实施例一种文件处理方法的流程示意图。图6中所示的文件处理方法可以由文件系统执行。如图6所示,文件处理方法可以包括:
601:获取用户对文件数据的写入操作,其中,所述文件数据具有对应的序列编号。
可以理解,本申请实施例中,上述文件数据可以包括文件内数据页内的数据或文件的元数据。其中,文件的元数据包括描述一个文件的特征的系统数据,例如目录项等描述数据属性、存储位置等的数据。
对文件内数据页的数据的写入操作可以包括删除数据、增加数据等各种操作。
对文件的元数据的写入操作可以包括对文件的位置移动操作、属性修改操作等。
602:当检测到用户的保存操作,确定用户的写入操作所涉及的更新数据的占用内存。
可以理解,用户的保存操作可以为用户点击了保存按钮、或者用户或者系统设置的自动保存等保存方式。
写入操作所涉及的更新数据的占用内存包括删除数据占用的内存和增加数据占用内存的总和。
603:判断用户的写入操作所涉及的数据的占用内存是否大于设定值。
若判断结果为是,则确定写入操作所涉及的数据的占用内存可能大于硬件事务内存所能运行的事务内存,硬件事务内存难以执行提交写入操作所需的全部操作,则转至604,获取提交该写入操作所需的各操作。若判断结果为否,则确定写入操作所涉及的数据的占用内存可能小于等于硬件事务内存所能运行的事务内存,则转至605,调用硬件事务内存,执行提交该写入操作所需的各操作。
可以理解,上述设定值可以为硬件事务内存所能运行的事务内存值,在一些实施例中,上述设定值也可根据实际需求设定。
604:获取提交该写入操作所需的各操作,各操作包括第一类操作和第二类操作。其中第一类操作为可见的写操作,第二类操作为读操作和/或不可见的写操作。
可以理解,文件系统通过获取提交该写入操作所需的各操作,可以提前对操作的顺序进行排列,将读操作和/或不可见的写操作等置于可见的写操作之前执行。将可见的写操作用硬件事务内存执行。
例如,对于上述对文件中的数据页中的数据的写入操作,提交该写入操作所需的所有操作可以包括新数据的获取操作和新数据替换旧数据的操作。其中,新数据替换旧数据的操作为能够通过文件系统接口观察到的更新,因此为可见的写操作,新数据的获取操作为不能文件系统接口观察到的更新,因此为不可见的写操作。
此时先执行获取新数据的操作这一不可见的写操作,然后执行新数据替换旧数据这一可见的写操作。其中新数据的获取操作通过影子页技术执行,具体的为给数据页分配对应的影子页,将新数据写入影子页中,当数据全部写入影子页后,调用硬件事务内存,通过硬件事务内存实现影子页对数据页的替换,本申请实施例中,通过硬件事务内存执行的可见的写操作还可以包括修改数据页对应的序列编号、修改文件的访问时间以及提交对应内存分配信息等。
再例如,对于上述对文件的元数据的写入操作,例如对文件位置的移动,即对文件存储位置信息的重命名操作。提交该重命名操作所需的所有操作包括读取文件原存储位置的读操作,读取文件目标存储位置的读操作,以及从原存储位置删除该文件和在目标存储位置增加该文件的可见的写操作。此时可以先执行读取文件原存储位置的读操作,读取文件目标存储位置的读操作,然后调用硬件事务内存执行从原存储位置删除该文件和在目标存储位置增加该文件的可见的写操作。
605:执行第二类操作。
可以理解,本申请实施中可以采用第一执行方式执行第二类操作。
如前所述,第二类操作为读操作、不可见的写操作以及不属于可见的写操作的其他操作,其中不可见的写操作可以由影子页等技术执行,即本申请实施例中提及的第一执行方式可以为影子页技术的方式。
例如,对于文件内数据页进行修改的写入操作,提交该写入操作所需的所有操作中不可见的写操作可以为文件系统获取更新数据的操作,该操作可以由影子页技术执行,即给对应的数据页分配对应的影子页,将写入操作所涉及的更新数据写入影子页中。
对于上述对文件的元数据的写入操作,例如对文件位置的移动,即对文件位置信息的重命名操作。提交该重命名操作所需的所有操作包括读取文件原位置的读操作,读取文件目标位置的读操作。该读操作可以由任意的存储器执行。
606:调用硬件事务内存,执行第一类操作。
可以理解,本申请实施中可以采用第二执行方式执行第一类操作,其中,第二执行方式可以为调用硬件事务内存的方式。
可以理解,本申请实施例中,对于第一类操作,即可见的写操作才使用硬件事务内存执行,对于其他操作采用其他方式执行,能够有效减小硬件事务内存中的操作数量,避免由于硬件内存执行操作过多而导致事务失败的问题。
其次,由于可见的写操作是基于硬件事务内存完成的,根据硬件事务内存执行操作的特性,即原子性、一致性、隔离性和持久性,使得在发生系统崩溃时,能够有效数据的崩溃一致性和并发一致性。
可见的写操作包括旧数据的替换,修改文件数据对应的序列编号、修改文件数据对应文件的访问时间以及提交对应的内存分配信息至文件系统等操作。
例如,对于上述对于文件内数据页进行修改的写入操作,可见的写操作包括旧数据的替换,修改文件数据对应的序列编号、修改文件数据对应文件的访问时间以及提交对应的内存分配信息至文件系统等操作。
当获取更新数据的操作为基于影子页完成时,通过硬件事务内存执行的可见的写操作为:通过硬件事务内存实现影子页替换掉初始数据页,并修改数据页对应的序列编号、修改文件的访问时间以及提交对应的内存分配信息至文件系统。
再例如,对于上述对文件的元数据的写入操作,例如对文件位置的移动,即对文件位置信息的重命名操作,可见的写操作包括从原存储位置删除该文件和在目标存储位置增加该文件的操作,因此,通过硬件事务内存执行的操作为从原存储位置删除该文件和在目标存储位置增加该文件的操作,并修改文件所对应的目录项和槽的序列编号、修改文件的访问时间以及提交对应的内存分配信息至文件系统。
607:直接调用硬件事务内存,执行提交写入操作所需的各操作。
可以理解,当确定写入操作所涉及的更新数据的占用内存小于等于设定值,则可以推断写入操作所涉及的数据的占用内存可能小于等于硬件事务所能运行的事务内存,因此硬件事务内存可以直接执行提交所述写入操作所需的所有操作。
例如,对于上述对文件中的数据页中的数据的写入操作,通过硬件事务内存可以直接执行提交该写入操作所需的所有操作,例如包括新数据的获取操作和新数据替换旧数据的操作,还可以包括修改数据页对应的序列编号、修改文件的访问时间以及提交对应的内存分配信息至文件系统等操作。
可以理解,对于常规的文件系统中的元数据访问操作是固定的,因此相较于数据读写操作,元数据访问操作通常涉及到的数据量较少,大多数元数据访问操作的访存不会超过硬件事务内存的容量限制,因此,可以直接调用硬件事务来确保这些元数据访问的一致性。
对于部分涉及大量内存访问的元数据写入操作(例如上述移动文件位置的操作,即重命名操作),同样可以采取本申请实施例中的切分的方法,即先获取执行该操作所需的所有操作,将可见的写操作放在最后执行,并由硬件事务内存执行以保证崩溃一致性,将其他的大部分操作提前完成,并在执行可见的写操作之后,修改对应的槽序列编号和目录项序列编号来保证其并发一致性。
本申请实施例提供的上述文件处理方法,当确定用户的写入操作所涉及的更新数据的占用内存较大时,文件系统获取提交该写入操作的所需的各操作,并只将各操作中可见的写操作采用硬件事务内存执行。能够有效减小硬件事务内存中的操作数量,避免由于硬件内存执行操作过多而导致事务失败的问题。
其次,由于可见的写操作是基于硬件事务内存完成的,根据硬件事务内存执行操作的特性,即原子性、一致性和隔离性,使得在发生系统崩溃时,能够保证数据的崩溃一致性和并发一致性。
可以理解,本申请实施例中,在并发一致性方面,例如当在数据更新期间有并发的进程访问了共享数据,由于硬件事务内存将会控制硬件事务失败,即正在执行的操作执行失败,例如不保存对数据的修改。并重新执行上述事务。因此若事务成功执行完成,则可以确认没有影响并发的其他进程。
本申请实施例中,当硬件事务反复失败达到失败上限时,采用inode级别锁,即完全锁定该文件来保证文件数据的读取操作和写入操作的并发一致性。且能够有效避免高并发场景下硬件事务内存多次失败导致性能下降的问题。
本申请实施例中,当事务被提交时,原子内存分配器中的待分配链表会被直接释放,从而完成内存的永久分配。而当事务失败或系统崩溃重启时,待分配链表会被直接加入到空闲链表的头部,即将执行该事务分配到内存页重新归为未被分配的内存页,能够有效避免由于事务失败,事务并未成功执行,但内存也却被占用所导致的内存泄漏的问题的发生。
下面以文件数据为文件的数据页内的数据,对文件中数据页的写入操作为例,对本申请实施例中提供的文件处理方法进行说明,如图7所示,图7示出了本申请实施例中一种文件处理方法的示意图。
701:获取用户在文件中数据页的写入操作,其中,每个数据页分配有对应的序列编号。
可以理解,对文件内数据页的数据的写入操作可以包括删除数据、增加数据等各种操作。
702:当检测到用户的保存操作,确定用户的写入操作所涉及的更新数据的占用内存。
可以理解,用户的保存操作可以为用户点击了保存按钮、或者用户或者系统设置的自动保存等保存方式。
写入操作所涉及的更新数据的占用内存包括删除数据占用的内存和增加数据占用内存的总和。
703:判断用户的写入操作所涉及的数据的占用内存是否大于设定值。
若判断结果为是,则确定写入操作所涉及的数据的占用内存可能大于硬件事务内存所能运行的事务内存,硬件事务内存难以执行提交写入操作所需的全部操作,则转至704,获取提交该写入操作所需的各操作。若判断结果为否,则确定写入操作所涉及的数据的占用内存可能小于等于硬件事务内存所能运行的事务内存,则转至705,调用硬件事务内存,执行提交该写入操作所需的各操作。
704:获取提交该写入操作所需的第一类操作和第二类操作,第一类操作包括新数据替换旧数据以及修改数据页对应的序列编号的操作,第二类操作包括新数据的获取操作。
如前所述,第一类操作为可见的写操作,第二类操作为读操作和/或不可见的写操作。
对文件内数据页的数据的写入操作还可以包括修改文件的访问时间以及提交对应的内存分配信息至文件系统的操作。
805:执行第二类操作。
可以理解,本申请实施例中执行第二类操作,即新数据的获取操作的方式为给对应的数据页分配对应的影子页,将写入操作所涉及的更新数据写入影子页中。在一些实施例中,也可以采用其他方式执行该操作。
706:调用硬件事务内存,执行第一类操作。
可以理解,执行第一类操作的具体方式为,调用硬件事务内存,采用影子页替换初始数据页,并修改数据页对应的序列编号。
在一些实施例中,调用硬件事务内存还可以执行上述其他可见的写操作,例如修改文件的访问时间以及提交对应的内存分配信息至文件系统等。
707:调用硬件事务内存,执行提交该写入操作的所需的第一类操作和第二类操作。
下面以文件数据为文件的元数据,以对文件位置进行移动,即对文件的存储位置信息的写入操作为例,对本申请实施例中提供的文件处理方法进行说明,如图8所示,图8示出了本申请实施例中一种文件处理方法的示意图。
801:获取用户对文件的位置更改操作,其中,每个文件对应的目录项和槽具有对应的序列编号;
可以理解,用户对文件的位置更改操作可以为用户将文件从原存储位置移动到目标存储位置的操作。当文件的位置被更改,则文件的存储位置信息将会被更改。
802:当检测到用户的保存操作,确定用户的写入操作所涉及的更新数据的占用内存。
可以理解,在对文件的元数据进行写入操作时,对应的保存操作的方式可以为点击保存控件的方式,也可以为系统设置的自定义保存操作。
803:判断文件位置更改操作所涉及的数据的占用内存是否大于设定值。
若判断结果为是,则确定文件位置更改操作所涉及的数据的占用内存可能大于硬件事务内存所能运行的事务内存,硬件事务内存难以执行提交文件位置更改操作所需的全部操作,则转至804,获取提交该文件位置更改操作所需的各操作。
若判断结果为否,则确定文件位置更改操作所涉及的数据的占用内存可能小于等于硬件事务内存所能运行的事务内存,则转至805,调用硬件事务内存,执行提交该文件位置更改操作所需的各操作。
804:获取提交该文件位置更改操作所需的第一类操作和第二类操作。其中第一类操作包括文件原存储位置的删除文件的操作和文件目标存储位置的加入文件操作以及修改文件对应的目录项和槽具有对应的序列编号的操作,第二类操作包括读取文件原存储位置和读取文件目标存储位置的操作。
可以理解,如前所述,第一类操作为可见的写操作,第二类操作为读操作和/或不可见的写操作等不属于可见的写操作的其他操作。
805:执行第二类操作。
可以理解,第二类操作为读取文件原存储位置和读取文件目标存储位置的操作。
806:调用硬件事务内存,执行第一类操作。
可以理解,第一类操作为在文件的原存储位置的删除文件,在文件的目标存储位置加入文件,并修改文件对应的目录项和槽的对应序列编号的操作。
可以理解,第一类操作还可以包括其他可见的写操作。
807:调用硬件事务内存,执行提交文件位置更改操作的所需的第一类操作和第二类操作。
可以理解,上述文件处理方法为对文件系统中的写入操作进行管理,文件系统中的还包括读取操作。其中读取操作可以与写入操作并行执行。下边以读写操作为例说明本申请实施例中另一种文件处理方法,如图9所示,本申请实施例中的文件处理方法可以包括:
901:记录待读取数据对应的序列编号。
902:读取对应的待读取数据。
可以理解,本申请实施例中,对于读取文件中数据页内的数据时,可以采用逐页读取的方式,例如,待读取数据存在两个数据页上,则先记录第一页的序列编号,再读取第一页的数据。然后记录第二页的序列编号,再读取第二页的数据。
903:调用硬件事务内存,获取待读取数据对应的当前序列编号。
904:判断当前序列编号与初始序列编号是否一致。
若不一致,则转至901,重新记录待读取数据对应的序列编号,并重新读取对应的待读取数据。若一致,则转至905,则修改文件访问时间并关闭硬件事务内存。
可以理解,当前序列编号与初始记录的序列编号不一致可以推断文件数据已经被修改。则重新读取数据的序列编号和数据,以保证最终读取到的数据和写入的数据为一致的数据,保证读写操作和写入操作的并发一致性。
可以理解,本申请实施例中,判断当前序列编号与初始序列编号是否一致与额可以采用逐个序列编号依次判断的方式,例如,对于上述读取文件中两个数据页内的数据时,可以首先判断第一数据页的记录编号与初始记录的第一数据页的序列编号是否一致,若不一致,则重新记录第一数据页对应的序列编号,并重新读取第一数据页中的数据。若一致,则判断第二数据页的记录编号与初始记录的第二数据页的序列编号是否一致。若第二数据页的记录编号与初始记录的第二数据页的序列编号不一致,则重新记录第二数据页对应的序列编号,并重新读取第二数据页中的数据。若第二数据页的记录编号与初始记录的第二数据页的序列编号一致,则修改文件访问时间并关闭硬件事务内存。
905:修改文件访问时间并关闭硬件事务内存。
可以理解,本申请实施例中,在读取数据之前会记录数据对应的序列编号,在最后提交阶段,会调用硬件事务内存,获取数据对应的当前序列编号,并在判断出当前的数据的序列编号与初始记录的数据的序列编号不一致时,重新读取数据的序列编号和数据,以保证最终读取到的数据和写入的数据为一致的数据,保证读操作和写入操作的并发一致性。
下面以用户在上述图1中word文档中的读取操作为例,说明本申请实施例中的文件处理方法。包括:文件系统首先记录下第一数据页的序列编号、读取第一数据页的数据,然后记录第二数据页的序列编号、读取第二数据页的数据。数据读取完毕后,调用硬件事务内存,判断第一数据页的记录编号与初始记录的第一数据页的序列编号是否一致,若不一致,则重新记录第一数据页对应的序列编号,并重新读取第一数据页中的数据。若一致,则判断第二数据页的记录编号与初始记录的第二数据页的序列编号是否一致。若第二数据页的记录编号与初始记录的第二数据页的序列编号不一致,则重新记录第二数据页对应的序列编号,并重新读取第二数据页中的数据。若第二数据页的记录编号与初始记录的第二数据页的序列编号一致,则修改文件访问时间,并关闭硬件事务内存。
本申请实施例提供的上述文件处理方法,当确定用户的写入操作所涉及的更新数据的占用内存较大时,文件系统获取提交该写入操作的所需的各操作,并只将各操作中可见的写操作采用硬件事务内存执行。能够有效减小硬件事务内存中的操作数量,避免由于硬件内存执行操作过多而导致事务失败的问题。
其次,由于可见的写操作是基于硬件事务内存完成的,根据硬件事务内存执行操作的特性,即原子性、一致性和隔离性,使得在发生系统崩溃时,能够保证数据的崩溃一致性和并发一致性。
可以理解,本申请实施例中,在并发一致性方面,例如当在数据更新期间有并发的进程访问了共享数据,由于硬件事务内存将会控制硬件事务失败,即正在执行的操作执行失败,例如不保存对数据的修改。并重新执行上述事务。因此若事务成功执行完成,则可以确认没有影响并发的其他进程。
本申请实施例中,当硬件事务反复失败达到失败上限时,采用inode级别锁,即完全锁定该文件来保证文件数据的读取操作和写入操作的并发一致性。。且能够有效避免高并发场景下硬件事务内存多次失败导致性能下降的问题。
本申请实施例中,当事务被提交时,原子内存分配器中的待分配链表会被直接释放,从而完成内存的永久分配。而当事务失败或系统崩溃重启时,待分配链表会被直接加入到空闲链表的头部,即将执行该事务分配到内存页重新归为未被分配的内存页,能够有效避免由于事务失败,事务并未成功执行,但内存也却被占用所导致的内存泄漏的问题的发生
本申请实施例中,在读取数据之前会记录数据对应的序列编号,在最后提交阶段,会调用硬件事务内存,获取数据对应的当前序列编号,并在判断出当前的数据的序列编号与初始记录的数据的序列编号不一致时,重新读取数据的序列编号和数据,有效保证最终读取到的数据和写入的数据为一致的数据,保证读写操作和写入操作的并发一致性。
本申请实施例中,文件系统可以包括处理器,处理器用于执行上述文件处理方法。
本申请实施例中提供一种电子设备,包括上述文件系统。
本申请实施例还一种电子设备,其包括:存储器,用于存储由皮套键盘的一个或多个处理器执行的指令;处理器,是所述电子设备的一个或多个处理器中的一个,用于执行上述文件处理方法。
本申请公开的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本申请的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码应用于输入指令,以执行本申请描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本申请中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
在一些情况下,所公开的实施例可以以硬件、固件、软件或其任何组合来实现。所公开的实施例还可以被实现为由一个或多个暂时或非暂时性机器可读(例如,计算机可读)存储介质承载或存储在其上的指令,其可以由一个或多个处理器读取和执行。例如,指令可以通过网络或通过其他计算机可读介质分发。因此,机器可读介质可以包括用于以机器(例如,计算机)可读的形式存储或传输信息的任何机制,包括但不限于,软盘、光盘、光碟、只读存储器(CD-ROMs)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或用于利用因特网以电、光、声或其他形式的传播信号来传输信息(例如,载波、红外信号数字信号等)的有形的机器可读存储器。因此,机器可读介质包括适合于以机器(例如,计算机)可读的形式存储或传输电子指令或信息的任何类型的机器可读介质。
在附图中,可以以特定布置和/或顺序示出一些结构或方法特征。然而,应该理解,可能不需要这样的特定布置和/或排序。而是,在一些实施例中,这些特征可以以不同于说明性附图中所示的方式和/或顺序来布置。另外,在特定图中包括结构或方法特征并不意味着暗示在所有实施例中都需要这样的特征,并且在一些实施例中,可以不包括这些特征或者可以与其他特征组合。
需要说明的是,本申请各设备实施例中提到的各单元/模块都是逻辑单元/模块,在物理上,一个逻辑单元/模块可以是一个物理单元/模块,也可以是一个物理单元/模块的一部分,还可以以多个物理单元/模块的组合实现,这些逻辑单元/模块本身的物理实现方式并不是最重要的,这些逻辑单元/模块所实现的功能的组合才是解决本申请所提出的技术问题的关键。此外,为了突出本申请的创新部分,本申请上述各设备实施例并没有将与解决本申请所提出的技术问题关系不太密切的单元/模块引入,这并不表明上述设备实施例并不存在其它的单元/模块。
需要说明的是,在本专利的示例和说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
虽然通过参照本申请的某些优选实施例,已经对本申请进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本申请范围。

Claims (22)

1.一种文件处理方法,应用于文件系统,其特征在于,包括:
获取用户对文件数据进行写入操作产生的更新数据;
响应于用户对所述更新数据的保存请求,获取执行所述更新数据的保存请求所需的各操作;所述各操作包括第一类操作和第二类操作,所述第一类操作包括通过文件系统接口能够观察到的更新操作,所述第二类操作包括读操作和/或通过文件系统接口不能观察到的更新操作;
通过第一执行方式执行所述第二类操作;
在所述第二类操作执行完毕后,通过第二执行方式执行所述第一类操作,所述第二执行方式包括调用硬件事务内存的方式。
2.根据权利要求1所述的文件处理方法,其特征在于,所述文件数据具有对应的序列编号;
所述第一类操作包括:采用更新数据替换所述文件数据以及将所述文件数据对应的序列编号修改为所述更新数据对应的序列编号。
3.根据权利要求1或2所述的文件处理方法,其特征在于,当确定执行所述更新数据的保存请求所需的占用内存小于等于设定值,所述第一执行方式包括调用硬件事务内存的方式。
4.根据权利要求1或2所述的文件处理方法,其特征在于,当确定执行所述更新数据的保存请求所需的占用内存大于设定值,所述第一执行方式不采用调用硬件事务内存的方式。
5.根据权利要求1-4任一项所述的文件处理方法,其特征在于,所述文件数据包括文件的数据页内的数据,所述数据页具有对应的第一序列编号;
所述通过第一执行方式执行所述第二类操作,包括:
通过影子页技术,将所述更新数据写入影子页;
所述通过第二执行方式执行所述第一类操作,包括:
调用硬件事务内存,用所述影子页替换所述数据页,并将所述数据页对应的第一序列编号更改为第二序列编号。
6.根据权利要求5所述的文件处理方法,其特征在于,所述采用第二执行方式执行所述第一类操作,还包括:
修改文件访问时间以及提交内存分配信息至文件系统。
7.根据权利要求1-4任一项所述的文件处理方法,其特征在于,所述文件数据包括文件的元数据。
8.根据权利要求7所述的文件处理方法,其特征在于,
所述对所述文件数据进行写入操作包括:对文件的存储位置信息进行写入操作;
所述通过第一执行方式执行所述第二类操作,包括:
读取文件的原存储位置信息和目标存储位置信息;
所述通过第二执行方式执行所述第一类操作,包括:
调用硬件事务内存,用所述更新数据替换所述文件数据,并修改所述文件对应的槽序列编号和目录项序列编号。
9.根据权利要求1-7任一项所述的文件处理方法,其特征在于:还包括:
当在执行所述第二类操作的过程中存在并发的进程访问所述文件数据,则控制所述第二类操作执行失败。
10.根据权利要求9所述的文件处理方法,其特征在于:当所述第二类操作执行失败的次数达到设定次数,则锁定所述文件数据所对应的文件。
11.根据权利要求2所述的文件处理方法,其特征在于,还包括:
记录待读取数据的初始序列编号;
读取所述待读取数据;
调用硬件事务内存,获取所述待读取数据的当前序列编号;
当所述待读取数据的当前序列编号与所述初始序列编号一致,修改所述文件的访问时间,并关闭所述硬件事务内存。
12.根据权利要求11所述的文件处理方法,其特征在于,当所述待读取数据的当前序列编号与所述初始序列编号不一致,记录所述待读取数据的当前序列编号,读取所述待读取数据。
13.一种文件系统,其特征在于,包括处理器,所述处理器用于执行上述1-12任一项所述的文件处理方法。
14.根据权利要求13所述的文件系统,其特征在于,还包括内核文件系统和用户态文件系统库;
所述用户态文件系统库包括至少一个原子内存分配器,所述内核文件系统包括内核内存分配器;
所述原子分配器用于分配所述对文件进行写入操作所需的空闲页;
所述原子分配器还用于向所述内核内存分配器发送内存分配请求;
所述内核内存分配器用于根据所述内存分配请求向所述原子分配器分配对应的内存。
15.根据权利要求14所述的文件系统,其特征在于,所述原子分配器包括空闲页链表和待分配链表,所述空闲页链表包括未分配指针区域和已分配指针区域,所述未分配指针区域包括至少一个未分配指针,所述已分配指针区域包括至少一个已分配指针;
当用户对文件数据进行写入操作时,所述原子内存分配器从所述未分配指针区域选取对文件数据进行写入操作所需的预设指针;
所述原子内存分配器将所述预设指针加入待分配链表;
当所述第二类操作执行完毕后,所述原子内存分配器分配所述预设指针给所述文件数据对应的文件。
16.根据权利要求15所述的文件系统,其特征在于,当所述第二类操作执行失败,所述原子内存分配器将所述预设指针分配至所述空闲页链表的未分配区域。
17.根据权利要求13-16所述的文件系统,其特征在于,还包括文件项,所述文件项包括多个数据页,每个所述数据页均有对应的序列编号。
18.根据权利要求13-17所述的文件系统,其特征在于,还包括目录,所述目录包括至少一个槽,每个槽具有对应的指针和对应的槽序列编号;
所述至少一个槽中的每个槽包括至少一个目录项,所述至少一个目录项中的每个目录项均具有对应的目录项序列编号。
19.一种电子设备,其特征在于,包括权利要求13-18任一项所述的文件系统。
20.一种电子设备,其特征在于,包括:
存储器,用于存储由皮套键盘的一个或多个处理器执行的指令;
处理器,是所述电子设备的一个或多个处理器中的一个,用于执行权利要求1-12中任一项所述的文件处理方法。
21.一种可读介质,其特征在于,所述可读介质上存储有指令,该指令在电子设备上执行时使机器执行权利要求1-12中任一项所述的文件处理方法。
22.一种计算机程序产品,其特征在于,包括指令,所述指令用于执行权利要求1-12中任一项所述的文件处理方法。
CN202210152798.6A 2022-02-18 2022-02-18 一种文件处理方法、文件系统、电子设备及介质 Pending CN116661981A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210152798.6A CN116661981A (zh) 2022-02-18 2022-02-18 一种文件处理方法、文件系统、电子设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210152798.6A CN116661981A (zh) 2022-02-18 2022-02-18 一种文件处理方法、文件系统、电子设备及介质

Publications (1)

Publication Number Publication Date
CN116661981A true CN116661981A (zh) 2023-08-29

Family

ID=87719402

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210152798.6A Pending CN116661981A (zh) 2022-02-18 2022-02-18 一种文件处理方法、文件系统、电子设备及介质

Country Status (1)

Country Link
CN (1) CN116661981A (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104572941A (zh) * 2014-12-30 2015-04-29 杭州华为数字技术有限公司 数据存储方法、装置和设备
CN105335220A (zh) * 2014-07-25 2016-02-17 华为技术有限公司 一种存储设备的事务恢复方法,及装置
CN106020736A (zh) * 2016-06-08 2016-10-12 重庆大学 一种内存文件系统中的数据一致性更新方法
CN106250320A (zh) * 2016-07-19 2016-12-21 诸葛晴凤 一种数据一致性及磨损均衡的内存文件系统管理方法
US9842031B1 (en) * 2014-12-08 2017-12-12 Amazon Technologies, Inc. Incremental updates to user transaction state at read-only nodes of a distributed database
US20210011652A1 (en) * 2019-07-12 2021-01-14 Tsinghua University Data storage access method, device and apparatus for persistent memory

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105335220A (zh) * 2014-07-25 2016-02-17 华为技术有限公司 一种存储设备的事务恢复方法,及装置
US9842031B1 (en) * 2014-12-08 2017-12-12 Amazon Technologies, Inc. Incremental updates to user transaction state at read-only nodes of a distributed database
CN104572941A (zh) * 2014-12-30 2015-04-29 杭州华为数字技术有限公司 数据存储方法、装置和设备
CN106020736A (zh) * 2016-06-08 2016-10-12 重庆大学 一种内存文件系统中的数据一致性更新方法
CN106250320A (zh) * 2016-07-19 2016-12-21 诸葛晴凤 一种数据一致性及磨损均衡的内存文件系统管理方法
US20210011652A1 (en) * 2019-07-12 2021-01-14 Tsinghua University Data storage access method, device and apparatus for persistent memory

Similar Documents

Publication Publication Date Title
US6792518B2 (en) Data storage system having mata bit maps for indicating whether data blocks are invalid in snapshot copies
US10579364B2 (en) Upgrading bundled applications in a distributed computing system
US6957362B2 (en) Instantaneous restoration of a production copy from a snapshot copy in a data storage system
US6934822B2 (en) Organization of multiple snapshot copies in a data storage system
US7035881B2 (en) Organization of read-write snapshot copies in a data storage system
JP4104586B2 (ja) ファイル管理機能を備えたファイルシステム及びファイル管理方法
US5379412A (en) Method and system for dynamic allocation of buffer storage space during backup copying
US7765189B2 (en) Data migration apparatus, method, and program for data stored in a distributed manner
JP4557975B2 (ja) 非共有データベースシステムにおける所有権の再割当
EP2176795B1 (en) Hierarchical storage management for a file system providing snapshots
US7694087B2 (en) Duplicate data storing system, duplicate data storing method, and duplicate data storing program for storage device
US5367671A (en) System for accessing extended object attribute (EA) data through file name or EA handle linkages in path tables
US7363540B2 (en) Transaction-safe FAT file system improvements
CN108701048B (zh) 数据加载方法及装置
US9430331B1 (en) Rapid incremental backup of changed files in a file system
JP4419884B2 (ja) データ複製装置、方法及びプログラム並びに記憶システム
CN110750507B (zh) 面向dfs的全局命名空间下的持久客户端缓存方法及系统
JPH05210637A (ja) 同時アクセス管理方法
JPH0279141A (ja) 仮想索引機構
KR101587995B1 (ko) 적응적 로깅 장치 및 방법
CN110058923B (zh) 一种基于动态预取策略的Docker容器COW机制优化方法及系统
US8082230B1 (en) System and method for mounting a file system on multiple host computers
CN113656396A (zh) 非统一内存访问架构下的持久性内存索引构建方法
CN116661981A (zh) 一种文件处理方法、文件系统、电子设备及介质
US9235349B2 (en) Data duplication system, data duplication method, and program thereof

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination