访问文件的方法和相关设备与流程

文档序号:16398346发布日期:2018-12-25 19:59阅读:187来源:国知局
访问文件的方法和相关设备与流程

本发明涉及计算机技术领域,具体涉及访问文件的方法和装置及计算节点。



背景技术:

现在出现了存储级内存(SCM,Storage Class Memory)的概念,此概念基于新一代非易失性内存技术。新一代非易失性内存的存取效能表现与普通内存模组基本一致。同时具有半导体产品的可靠性,例如防震抗压,而且可以在无需擦除旧有资料的情况下直接写入,可作为缓解处理器与存储之间巨大的访问速度差异的新一代存储设备。其中,SCM一方面和现有的一些常规的随机存取存储器(RAM,Random Access Memory)一样,可直接挂在内存总线上,直接面对中央处理器(CPU,Center Processing Unit);另一方面,它的功能也延伸到现有外存上,可以作为永久性数据存储设备。

业内预计,新一代非易失性存储器(NVM,Non-Volatile Memory)可能成为替代闪存、磁盘甚至动态随机存取存储器(DRAM,Dynamic RAM)的未来存储设备。这些存储设备具有很多优秀的特性,主要特性有访问速度快(可拥有与DRAM相近的访问速度)、字节可寻址(可设计为与DRAM具有相同访问接口)、数据掉电不丢失(可以与闪存或者磁盘一样可持久存储数据)。这些特性使得这一类新的存储器件,被公认为有可能在未来数年之内替代部分DRAM和磁盘等传统存储体而成为存储系统的主流,也因此将引发传统存储系统结构的革命性变化。

这些变革之一就是文件系统有可能常驻内存,并期望实现以近似普通内存数据的访问性能来访问文件系统的文件。在这种构想的架构之下,采用传统的文件访问方式将变得不合时宜。



技术实现要素:

本发明实施例提供一种访问文件的方法和相关设备,以期适用于在文件系统常驻内存场景下进行文件访问。

本发明实施例第一方面提供一种访问文件的方法,所述访问文件的方法应用于计算节点中,所述计算节点包括内存,所述内存包括:文件存储内存区和进程工作内存区,所述进程工作内存区存储有内存页表,所述进程工作内存区之中运行有操作系统,

其中,所述访问文件的方法包括:

所述操作系统接收携带文件标识的文件打开请求;

所述操作系统获得所述文件标识所表示的文件的第一索引节点,其中,所述文件存储于所述文件存储内存区之中;基于所述第一索引节点得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间;

所述操作系统为所述文件分配第一虚拟地址空间;

所述操作系统利用所述内存页表记录第一虚实地址映射关系;

其中,所述第一虚实地址映射关系包括所述第一虚拟地址空间与所述第一物理地址空间之间的映射关系,其中,所述内存页表包括内核内存页表和/或用户进程内存页表。

结合第一方面,在第一方面的第一种可能的实施方式中,

所述基于所述第一索引节点得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间,包括:基于所述第一索引节点中记录的第一文件页表或用于指向第一文件页表的指针,得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间,其中,所述第一文件页表用于指向所述文件存储内存区之中存储所述文件的内存区,所述的第一物理地址空间为所述文件存储内存区之中存储所述文件的内存区的物理地址空间,所述第一文件页表为单级或多级文件页表。

结合第一方面的第一种可能的实施方式,在第一方面的第二种可能的实施方式中,所述利用内存页表记录第一虚实地址映射关系,包括:在内存页表中增加用于记录所述第一虚实地址映射关系的表项,所述表项包含所述第一文件页表或用于指向所述第一文件页表的指针。

结合第一方面的第二种可能的实施方式,在第一方面的第三种可能的实施方式中,所述内存页表的总级数为Y,所述第一文件页表的总级数为X,若所述表项包含所述第一文件页表,则所述表项为所述内存页表中的第Y-X+1级内存页表中的表项,若所述表项包含用于指向所述第一文件页表的指针,则所述表项为所述内存页表中的第Y-X级内存页表中的表项,所述X为正整数,所述Y为大于所述X的正整数。

结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式,在第一方面的第四种可能的实施方式中,所述方法还包括:

所述操作系统在所述第一索引节点中记录所述第一虚拟地址空间和/或所述第一虚拟地址空间的起始地址,和/或,所述操作系统在所述文件对应的文件对象之中记录所述第一虚拟地址空间和/或所述第一虚拟地址空间的起始地址。

结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式,在第一方面的第五种可能的实施方式中,所述第一虚拟地址空间为连续的或者非连续的虚拟地址空间。

结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式,在第一方面的第六种可能的实施方式中,所述第一虚拟地址空间处于内核虚拟地址空间或者用户进程虚拟地址空间。

结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式,在第一方面的第七种可能的实施方式中,

所述获得所述文件标识所表示的文件的第一索引节点包括:当确定所述文件存储内存区之中存储有所述文件标识所表示的文件,获得所述文件标识所表示的文件的第一索引节点。

结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式或第一方面的第七种可能的实施方式,在第一方面的第八种可能的实施方式中,所述方法还包括:

所述操作系统接收用于请求读取所述文件的文件内容的文件读取请求,其中,所述文件读取请求携带有读入内存地址空间和请求读取的所述文件中的第一文件内容的数据量,其中,所述读入内存地址空间为用户进程工作内存区之中的第一内存区的地址空间;

所述操作系统基于所述第一文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间;

所述操作系统基于所述读取物理地址空间,从所述文件存储内存区之中读取出所述文件的第一文件内容;

所述操作系统将所述第一文件内容写入所述第一内存区。

结合第一方面的第八种可能的实施方式,在第一方面的第九种可能的实施方式中,所述基于所述第一文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间,包括:

基于所述第一文件内容的数据量、第一文件内容偏移量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间,其中,所述第一文件内容偏移量从所述文件读取请求之中得到,或者,所述第一文件内容偏移量从所述文件对应的文件对象之中得到。

结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式或第一方面的第七种可能的实施方式或第一方面的第八种可能的实施方式或第一方面的第九种可能的实施方式,在第一方面的第十种可能的实施方式中,所述方法还包括:

所述操作系统接收请求向所述文件之中写入文件内容的文件写入请求,其中,所述文件写入请求携带有读出内存地址空间和请求写入所述文件之中的第二文件内容的数据量,其中,所述读出内存地址空间为所述进程工作内存区之中的第二内存区的地址空间;

所述操作系统基于所述第二文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间,其中,所述写入物理地址空间为所述文件存储内存区之中的第三内存区的物理地址空间;

所述操作系统将所述第二内存区之中缓存的所述第二文件内容写入到所述第三内存区之中。

结合第一方面的第十种可能的实施方式中,在第一方面的第十一种可能的实施方式中,所述基于所述第二文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间,包括:

基于所述第二文件内容的数据量、第二文件内容偏移量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间,其中,所述第二文件内容偏移量从所述文件写入请求之中得到,或者,所述第二文件内容偏移量从所述文件对应的文件对象之中得到。

结合第一方面的第十种可能的实施方式或第一方面的第十一种可能的实施方式中,在第一方面的第十二种可能的实施方式中,所述第三内存区的存储容量大于或者等于所述第二文件内容的数据量。

结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式或第一方面的第七种可能的实施方式或第一方面的第八种可能的实施方式或第一方面的第九种可能的实施方式或第一方面的第十种可能的实施方式或第一方面的第十一种可能的实施方式或第一方面的第十二种可能的实施方式,在第一方面的第十三种可能的实施方式中,

所述方法还包括:接收用于请求关闭所述文件的文件关闭请求;释放为所述文件分配的第一虚拟地址空间;释放所述内存页表中记录的所述第一虚实地址映射关系。

结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式或第一方面的第七种可能的实施方式或第一方面的第八种可能的实施方式或第一方面的第九种可能的实施方式或第一方面的第十种可能的实施方式或第一方面的第十一种可能的实施方式或第一方面的第十二种可能的实施方式或第一方面的第十三种可能的实施方式,在第一方面的第十四种可能的实施方式中,

所述方法还包括:所述操作系统当确定所述文件存储内存区之中未存储有所述文件标识所表示的文件,在所述文件存储内存区之中创建所述文件,为所述文件分配第二索引节点,其中,所述第二索引节点中记录有第二文件页表或者用于指向第二文件页表的指针,其中,所述第二文件页表用于指向所述文件存储内存区之中存储所述文件的内存区;

所述操作系统为所述文件分配第二虚拟地址空间;

所述操作系统利用内存页表记录第二虚实地址映射关系;

其中,所述第二虚实地址映射关系包括所述第二虚拟地址空间与所述第二物理地址空间之间的映射关系,其中,所述第二物理地址空间为所述文件存储内存区之中存储所述文件的内存区的物理地址空间,所述内存页表包括内核内存页表和/或用户进程内存页表。

结合第一方面的第十四种可能的实施方式,在第一方面的第十五种可能的实施方式中,所述第二文件页表的级数与所述文件的文件类型之间具有对应关系。

结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式或第一方面的第七种可能的实施方式或第一方面的第八种可能的实施方式或第一方面的第九种可能的实施方式或第一方面的第十种可能的实施方式或第一方面的第十一种可能的实施方式或第一方面的第十三种可能的实施方式或第一方面的第十四种可能的实施方式或第一方面的第十五种可能的实施方式,在第一方面的第十六种可能的实施方式中,所述文件存储内存区包括非易失性内存区和/或易失性内存区。

本发明第二方面提供一种访问文件的装置,可包括:

接收单元,用于接收携带文件标识的文件打开请求;

获取单元,用于获得所述文件标识所表示的文件的第一索引节点,所述文件存储于文件存储内存区之中;基于所述第一索引节点得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间;

分配单元,用于为所述文件分配第一虚拟地址空间;

映射单元,用于利用内存页表记录第一虚实地址映射关系;

其中,所述第一虚实地址映射关系包括所述第一虚拟地址空间与所述第一物理地址空间之间的映射关系,其中,所述内存页表包括内核内存页表和/或用户进程内存页表。

结合第二方面,在第二方面的第一种可能的实施方式中,

在所述基于所述第一索引节点得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间的方面,所述获取单元具体用于,基于所述第一索引节点中记录的第一文件页表或用于指向第一文件页表的指针,得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间,其中,所述第一文件页表用于指向所述文件存储内存区之中存储所述文件的内存区,所述的第一物理地址空间为所述文件存储内存区之中存储所述文件的内存区的物理地址空间,所述第一文件页表为单级或多级文件页表。

结合第二方面的第一种可能的实施方式,在第二方面的第二种可能的实施方式中,所述映射单元具体用于:在内存页表中增加用于记录所述第一虚实地址映射关系的表项,所述表项包含所述第一文件页表或用于指向所述第一文件页表的指针。

结合第二方面的第二种可能的实施方式,在第二方面的第三种可能的实施方式中,所述内存页表的总级数为Y,所述第一文件页表的总级数为X,若所述表项包含所述第一文件页表,则所述表项为所述内存页表中的第Y-X+1级内存页表中的表项,若所述表项包含用于指向所述第一文件页表的指针,则所述表项为所述内存页表中的第Y-X级内存页表中的表项,所述X为正整数,所述Y为大于所述X的正整数。

结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式,在第二方面的第四种可能的实施方式中,所述访问文件的装置还包括:

记录单元,用于在所述第一索引节点中记录所述第一虚拟地址空间和/或所述第一虚拟地址空间的起始地址,和/或,在所述文件对应的文件对象之中记录所述第一虚拟地址空间和/或所述第一虚拟地址空间的起始地址。

结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式,在第二方面的第五种可能的实施方式中,所述第一虚拟地址空间为连续的或者非连续的虚拟地址空间。

结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式,在第二方面的第六种可能的实施方式中,所述第一虚拟地址空间处于内核虚拟地址空间或者用户进程虚拟地址空间。

结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式或第二方面的第六种可能的实施方式,在第二方面的第七种可能的实施方式中,

所述获取单元具体用于:当确定所述文件存储内存区之中存储有所述文件标识所表示的文件,获得所述文件标识所表示的文件的第一索引节点。

结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式或第二方面的第六种可能的实施方式或第二方面的第七种可能的实施方式,在第二方面的第八种可能的实施方式中,所述接收单元还用于,接收用于请求读取所述文件的文件内容的文件读取请求,其中,所述文件读取请求携带有读入内存地址空间和请求读取的所述文件中的第一文件内容的数据量,其中,所述读入内存地址空间为用户进程工作内存区之中的第一内存区的地址空间;

所述访问文件的装置还包括:第二映射单元,用于基于所述第一文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间;

第一读写单元,用于基于所述读取物理地址空间,从所述文件存储内存区之中读取出所述文件的第一文件内容;将所述第一文件内容写入所述第一内存区。

结合第二方面的第八种可能的实施方式,在第二方面的第九种可能的实施方式中,在所述基于所述第一文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间的方面,第二映射单元具体用于,基于所述第一文件内容的数据量、第一文件内容偏移量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间,其中,所述第一文件内容偏移量从所述文件读取请求之中得到,或者,所述第一文件内容偏移量从所述文件对应的文件对象之中得到。

结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式或第二方面的第六种可能的实施方式或第二方面的第七种可能的实施方式或第二方面的第八种可能的实施方式或第二方面的第九种可能的实施方式,在第二方面的第十种可能的实施方式中,所述接收单元还用于,接收请求向所述文件之中写入文件内容的文件写入请求,其中,所述文件写入请求携带有读出内存地址空间和请求写入所述文件之中的第二文件内容的数据量,其中,所述读出内存地址空间为所述进程工作内存区之中的第二内存区的地址空间;

所述访问文件的装置还包括:第三映射单元,用于基于所述第二文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间,其中,所述写入物理地址空间为所述文件存储内存区之中的第三内存区的物理地址空间;

第二读写单元,用于将所述第二内存区之中缓存的所述第二文件内容写入到所述第三内存区之中。

结合第二方面的第十种可能的实施方式中,在第二方面的第十一种可能的实施方式中,在所述基于所述第二文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间的方面,所述第三映射单元具体用于基于所述第二文件内容的数据量、第二文件内容偏移量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间,其中,所述第二文件内容偏移量从所述文件写入请求之中得到,或者,所述第二文件内容偏移量从所述文件对应的文件对象之中得到。

结合第二方面的第十种可能的实施方式或第二方面的第十一种可能的实施方式中,在第二方面的第十二种可能的实施方式中,所述第三内存区的存储容量大于或者等于所述第二文件内容的数据量。

结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式或第二方面的第六种可能的实施方式或第二方面的第七种可能的实施方式或第二方面的第八种可能的实施方式或第二方面的第九种可能的实施方式或第二方面的第十种可能的实施方式或第二方面的第十一种可能的实施方式或第二方面的第十二种可能的实施方式,在第二方面的第十三种可能的实施方式中,

所述接收单元还用于,接收用于请求关闭所述文件的文件关闭请求;

所述访问文件的装置还包括:释放单元,用于释放为所述文件分配的第一虚拟地址空间;释放所述内存页表中记录的所述第一虚实地址映射关系。

结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式或第二方面的第六种可能的实施方式或第二方面的第七种可能的实施方式或第二方面的第八种可能的实施方式或第二方面的第九种可能的实施方式或第二方面的第十种可能的实施方式或第二方面的第十一种可能的实施方式或第二方面的第十二种可能的实施方式或第二方面的第十三种可能的实施方式,在第二方面的第十四种可能的实施方式中,

所述访问文件的装置还包括:

创建单元,用于当确定所述文件存储内存区之中未存储有所述文件标识所表示的文件,在所述文件存储内存区之中创建所述文件,为所述文件分配第二索引节点,其中,所述第二索引节点中记录有第二文件页表或者用于指向第二文件页表的指针,其中,所述第二文件页表用于指向所述文件存储内存区之中存储所述文件的内存区;

所述分配单元还用于,为所述文件分配第二虚拟地址空间;

所述映射单元还用于,利用内存页表记录第二虚实地址映射关系;

其中,所述第二虚实地址映射关系包括所述第二虚拟地址空间与所述第二物理地址空间之间的映射关系,其中,所述第二物理地址空间为所述文件存储内存区之中存储所述文件的内存区的物理地址空间,所述内存页表包括内核内存页表和/或用户进程内存页表。

结合第二方面的第十四种可能的实施方式,在第二方面的第十五种可能的实施方式中,所述第二文件页表的级数与所述文件的文件类型之间具有对应关系。

结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式或第二方面的第六种可能的实施方式或第二方面的第七种可能的实施方式或第二方面的第八种可能的实施方式或第二方面的第九种可能的实施方式或第二方面的第十种可能的实施方式或第二方面的第十一种可能的实施方式或第二方面的第十三种可能的实施方式或第二方面的第十四种可能的实施方式或第二方面的第十五种可能的实施方式,在第二方面的第十六种可能的实施方式中,所述文件存储内存区包括非易失性内存区和/或易失性内存区。

本发明实施例第三方面提供一种计算节点,可包括:

至少一个总线、与所述总线相连的至少一个处理器以及与所述总线相连的至少一个存储器;

其中,所述处理器通过所述总线调用所述存储器中存储的代码以用于,

接收携带文件标识的文件打开请求;获得所述文件标识所表示的文件的第一索引节点,其中,所述文件存储于文件存储内存区之中;基于所述第一索引节点得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间;为所述文件分配第一虚拟地址空间;利用内存页表记录第一虚实地址映射关系;其中,所述第一虚实地址映射关系包括所述第一虚拟地址空间与所述第一物理地址空间之间的映射关系,其中,所述内存页表包括内核内存页表和/或用户进程内存页表。

结合第三方面,在第三方面的第一种可能的实施方式中,

在所述基于所述第一索引节点得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间的方面,所述处理器通过所述总线调用所述存储器中存储的代码以具体用于,基于所述第一索引节点中记录的第一文件页表或用于指向第一文件页表的指针,得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间,其中,所述第一文件页表用于指向所述文件存储内存区之中存储所述文件的内存区,所述的第一物理地址空间为所述文件存储内存区之中存储所述文件的内存区的物理地址空间,所述第一文件页表为单级或多级文件页表。

结合第三方面的第一种可能的实施方式,在第三方面的第二种可能的实施方式中,在所述利用内存页表记录第一虚实地址映射关系的方面,所述处理器通过所述总线调用所述存储器中存储的代码以具体用于,在内存页表中增加用于记录所述第一虚实地址映射关系的表项,所述表项包含所述第一文件页表或用于指向所述第一文件页表的指针。

结合第三方面的第二种可能的实施方式,在第三方面的第三种可能的实施方式中,所述内存页表的总级数为Y,所述第一文件页表的总级数为X,若所述表项包含所述第一文件页表,则所述表项为所述内存页表中的第Y-X+1级内存页表中的表项,若所述表项包含用于指向所述第一文件页表的指针,则所述表项为所述内存页表中的第Y-X级内存页表中的表项,所述X为正整数,所述Y为大于所述X的正整数。

结合第三方面或第三方面的第一种可能的实施方式或第三方面的第二种可能的实施方式或第三方面的第三种可能的实施方式,在第三方面的第四种可能的实施方式中,所述处理器通过所述总线调用所述存储器中存储的代码以还用于,在所述第一索引节点中记录所述第一虚拟地址空间和/或所述第一虚拟地址空间的起始地址,和/或,在所述文件对应的文件对象之中记录所述第一虚拟地址空间和/或所述第一虚拟地址空间的起始地址。

结合第三方面或第三方面的第一种可能的实施方式或第三方面的第二种可能的实施方式或第三方面的第三种可能的实施方式或第三方面的第四种可能的实施方式,在第三方面的第五种可能的实施方式中,所述第一虚拟地址空间为连续的或者非连续的虚拟地址空间。

结合第三方面或第三方面的第一种可能的实施方式或第三方面的第二种可能的实施方式或第三方面的第三种可能的实施方式或第三方面的第四种可能的实施方式或第三方面的第五种可能的实施方式,在第三方面的第六种可能的实施方式中,所述第一虚拟地址空间处于内核虚拟地址空间或者用户进程虚拟地址空间。

结合第三方面或第三方面的第一种可能的实施方式或第三方面的第二种可能的实施方式或第三方面的第三种可能的实施方式或第三方面的第四种可能的实施方式或第三方面的第五种可能的实施方式或第三方面的第六种可能的实施方式,在第三方面的第七种可能的实施方式中,在所述获得所述文件标识所表示的文件的第一索引节点的方面,所述处理器通过所述总线调用所述存储器中存储的代码以具体用于,当确定所述文件存储内存区之中存储有所述文件标识所表示的文件,获得所述文件标识所表示的文件的第一索引节点。

结合第三方面或第三方面的第一种可能的实施方式或第三方面的第二种可能的实施方式或第三方面的第三种可能的实施方式或第三方面的第四种可能的实施方式或第三方面的第五种可能的实施方式或第三方面的第六种可能的实施方式或第三方面的第七种可能的实施方式,在第三方面的第八种可能的实施方式中,所述处理器通过所述总线调用所述存储器中存储的代码以还用于,接收用于请求读取所述文件的文件内容的文件读取请求,其中,所述文件读取请求携带有读入内存地址空间和请求读取的所述文件中的第一文件内容的数据量,其中,所述读入内存地址空间为用户进程工作内存区之中的第一内存区的地址空间;基于所述第一文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间;基于所述读取物理地址空间,从所述文件存储内存区之中读取出所述文件的第一文件内容;将所述第一文件内容写入所述第一内存区。

结合第三方面的第八种可能的实施方式,在第三方面的第九种可能的实施方式中,在所述基于所述第一文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间的方面,所述处理器通过所述总线调用所述存储器中存储的代码以具体用于,

基于所述第一文件内容的数据量、第一文件内容偏移量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间,其中,所述第一文件内容偏移量从所述文件读取请求之中得到,或者,所述第一文件内容偏移量从所述文件对应的文件对象之中得到。

结合第三方面或第三方面的第一种可能的实施方式或第三方面的第二种可能的实施方式或第三方面的第三种可能的实施方式或第三方面的第四种可能的实施方式或第三方面的第五种可能的实施方式或第三方面的第六种可能的实施方式或第三方面的第七种可能的实施方式或第三方面的第八种可能的实施方式或第三方面的第九种可能的实施方式,在第三方面的第十种可能的实施方式中,所述处理器通过所述总线调用所述存储器中存储的代码以还用于,接收请求向所述文件之中写入文件内容的文件写入请求,其中,所述文件写入请求携带有读出内存地址空间和请求写入所述文件之中的第二文件内容的数据量,其中,所述读出内存地址空间为所述进程工作内存区之中的第二内存区的地址空间;

基于所述第二文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间,其中,所述写入物理地址空间为所述文件存储内存区之中的第三内存区的物理地址空间;

将所述第二内存区之中缓存的所述第二文件内容写入到所述第三内存区之中。

结合第三方面的第十种可能的实施方式中,在第三方面的第十一种可能的实施方式中,

在所述基于所述第二文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间的方面,所述处理器通过所述总线调用所述存储器中存储的代码以具体用于,

基于所述第二文件内容的数据量、第二文件内容偏移量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间,其中,所述第二文件内容偏移量从所述文件写入请求之中得到,或者,所述第二文件内容偏移量从所述文件对应的文件对象之中得到。

结合第三方面的第十种可能的实施方式或第三方面的第十一种可能的实施方式中,在第三方面的第十二种可能的实施方式中,所述第三内存区的存储容量大于或者等于所述第二文件内容的数据量。

结合第三方面或第三方面的第一种可能的实施方式或第三方面的第二种可能的实施方式或第三方面的第三种可能的实施方式或第三方面的第四种可能的实施方式或第三方面的第五种可能的实施方式或第三方面的第六种可能的实施方式或第三方面的第七种可能的实施方式或第三方面的第八种可能的实施方式或第三方面的第九种可能的实施方式或第三方面的第十种可能的实施方式或第三方面的第十一种可能的实施方式或第三方面的第十二种可能的实施方式,在第三方面的第十三种可能的实施方式中,所述处理器通过所述总线调用所述存储器中存储的代码以还用于,接收用于请求关闭所述文件的文件关闭请求;释放为所述文件分配的第一虚拟地址空间;释放所述内存页表中记录的所述第一虚实地址映射关系。

结合第三方面或第三方面的第一种可能的实施方式或第三方面的第二种可能的实施方式或第三方面的第三种可能的实施方式或第三方面的第四种可能的实施方式或第三方面的第五种可能的实施方式或第三方面的第六种可能的实施方式或第三方面的第七种可能的实施方式或第三方面的第八种可能的实施方式或第三方面的第九种可能的实施方式或第三方面的第十种可能的实施方式或第三方面的第十一种可能的实施方式或第三方面的第十二种可能的实施方式或第三方面的第十三种可能的实施方式,在第三方面的第十四种可能的实施方式中,所述处理器通过所述总线调用所述存储器中存储的代码以还用于,当确定所述文件存储内存区之中未存储有所述文件标识所表示的文件,在所述文件存储内存区之中创建所述文件,为所述文件分配第二索引节点,其中,所述第二索引节点中记录有第二文件页表或者用于指向第二文件页表的指针,其中,所述第二文件页表用于指向所述文件存储内存区之中存储所述文件的内存区;

为所述文件分配第二虚拟地址空间;

利用内存页表记录第二虚实地址映射关系;

其中,所述第二虚实地址映射关系包括所述第二虚拟地址空间与所述第二物理地址空间之间的映射关系,其中,所述第二物理地址空间为所述文件存储内存区之中存储所述文件的内存区的物理地址空间,所述内存页表包括内核内存页表和/或用户进程内存页表。

结合第三方面的第十四种可能的实施方式,在第三方面的第十五种可能的实施方式中,所述第二文件页表的级数与所述文件的文件类型之间具有对应关系。

结合第三方面或第三方面的第一种可能的实施方式或第三方面的第二种可能的实施方式或第三方面的第三种可能的实施方式或第三方面的第四种可能的实施方式或第三方面的第五种可能的实施方式或第三方面的第六种可能的实施方式或第三方面的第七种可能的实施方式或第三方面的第八种可能的实施方式或第三方面的第九种可能的实施方式或第三方面的第十种可能的实施方式或第三方面的第十一种可能的实施方式或第三方面的第十三种可能的实施方式或第三方面的第十四种可能的实施方式或第三方面的第十五种可能的实施方式,在第三方面的第十六种可能的实施方式中,所述文件存储内存区包括非易失性内存区和/或易失性内存区。

本发明实施例第四方面提供一种访问文件的方法,包括:

接收携带文件标识的文件打开请求;

获得所述文件标识所表示的文件的第一索引节点,其中,所述文件存储于所述文件存储内存区之中;基于所述第一索引节点得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间;

为所述文件分配第一虚拟地址空间;

利用所述内存页表记录第一虚实地址映射关系;

其中,所述第一虚实地址映射关系包括所述第一虚拟地址空间与所述第一物理地址空间之间的映射关系,其中,所述内存页表包括内核内存页表和/或用户进程内存页表。

结合第四方面,在第四方面的第一种可能的实施方式中,

所述基于所述第一索引节点得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间,包括:基于所述第一索引节点中记录的第一文件页表或用于指向第一文件页表的指针,得到所述文件存储内存区之中存储所述文件的内存区的第一物理地址空间,其中,所述第一文件页表用于指向所述文件存储内存区之中存储所述文件的内存区,所述的第一物理地址空间为所述文件存储内存区之中存储所述文件的内存区的物理地址空间,所述第一文件页表为单级或多级文件页表。

结合第四方面的第一种可能的实施方式,在第四方面的第二种可能的实施方式中,所述利用内存页表记录第一虚实地址映射关系,包括:在内存页表中增加用于记录所述第一虚实地址映射关系的表项,所述表项包含所述第一文件页表或用于指向所述第一文件页表的指针。

结合第四方面的第二种可能的实施方式,在第四方面的第三种可能的实施方式中,所述内存页表的总级数为Y,所述第一文件页表的总级数为X,若所述表项包含所述第一文件页表,则所述表项为所述内存页表中的第Y-X+1级内存页表中的表项,若所述表项包含用于指向所述第一文件页表的指针,则所述表项为所述内存页表中的第Y-X级内存页表中的表项,所述X为正整数,所述Y为大于所述X的正整数。

结合第四方面或第四方面的第一种可能的实施方式或第四方面的第二种可能的实施方式或第四方面的第三种可能的实施方式,在第四方面的第四种可能的实施方式中,所述方法还包括:

在所述第一索引节点中记录所述第一虚拟地址空间和/或所述第一虚拟地址空间的起始地址,和/或,在所述文件对应的文件对象之中记录所述第一虚拟地址空间和/或所述第一虚拟地址空间的起始地址。

结合第四方面或第四方面的第一种可能的实施方式或第四方面的第二种可能的实施方式或第四方面的第三种可能的实施方式或第四方面的第四种可能的实施方式,在第四方面的第五种可能的实施方式中,所述第一虚拟地址空间为连续的或者非连续的虚拟地址空间。

结合第四方面或第四方面的第一种可能的实施方式或第四方面的第二种可能的实施方式或第四方面的第三种可能的实施方式或第四方面的第四种可能的实施方式或第四方面的第五种可能的实施方式,在第四方面的第六种可能的实施方式中,所述第一虚拟地址空间处于内核虚拟地址空间或者用户进程虚拟地址空间。

结合第四方面或第四方面的第一种可能的实施方式或第四方面的第二种可能的实施方式或第四方面的第三种可能的实施方式或第四方面的第四种可能的实施方式或第四方面的第五种可能的实施方式或第四方面的第六种可能的实施方式,在第四方面的第七种可能的实施方式中,

所述获得所述文件标识所表示的文件的第一索引节点包括:当确定所述文件存储内存区之中存储有所述文件标识所表示的文件,获得所述文件标识所表示的文件的第一索引节点。

结合第四方面或第四方面的第一种可能的实施方式或第四方面的第二种可能的实施方式或第四方面的第三种可能的实施方式或第四方面的第四种可能的实施方式或第四方面的第五种可能的实施方式或第四方面的第六种可能的实施方式或第四方面的第七种可能的实施方式,在第四方面的第八种可能的实施方式中,所述方法还包括:

接收用于请求读取所述文件的文件内容的文件读取请求,其中,所述文件读取请求携带有读入内存地址空间和请求读取的所述文件中的第一文件内容的数据量,其中,所述读入内存地址空间为用户进程工作内存区之中的第一内存区的地址空间;

基于所述第一文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间;

基于所述读取物理地址空间,从所述文件存储内存区之中读取出所述文件的第一文件内容;

将所述第一文件内容写入所述第一内存区。

结合第四方面的第八种可能的实施方式,在第四方面的第九种可能的实施方式中,所述基于所述第一文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间,包括:

基于所述第一文件内容的数据量、第一文件内容偏移量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到从所述文件存储内存区读取所述第一文件内容的读取物理地址空间,其中,所述第一文件内容偏移量从所述文件读取请求之中得到,或者,所述第一文件内容偏移量从所述文件对应的文件对象之中得到。

结合第四方面或第四方面的第一种可能的实施方式或第四方面的第二种可能的实施方式或第四方面的第三种可能的实施方式或第四方面的第四种可能的实施方式或第四方面的第五种可能的实施方式或第四方面的第六种可能的实施方式或第四方面的第七种可能的实施方式或第四方面的第八种可能的实施方式或第四方面的第九种可能的实施方式,在第四方面的第十种可能的实施方式中,所述方法还包括:

接收请求向所述文件之中写入文件内容的文件写入请求,其中,所述文件写入请求携带有读出内存地址空间和请求写入所述文件之中的第二文件内容的数据量,其中,所述读出内存地址空间为所述进程工作内存区之中的第二内存区的地址空间;

基于所述第二文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间,其中,所述写入物理地址空间为所述文件存储内存区之中的第三内存区的物理地址空间;

将所述第二内存区之中缓存的所述第二文件内容写入到所述第三内存区之中。

结合第四方面的第十种可能的实施方式中,在第四方面的第十一种可能的实施方式中,所述基于所述第二文件内容的数据量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间,包括:

基于所述第二文件内容的数据量、第二文件内容偏移量、所述第一虚拟地址空间和所述内存页表记录的所述第一虚实地址映射关系,得到向所述文件存储内存区写入所述第二文件内容的写入物理地址空间,其中,所述第二文件内容偏移量从所述文件写入请求之中得到,或者,所述第二文件内容偏移量从所述文件对应的文件对象之中得到。

结合第四方面的第十种可能的实施方式或第四方面的第十一种可能的实施方式中,在第四方面的第十二种可能的实施方式中,所述第三内存区的存储容量大于或者等于所述第二文件内容的数据量。

结合第四方面或第四方面的第一种可能的实施方式或第四方面的第二种可能的实施方式或第四方面的第三种可能的实施方式或第四方面的第四种可能的实施方式或第四方面的第五种可能的实施方式或第四方面的第六种可能的实施方式或第四方面的第七种可能的实施方式或第四方面的第八种可能的实施方式或第四方面的第九种可能的实施方式或第四方面的第十种可能的实施方式或第四方面的第十一种可能的实施方式或第四方面的第十二种可能的实施方式,在第四方面的第十三种可能的实施方式中,

所述方法还包括:接收用于请求关闭所述文件的文件关闭请求;释放为所述文件分配的第一虚拟地址空间;释放所述内存页表中记录的所述第一虚实地址映射关系。

结合第四方面或第四方面的第一种可能的实施方式或第四方面的第二种可能的实施方式或第四方面的第三种可能的实施方式或第四方面的第四种可能的实施方式或第四方面的第五种可能的实施方式或第四方面的第六种可能的实施方式或第四方面的第七种可能的实施方式或第四方面的第八种可能的实施方式或第四方面的第九种可能的实施方式或第四方面的第十种可能的实施方式或第四方面的第十一种可能的实施方式或第四方面的第十二种可能的实施方式或第四方面的第十三种可能的实施方式,在第四方面的第十四种可能的实施方式中,

所述方法还包括:当确定所述文件存储内存区之中未存储有所述文件标识所表示的文件,在所述文件存储内存区之中创建所述文件,为所述文件分配第二索引节点,其中,所述第二索引节点中记录有第二文件页表或者用于指向第二文件页表的指针,其中,所述第二文件页表用于指向所述文件存储内存区之中存储所述文件的内存区;

为所述文件分配第二虚拟地址空间;

利用内存页表记录第二虚实地址映射关系;

其中,所述第二虚实地址映射关系包括所述第二虚拟地址空间与所述第二物理地址空间之间的映射关系,其中,所述第二物理地址空间为所述文件存储内存区之中存储所述文件的内存区的物理地址空间,所述内存页表包括内核内存页表和/或用户进程内存页表。

结合第四方面的第十四种可能的实施方式,在第四方面的第十五种可能的实施方式中,所述第二文件页表的级数与所述文件的文件类型之间具有对应关系。

结合第四方面或第四方面的第一种可能的实施方式或第四方面的第二种可能的实施方式或第四方面的第三种可能的实施方式或第四方面的第四种可能的实施方式或第四方面的第五种可能的实施方式或第四方面的第六种可能的实施方式或第四方面的第七种可能的实施方式或第四方面的第八种可能的实施方式或第四方面的第九种可能的实施方式或第四方面的第十种可能的实施方式或第四方面的第十一种可能的实施方式或第四方面的第十三种可能的实施方式或第四方面的第十四种可能的实施方式或第四方面的第十五种可能的实施方式,在第四方面的第十六种可能的实施方式中,所述文件存储内存区包括非易失性内存区和/或易失性内存区。

本发明第五方面提供一种计算机存储介质,其特征在于,

所述计算机存储介质存储有程序,所述程序执行时包括如上述方法实施例提供的任一种方法的步骤。

可以看出,本发明一些实施例的技术方案中,操作系统在接收携带文件标识的文件打开请求后;获得上述文件标识所表示的文件的第一索引节点,并基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间;为上述文件分配第一虚拟地址空间;利用内存页表记录第一虚实地址映射关系;其中,上述第一虚实地址映射关系为上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,上述内存页表包括内核内存页表和/或用户进程内存页表。由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见上述文件访问方案适用于在文件系统常驻内存场景下进行文件高性能访问。且由于在请求打开文件时才为文件分配虚拟地址空间,这样有利于减少系统虚拟地址空间的无效占用和地址冲突可能性,有利于提高系统虚拟地址空间的利用效率。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种访问文件的方法的流程示意图;

图2-a是本发明实施例提供的另一种访问文件的方法的流程示意图;

图2-b是本发明实施例提供的一种计算节点的内存的示意图;

图2-c是本发明实施例提供的另一种计算节点的内存的示意图;

图2-d是本发明实施例提供的另一种文件存储内存区的示意图;

图2-e是本发明实施例提供的一种文件页表和内存页关系的示意图;

图3是本发明实施例提供的另一种访问文件的方法的流程示意图;

图4是本发明实施例提供的另一种访问文件的方法的流程示意图;

图5是本发明实施例提供的另一种访问文件的方法的流程示意图;

图6是本发明实施例提供的另一种访问文件的方法的流程示意图;

图7是本发明实施例提供的另一种访问文件的方法的流程示意图;

图8是本发明实施例提供的另一种访问文件的方法的流程示意图;

图9-a是本发明实施例提供的一种访问文件的装置的示意图;

图9-b是本发明实施例提供的另一种访问文件的装置的示意图;

图9-c是本发明实施例提供的另一种访问文件的装置的示意图;

图9-d是本发明实施例提供的另一种访问文件的装置的示意图;

图9-e是本发明实施例提供的另一种访问文件的装置的示意图;

图10是本发明实施例提供的一种计算节点的示意图;

图11是本发明实施例提供的另一种计算节点的示意图。

具体实施方式

本发明实施例提供一种访问文件的方法和相关设备,以期适用于在文件系统常驻内存场景下进行文件访问。

下面通过具体实施例,分别进行详细的说明。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等是用于区别不同的对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

本发明一种访问文件的方法的一个实施例,其中,上述访问文件的方法应用于计算节点中,其中,上述计算节点可包括内存,上述内存包括:文件存储内存区和进程工作内存区,上述进程工作内存区存储有内核内存页表,上述进程工作内存区之中运行有操作系统,上述访问文件的方法可包括:操作系统接收携带文件标识的文件打开请求;操作系统获得上述文件标识所表示的文件的第一索引节点,其中,上述文件存储于文件存储内存区之中;操作系统基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间;操作系统为上述文件分配第一虚拟地址空间;操作系统利用上述内存页表记录第一虚实地址映射关系;其中,上述第一虚实地址映射关系包括上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。

举例来说,上述进程工作内存区可包括内核进程工作内存区和用户进程工作内存区,其中,内核内存页表可存储于内核进程工作内存区,用户进程内存页表可存储于上述用户进程工作内存区。例如上述内核进程工作内存区之中运行有操作系统。

请参见图1,图1为本发明的一个实施例提供的一种访问文件的方法的流程示意图。如图1所示,本发明的一个实施例提供的一种访问文件的方法可包括以下内容:

101、操作系统接收携带文件标识的文件打开请求。

其中,上述接收携带文件标识的文件打开请求可包括:接收来自用户进程的携带文件标识的文件打开请求。

在本发明一些实施例中,上述文件打开请求可以携带文件存储路径(即请求打开的文件的存储路径),其中,上述文件标识可包含在上述文件存储路径之中,当然,上述文件打开请求中也可能携带文件标识并且可不携带文件存储路径。进一步的,上述文件打开请求中还可携带文件类型标志位,该文件类型标志位可指示出上述文件标识所表示的文件的文件类型(文件类型可能是目录文件或数据文件)。

102、操作系统获得上述文件标识所表示的文件的第一索引节点,基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间。其中,上述文件存储于文件存储内存区之中。

在本发明的一些实施例中,上述获得上述文件标识所表示的文件的第一索引节点可以包括:当确定上述文件存储内存区之中存储有上述文件标识所表示的文件,获得上述文件标识所表示的文件的第一索引节点。当然,也可以默认上述文件存储内存区之中存储有上述文件标识所表示的文件,而在这种场景下则可以省略执行确定上述文件存储内存区之中是否存储有上述文件标识所表示的文件的步骤。

在本发明的一些实施例中,内存可以包括:进程工作内存区(其中,进程工作内存区可以包括用户进程工作内存区和内核进程工作内存区)和文件存储内存区。其中,进程工作内存区是指,用于存放进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,上述数据结构和变量可包括如下信息的至少一种:进程运行时的堆、栈、内存映射区、进程所对应的程序的变量、字符和数组等数据。

举例来说,用户进程工作内存区可以是指,用于存放用户进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,用户进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:用户进程运行时的堆、栈、内存映射区、用户进程所对应的程序的变量、字符和数组等数据。

又举例来说,内核进程工作内存区可以是指,用于存放内核进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,内核进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:内核进程运行时的堆、栈、内存映射区、内核进程所对应的程序的变量、字符和数组等数据。

其中,文件存储内存区可指用于存储文件系统的物理内存区域,文件存储内存区中可存放文件系统本身的各种信息,例如,文件存储内存区中可存放文件系统的索引节点和文件,还可进一步存放文件系统的超级块(若存在)等等信息。

在本发明一些实施例中,上述文件存储内存区可包括非易失性内存区和/或易失性内存区(即,文件存储内存区的存储介质包括非易失性存储介质和/或易失性存储介质)。其中,进程工作内存区(如内核进程工作内存区、用户进程工作内存区)可包括非易失性内存区和/或易失性内存区(即进程工作内存区的存储介质包括非易失性存储介质和/或易失性存储介质)。其中,进程工作内存区(如内核进程工作内存区、用户进程工作内存区)和文件存储内存区互不重叠。

其中,文件的索引节点中可包含能够得出文件存储内存区之中存储该文件的内存区的物理地址空间的信息。例如,上述文件的第一索引节点中可记录第一文件页表(FPT,File Page Table)或用于指向第一文件页表的指针,上述第一文件页表用于指向上述文件存储内存区之中存储上述文件的内存区,上述第一文件页表为单级或多级文件页表,其中,第一物理地址空间为上述文件存储内存区之中存储上述文件的内存区的物理地址空间。当然,第一索引节点也可能直接存储上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间或第一物理地址空间的起始地址等。进一步的,上述文件的第一索引节点中还可包含该文件的元数据等信息。

103、操作系统为上述文件分配第一虚拟地址空间。

在本发明的一些实施例中,可以为上述文件分配预设大小的第一虚拟地址空间(例如第一虚拟地址空间的大小可小于或等于系统最大虚拟地址空间除以系统支持同时打开的最多文件个数)。或也可根据上述文件的文件类型,为上述文件分配与该文件类型对应大小的第一虚拟地址空间。例如,目录文件对应的虚拟地址空间和数据文件对应的虚拟地址空间的大小可不相等,例如目录文件对应的虚拟地址空间大小可小于数据文件对应的虚拟地址空间的大小,例如目录文件对应的虚拟地址空间大小为1MB、2MB、10MB或30MB等,数据文件对应的虚拟地址空间大小为100MB、500MB、1GB、10GB、100GB或者2TB等等。

104、操作系统利用内存页表记录第一虚实地址映射关系。

其中,上述第一虚实地址映射关系包括上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。

由上可见,操作系统在接收携带文件标识的文件打开请求之后;获得上述文件标识所表示的文件的第一索引节点,并基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间;为上述文件分配第一虚拟地址空间;利用内存页表记录第一虚实地址映射关系;其中,上述第一虚实地址映射关系为上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,上述内存页表包括内核内存页表和/或用户进程内存页表。由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见上述文件访问方案适用于在文件系统常驻内存场景下进行文件高性能访问。并且,由于是在请求打开文件时才为文件分配虚拟地址空间,这样有利于减少系统虚拟地址空间的无效占用和地址冲突可能性,有利于提高系统虚拟地址空间的利用效率。

在本发明的一些实施例中,若接收到来自用户进程的携带文件标识的文件打开请求,则可创建与该文件和该用户进程对应的文件对象,并可在利用内存页表记录第一虚实地址映射关系之后,向该用户进程反馈上述文件的文件描述符等。

在本发明的一些实施例中,上述利用内存页表记录第一虚实地址映射关系可以包括:在内存页表中增加用于记录上述第一虚实地址映射关系的表项(可能为一个或多个表项),其中,上述表项包含上述第一文件页表或用于指向上述第一文件页表的指针。例如,上述内存页表的总级数为Y,上述第一文件页表的总级数为X,若上述表项包含上述第一文件页表,则上述表项可为上述内存页表中的第Y-X+1级内存页表之中的表项,若上述表项包含用于指向上述第一文件页表的指针,则上述表项可为上述内存页表中的第Y-X级内存页表之中的表项,其中,上述X为正整数,上述Y为大于上述X的正整数。其中,在一些特殊应用场景下,在内存页表中增加的用于记录上述第一虚实地址映射关系的表项(可能为一个或多个表项)也可以是内存页表中的任意一级内存页表之中的表项。

在本发明另一些实施例中,上述利用内存页表记录第一虚实地址映射关系可包括:在内存页表中增加用于记录上述第一虚实地址映射关系的表项(可能为一个或多个表项),其中,该表项包含第一物理地址空间或该表项可包含第一物理地址空间的起始地址和/或结束地址,例如该表项可为最低一级内存页表之中的表项或可为任意一级内存页表之中的表项。

在本发明的一些实施例中,还可进一步在上述第一索引节点中记录上述第一虚拟地址空间、上述第一虚拟地址空间的起始地址和上述第一虚拟地址空间的结束地址之中的至少一个,和/或,还可在上述文件对应的文件对象之中记录上述第一虚拟地址空间、上述第一虚拟地址空间的起始地址和上述第一虚拟地址空间的结束地址之中的至少一个。

在本发明的一些实施例中,上述第一虚拟地址空间为连续的或者非连续的虚拟地址空间。在本发明一些实施例中,上述第一虚拟地址空间处于内核虚拟地址空间或者上述第一虚拟地址空间处于用户进程虚拟地址空间。

其中,当文件被打开之后,可以对文件进行读/写等操作。

举例来说,访问文件的方法还可进一步包括:操作系统接收用于请求读取上述文件的文件内容的文件读取请求,其中,上述文件读取请求携带有读入内存地址空间和请求读取的上述文件中的第一文件内容的数据量(此外,上述文件读取请求还可以携带上述文件的文件描述符),其中,上述读入内存地址空间为用户进程工作内存区之中的第一内存区的地址空间;基于上述第一文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区中读取上述第一文件内容的读取物理地址空间;基于上述读取物理地址空间,从上述文件存储内存区之中读取出上述文件的第一文件内容;将上述第一文件内容写入上述第一内存区(基于上述读入内存地址空间将上述第一文件内容写入上述第一内存区)。

在本发明的一些实施例中,上述基于上述第一文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间,可包括:基于上述第一文件内容的数据量、第一文件内容偏移量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间,其中,上述第一文件内容偏移量从上述文件读取请求之中得到,或者,上述第一文件内容偏移量从上述文件对应的文件对象之中得到。

例如,可基于第一文件内容偏移量(其中,若未从上述文件读取请求从上述文件对应的文件对象之中得到第一文件内容偏移量,则可将默认文件内容偏移量作为第一文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到读取上述第一文件内容的起始读取虚拟地址;利用上述起始读取虚拟地址和第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的起始读取物理地址;基于上述起始读取物理地址和第一文件内容的数据量,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间。

又例如,可基于第一文件内容偏移量(其中,若未从上述文件读取请求从上述文件对应的文件对象之中得到第一文件内容偏移量,则可将默认文件内容偏移量作为第一文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到读取上述第一文件内容的起始读取虚拟地址;基于起始读取虚拟地址和第一文件内容的数据量,得到读取上述第一文件内容的读取虚拟地址空间;利用上述读取虚拟地址空间和第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间。

举例来说,访问文件的方法还可以进一步包括:接收请求向上述文件之中写入文件内容的文件写入请求,其中,上述文件写入请求携带有读出内存地址空间和请求写入上述文件之中的第二文件内容的数据量(此外,上述文件写入请求还可以携带上述文件的文件描述符),其中,上述读出内存地址空间为上述进程工作内存区之中的第二内存区的地址空间;基于上述第二文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间,其中,上述写入物理地址空间为上述文件存储内存区之中的第三内存区的物理地址空间;将上述第二内存区之中缓存的上述第二文件内容写入到上述第三内存区之中。

在本发明的一些实施例中,基于上述第二文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间,可包括:基于上述第二文件内容的数据量、第二文件内容偏移量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间,其中,上述第二文件内容偏移量从上述文件写入请求之中得到,或者,上述第二文件内容偏移量从上述文件对应的文件对象之中得到。

例如,可基于第二文件内容偏移量(其中,若未从上述文件写入请求从上述文件对应的文件对象之中得到第二文件内容偏移量,则可将默认文件内容偏移量作为第二文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到向上述文件写入上述第二文件内容的起始写入虚拟地址;利用上述起始写入虚拟地址和第一虚实地址映射关系,得到向从上述文件存储内存区的上述文件中写入上述第二文件内容的起始写入物理地址;基于上述起始写入物理地址和第二文件内容的数据量,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入物理地址空间。

又例如,可基于第二文件内容偏移量(其中,若未从上述文件写入请求从上述文件对应的文件对象之中得到第二文件内容偏移量,则可将默认文件内容偏移量作为第二文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到向上述文件中上述第二文件内容的起始写入虚拟地址;基于起始写入虚拟地址和第二文件内容的数据量,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入虚拟地址空间;利用上述写入虚拟地址空间和第一虚实地址映射关系,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入物理地址空间。

其中,上述第三内存区的存储容量可以大于或者等于上述第二文件内容的数据量。其中,第三内存区和上述第一物理地址空间对应的内存区具有交集或没有交集。可以理解的是,在通常情况下,若第三内存区和上述第一物理地址空间对应的内存区具有交集,则可以表示用第二文件内容替换了上述文件中原有的部分或者全部文件内容(若第三内存区和上述第一物理地址空间对应的内存区的交集小于第三内存区,表示为第二文件内容分配了新的内存区,即存储上述文件的内存区发生了变化,存储上述文件的内存区被扩容了)。若第三内存区和上述第一物理地址空间对应的内存区没有交集,则可以表示上述文件中新增了第二文件内容,第三内存区是为第二文件内容分配了新内存区,即存储上述文件的内存区发生了变化,存储上述文件的内存区被扩容了。

进一步的,若文件存储内存区中存储上述文件的内存区发生了变化,可更新第一文件页表,以使得更新后的第一文件页表指向文件存储内存区中当前存储上述文件的内存区。

当然,进一步的,可将上述内存页表中记录的上述第一虚实地址映射关系更新为第三虚实地址映射关系,上述第三虚实地址映射关系包括上述第一虚拟地址空间与上述第三物理地址空间之间的映射关系,上述第三物理地址空间为文件存储内存区中当前存储上述文件的内存区的物理地址空间。其中,若内存页表中记录的是指向第一文件页表的指针(例如内存页表中记录的第一文件页表的起始物理地址),若更新后的第一文件页表的起始物理地址未变化,则也可不修改内存页表中记录的是指向第一文件页表的指针。而在这种情况下,更新第一文件页表而无需修改内存页表,即可重建虚实地址映射关系,极大的简化了映射操作。

在本发明一些实施例中,访问文件的方法还可进一步包括:操作系统接收用于请求关闭上述文件的文件关闭请求;释放为上述文件分配的第一虚拟地址空间;释放上述内存页表中记录的上述第一虚实地址映射关系。进一步的,若创建了上述文件对应的文件对象,则还可以进一步释放上述文件对应的文件对象等。

在本发明的一些实施例中,接收携带文件标识的文件打开请求之后,当确定上述文件存储内存区之中未存储有上述文件标识所表示的文件,在上述文件存储内存区之中创建上述文件,为上述文件分配第二索引节点。其中,上述第二索引节点中可记录有第二文件页表或者用于指向第二文件页表的指针(用于指向第二文件页表的指针可以是第二文件页表的起始物理地址),上述第二文件页表用于指向上述文件存储内存区之中存储上述文件的内存区;为上述文件分配第二虚拟地址空间;利用内存页表记录第二虚实地址映射关系;其中,上述第二虚实地址映射关系可包括上述第二虚拟地址空间与上述第二物理地址空间之间的映射关系,其中,第二物理地址空间为上述文件存储内存区之中存储上述文件的内存区的物理地址空间,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。可选的,上述第二文件页表的级数与上述文件的文件类型之间具有对应关系,其中,上述文件的文件类型例如可通过上述文件打开请求中携带的上述文件的文件类型标志位确定,当然也可以通过其它方式来确定上述文件的文件类型。

在本发明另一些实施例中,接收携带文件标识的文件打开请求之后,当确定上述文件存储内存区中未存储有上述文件标识所表示的文件,在上述文件存储内存区之中创建上述文件,为上述文件分配第三索引节点,此时可先不创建该文件的文件页表或创建该文件的空文件页表(其中,若创建该文件的空文件页表,则第三索引节点中可包含上述空文件页表或者用于指向上述空文件页表的指针),当需要向创建的上述文件中写入文件内容时,可扩容存储上述文件的内存区(如从10MB扩容至1000MB),更新上述文件的文件页表以使得更新后的文件页表指向扩容之后的存储上述文件的内存区。

在本发明一些实施例中,文件页表与内存页表的数据结构类似或相同。

其中,上述操作的执行主体可为操作系统(具体可为操作系统之中的内核文件系统)等。

可以看出,本实施例的上述技术方案之中,在接收携带文件标识的文件打开请求之后;获得上述文件标识所表示的文件的第一索引节点,并基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间;为上述文件分配第一虚拟地址空间;利用内存页表记录第一虚实地址映射关系;其中,上述第一虚实地址映射关系为上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见,上述文件访问方案比较适用于在文件系统常驻内存场景下进行文件高性能访问。并且,由于是在请求打开文件时才为文件分配虚拟地址空间,这样有利于减少系统虚拟地址空间的无效占用和地址冲突可能性,有利于提高系统虚拟地址空间的利用效率。

进一步的,由于在打开文件过程中可为文件分配连续虚拟地址空间,因此有利于实现从读写文件的起始虚拟地址开始,一次性访问所需读写长度之内的内存页,而不需要在软件层面多次查找不同内存页的对应虚拟地址,这样文件顺序访问速度可以非常快。

借助存储器管理单元(MMU,Memory Management Unit)可透明地完成文件的虚拟地址和物理地址之间的转换,这有利于加快文件访问速度快、甚至实现零开销。

进一步的,若采用数据结构与内存页表类似或相同的文件页表来指向文件存储内存区中存储文件内容的内存页,由于文件页表与内存页表的数据结构类似或相同,有利于实现页表数据结构的零转换,并且当存储文件内容的内存页发生变化时也可能无需对文件页表执行重建文件物理地址空间与虚拟地址空间的映射关系的操作,通过更新文件页表,将用于指向更新的文件页表的指针插入文件页表的表项中,进而完成重建文件物理地址与虚拟地址的映射,这种方式有利于在与文件大小无关的常数时间之内,重建文件物理地址与虚拟地址的映射。

进一步的,由于可以为不同的文件分配独立的虚拟地址空间,使得文件系统在文件存储内存区的文件受系统虚拟地址和MMU的保护,极大的减少被误写的可能性,不仅可以良好的保护文件,且不需要额外的写保护机制,有利于简化系统。

进一步的,由于是通过虚拟地址访问文件,文件的大小只受系统虚拟地址空间的大小,以及操作系统支持的同时打开的文件数量的影响,这两者都不是文件系统本身的限制,因此文件大小可不受文件系统本身设计限制。

进一步的,文件系统采用与内存管理相似的方式,都是通过虚拟地址访问存储介质,且都可利用MMU进行虚拟地址和物理地址的转换,对内核的改动可以相对较少,这样也便于文件系统移植到现有的操作系统中。

为便于更好的理解和实施本发明实施例的上述方案,下面通过一些具体是应用场景进行举例介绍。

请参见图2-a,图2-a为本发明另一个实施例提供的另一种访问文件的方法的流程示意图。其中,本发明另一个实施例提供的另一种访问文件的方法可包括以下内容:

201、操作系统接收来自用户进程(下面称之为用户进程A)的携带文件标识的文件打开请求。

在本发明一些实施例中,上述文件打开请求可以携带文件存储路径(即请求打开的文件的存储路径),其中,上述文件标识可包含在上述文件存储路径之中,当然,上述文件打开请求中也可能携带文件标识并且可不携带文件存储路径。进一步的,上述文件打开请求中还可携带文件类型标志位,该文件类型标志位可指示出上述文件标识所表示的文件的文件类型(文件类型可能是目录文件或数据文件)。

202、操作系统创建上述文件标识所表示的文件(该文件下面称之为文件F1)对应的文件对象,为文件F1分配文件描述符。其中,基于文件F1的文件描述符可找到文件F1的文件对象。

203、操作系统确定上述文件存储内存区之中是否存储有文件F1。

若是,则执行步骤204。

若否,则操作系统可向用户进程A反馈文件打开失败指令。

204、操作系统获得上述文件F1的第一索引节点,其中,上述文件存储于文件存储内存区之中,上述文件F1的第一索引节点也存储于文件存储内存区之中。

例如图2-b所示,图2-b举例示出了一种计算节点的内存示意图,计算节点的内存可包括用户进程工作内存区S1、内核进程工作内存区S2和文件存储内存区S3等。

举例来说,用户进程工作内存区S1可以是指,用于存放用户进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,用户进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:用户进程运行时的堆、栈、内存映射区、用户进程所对应的程序的变量、字符和数组等数据。

又举例来说,内核进程工作内存区S2可以是指,用于存放内核进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,内核进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:内核进程运行时的堆、栈、内存映射区、内核进程所对应的程序的变量、字符和数组等数据。

在本发明一些实施例中,上述文件存储内存区S3可包括非易失性内存区和/或易失性内存区(即文件存储内存区S3的存储介质包括非易失性存储介质和/或易失性存储介质)。进程工作内存区(如内核进程工作内存区S2、用户进程工作内存区S1)可包括非易失性内存区和/或易失性内存区(即进程工作内存区的存储介质包括非易失性存储介质和/或易失性存储介质)。其中,进程工作内存区(如内核进程工作内存区S2、用户进程工作内存区S1)和文件存储内存区互不重叠。例如图2-c举例所示,在本发明一些实施例中,用户进程工作内存区S1和内核进程工作内存区S2可位于DRAM中,而文件存储内存区S3可位于NVM中。

其中,文件存储内存区S3可指用于存储文件系统的物理内存区域,文件存储内存区中可存放文件系统本身的各种信息,例如,文件存储内存区中可存放文件系统的索引节点和文件,还可进一步存放文件系统的超级块(若存在)等等信息。例如图2-d举例所示,文件存储内存区S3可包括超级块、用于存储文件索引节点的索引节点区和用于存储文件的文件数据区。

在本发明的一些实施例中,文件F1的第一索引节点中可记录用于指向第一文件页表的指针(用于指向第一文件页表的指针可包括第一文件页表的起始物理地址),其中,上述第一文件页表用于指向文件存储内存区S3之中存储文件F1的内存区,第一物理地址空间为上述文件存储内存区之中存储上述文件的内存区的物理地址空间。上述第一文件页表为单级或多级文件页表。

其中,本发明实施例中用数据结构类似或等同于内存页表的文件页表来组织用于存储单个文件的内存页,文件页表可是一级或多级文件页表。非最低一级文件页表中的每一级文件页表的每个表项记录下一级的某文件页表的起始物理地址。而最低一级文件页表的每个表项记录存储了文件的某内存页的起始物理地址。如图2-e所示,图2-e举例第一文件页表为一个三级文件页表,分别是PUD、PMD和PTE三级,其中,PUD中的每一个表项都记录一个PMD的起始物理地址,而各个PMD的每个表项都记录一个PTE的起始物理地址,PTE的每一个表项都记录一个内存页(其中,内存页存储文件F1的文件内容)的起始物理地址。可以理解的是,并不是每一个文件都需要使用三级文件页表,即便是使用三级页表,也不一定有固定的格式,例如不一定每个文件都需要使用1024个PTE,可以根据文件的大小变化动态调整文件页表组织架构。例如,第一索引节点中可记录指向三级文件页表的第一级文件页表PUD的指针(如PUD的起始物理地址)。

其中,每个文件都对应一个索引节点(inode),例如第一索引节点中包含用于指向文件页表的指针(Pointer),该指针具体存放文件F1的最高一级文件页表(PUD)所属物理内存页的起始物理地址。

其中,文件F1的第一索引节点中还可包含文件F1的元数据,文件F1的元数据中包含文件F1的属性信息(如文件大小、文件类型、文件修改时间、文件创建时间等)

可以理解的是,由于每个文件的文件页表都储存在文件存储内存区的文件数据区。由于文件存储内存区字节可寻址的特性和文件页表的基于链表的组织形式,文件页表并不需要放置在固定区域。只要当作一般的文件存放在文件数据区域中即可。

205、操作系统基于上述第一索引节点得到上述文件存储内存区之中存储文件F1的内存区的第一物理地址空间。

由于第一索引节点中包含用于指向文件F1的第一文件页表的指针,因此基于上述第一索引节点可以得到用于指向文件F1的第一文件页表的指针,而得到用于指向文件F1的第一文件页表的指针,可得到文件F1的第一文件页表,进而可以基于文件F1的第一文件页表,得到上述文件存储内存区之中存储文件F1的内存区的第一物理地址空间。

206、操作系统为上述文件分配第一虚拟地址空间。

在本发明的一些实施例中,可以为上述文件分配预设大小的第一虚拟地址空间(例如第一虚拟地址空间的大小可小于或等于系统最大虚拟地址空间除以系统支持同时打开的最多文件个数)。或也可根据上述文件的文件类型,为上述文件分配与该文件类型对应大小的第一虚拟地址空间。例如,目录文件对应的虚拟地址空间和数据文件对应的虚拟地址空间的大小可不相等,例如目录文件对应的虚拟地址空间大小可小于数据文件对应的虚拟地址空间的大小,例如目录文件对应的虚拟地址空间大小为1MB、2MB、10MB或30MB等,数据文件对应的虚拟地址空间大小为100MB、500MB、1GB、10GB、100GB或者2TB等等。

207、操作系统利用内存页表记录第一虚实地址映射关系。

其中,上述第一虚实地址映射关系为上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。

其中,在本发明的一些实施例中,上述利用内存页表记录第一虚实地址映射关系可以包括:在内存页表中增加用于记录上述第一虚实地址映射关系的表项(可能为一个或多个表项),其中,上述表项包含用于指向上述第一文件页表的指针(用于指向上述第一文件页表的指针可以包括上述第一文件页表的起始物理地址)。举例来说,上述内存页表的总级数为Y,上述第一文件页表的总级数为X,若上述表项包含上述第一文件页表,则上述表项可为上述内存页表中的第Y-X+1级内存页表之中的表项,若上述表项包含用于指向上述第一文件页表的指针,则上述表项可以为上述内存页表中的第Y-X级内存页表之中的表项,其中,上述X为正整数,上述Y为大于上述X的正整数。其中,在一些特殊应用场景下,在内存页表中增加的用于记录上述第一虚实地址映射关系的表项(可能为一个或多个表项)也可以是内存页表中的任意一级内存页表之中的表项。

在本发明的一些实施例中,还可进一步在上述第一索引节点中记录上述第一虚拟地址空间、上述第一虚拟地址空间的起始地址和上述第一虚拟地址空间的结束地址之中的至少一个,和/或,还可在上述文件对应的文件对象之中记录上述第一虚拟地址空间、上述第一虚拟地址空间的起始地址和上述第一虚拟地址空间的结束地址之中的至少一个。

在本发明的一些实施例中,上述第一虚拟地址空间为连续的或者非连续的虚拟地址空间。在本发明一些实施例中,上述第一虚拟地址空间处于内核虚拟地址空间或者上述第一虚拟地址空间处于用户进程虚拟地址空间。

208、操作系统向用户进程A反馈文件F1的文件描述符号。

用户进程A可基于文件F1的文件描述符号发起对文件F1的读写操作。

可以看出,本实施例的上述技术方案之中,在接收携带文件标识的文件打开请求之后;可以判断文件存储内存区之中是否存储有上述文件标识所表示的文件;若上述文件存储内存区之中存储有上述文件,则获得上述文件的第一索引节点,并基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间;为上述文件分配第一虚拟地址空间;利用内存页表记录第一虚实地址映射关系;其中,上述第一虚实地址映射关系为上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见,上述文件访问方案比较适用于在文件系统常驻内存场景下进行文件高性能访问。并且,由于是在请求打开文件时才为文件分配虚拟地址空间,这样有利于减少系统虚拟地址空间的无效占用和地址冲突可能性,有利于提高系统虚拟地址空间的利用效率。

进一步的,由于在打开文件过程中可为文件分配连续虚拟地址空间,因此有利于实现从读写文件的起始虚拟地址开始,一次性访问所需读写长度之内的内存页,而不需要在软件层面多次查找不同内存页的对应虚拟地址,这样文件顺序访问速度可以非常快。

借助MMU可透明地完成文件的虚拟地址和物理地址之间的转换,这有利于加快文件访问速度快、甚至实现零开销。

进一步的,若采用数据结构与内存页表类似或相同的文件页表来指向文件存储内存区中存储文件内容的内存页,由于文件页表与内存页表的数据结构类似或相同,有利于实现页表数据结构的零转换,并且当存储文件内容的内存页发生变化时也可能无需对文件页表执行重建文件物理地址空间与虚拟地址空间的映射关系的操作,通过更新文件页表,将用于指向更新的文件页表的指针插入文件页表的表项中,进而完成重建文件物理地址与虚拟地址的映射,这种方式有利于在与文件大小无关的常数时间之内,重建文件物理地址与虚拟地址的映射。

进一步的,由于可以为不同的文件分配独立的虚拟地址空间,使得文件系统在文件存储内存区的文件受系统虚拟地址和MMU的保护,极大的减少被误写的可能性,不仅可以良好的保护文件,且不需要额外的写保护机制,有利于简化系统。

进一步的,由于是通过虚拟地址访问文件,文件的大小只受系统虚拟地址空间的大小,以及操作系统支持的同时打开的文件数量的影响,这两者都不是文件系统本身的限制,因此文件大小可不受文件系统本身设计限制。

进一步的,文件系统采用与内存管理相似的方式,都是通过虚拟地址访问存储介质,且都可利用MMU进行虚拟地址和物理地址的转换,对内核的改动可以相对较少,这样也便于文件系统移植到现有的操作系统中。

请参见图3,图3为本发明另一个实施例提供的另一种访问文件的方法的流程示意图。其中,本发明另一个实施例提供的另一种访问文件的方法可包括以下内容:

301、操作系统接收来自用户进程(下面称之为用户进程A)的携带文件标识的文件打开请求。

在本发明一些实施例中,上述文件打开请求可以携带文件存储路径(即请求打开的文件的存储路径),其中,上述文件标识可包含在上述文件存储路径之中,当然,上述文件打开请求中也可能携带文件标识并且可不携带文件存储路径。进一步的,上述文件打开请求中还可携带文件类型标志位,该文件类型标志位可指示出上述文件标识所表示的文件的文件类型(文件类型可能是目录文件或数据文件)。

302、操作系统创建上述文件标识所表示的文件(该文件下面称之为文件F1)对应的文件对象,为文件F1分配文件描述符。其中,基于文件F1的文件描述符可找到文件F1的文件对象。

303、操作系统确定上述文件存储内存区之中是否存储有文件F1。

若是,则执行步骤304。

若否,跳转至步骤308。

304、操作系统获得上述文件F1的第一索引节点,其中,上述文件存储于文件存储内存区之中,上述文件F1的第一索引节点也存储于文件存储内存区之中。

例如图2-b所示,图2-b举例示出了一种计算节点的内存示意图,计算节点的内存可包括用户进程工作内存区S1、内核进程工作内存区S2和文件存储内存区S3等。

举例来说,用户进程工作内存区S1可以是指,用于存放用户进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,用户进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:用户进程运行时的堆、栈、内存映射区、用户进程所对应的程序的变量、字符和数组等数据。

又举例来说,内核进程工作内存区S2可以是指,用于存放内核进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,内核进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:内核进程运行时的堆、栈、内存映射区、内核进程所对应的程序的变量、字符和数组等数据。

在本发明一些实施例中,上述文件存储内存区S3可包括非易失性内存区和/或易失性内存区(即文件存储内存区S3的存储介质包括非易失性存储介质和/或易失性存储介质)。进程工作内存区(如内核进程工作内存区S2、用户进程工作内存区S1)可包括非易失性内存区和/或易失性内存区(即进程工作内存区的存储介质包括非易失性存储介质和/或易失性存储介质)。其中,进程工作内存区(如内核进程工作内存区S2、用户进程工作内存区S1)和文件存储内存区互不重叠。例如图2-c举例所示,在本发明一些实施例中,用户进程工作内存区S1和内核进程工作内存区S2可位于DRAM中,而文件存储内存区S3可位于NVM中。

其中,文件存储内存区S3可指用于存储文件系统的物理内存区域,文件存储内存区中可存放文件系统本身的各种信息,例如,文件存储内存区中可存放文件系统的索引节点和文件,还可进一步存放文件系统的超级块(若存在)等等信息。例如图2-d举例所示,文件存储内存区S3可包括超级块、用于存储文件索引节点的索引节点区和用于存储文件的文件数据区。其中,超级块中可存储用于指向索引节点的指针。其中,超级块中可存储用于指向所有索引节点的指针,也可存储用于指向根目录文件的索引节点的指针。

在本发明的一些实施例中,文件F1的第一索引节点中可记录用于指向第一文件页表的指针(用于指向第一文件页表的指针可包括第一文件页表的起始物理地址),其中,上述第一文件页表用于指向文件存储内存区S3之中存储文件F1的内存区,第一物理地址空间为上述文件存储内存区之中存储上述文件的内存区的物理地址空间。上述第一文件页表为单级或多级文件页表。

其中,本发明实施例中用数据结构类似或等同于内存页表的文件页表来组织用于存储单个文件的内存页,文件页表可是一级或多级文件页表。非最低一级文件页表中的每一级文件页表的每个表项记录下一级的某文件页表的起始物理地址。而最低一级文件页表的每个表项记录存储了文件的某内存页的起始物理地址。如图2-e所示,图2-e举例第一文件页表为一个三级文件页表,分别是PUD、PMD和PTE三级,其中,PUD中的每一个表项都记录一个PMD的起始物理地址,而各个PMD的每个表项都记录一个PTE的起始物理地址,PTE的每一个表项都记录一个内存页(其中,内存页存储文件F1的文件内容)的起始物理地址。可以理解的是,并不是每一个文件都需要使用三级文件页表,即便是使用三级页表,也不一定有固定的格式,例如不一定每个文件都需要使用1024个PTE,可以根据文件的大小变化动态调整文件页表组织架构。例如,第一索引节点中可记录指向三级文件页表的第一级文件页表PUD的指针(如PUD的起始物理地址)。

其中,每个文件都对应一个索引节点(inode),例如第一索引节点中包含用于指向文件页表的指针(Pointer),该指针具体存放文件F1的最高一级文件页表(PUD)所属物理内存页的起始物理地址。

其中,文件F1的第一索引节点中还可包含文件F1的元数据,文件F1的元数据中包含文件F1的属性信息(如文件大小、文件类型、文件修改时间、文件创建时间等)

可以理解的是,由于每个文件的文件页表都储存在文件存储内存区的文件数据区。由于文件存储内存区字节可寻址的特性和文件页表的基于链表的组织形式,文件页表并不需要放置在固定区域。只要当作一般的文件存放在文件数据区域中即可。

305、操作系统基于上述第一索引节点得到上述文件存储内存区之中存储文件F1的内存区的第一物理地址空间。

由于第一索引节点中包含用于指向文件F1的第一文件页表的指针,因此基于上述第一索引节点可以得到用于指向文件F1的第一文件页表的指针,而得到用于指向文件F1的第一文件页表的指针,可得到文件F1的第一文件页表,进而可以基于文件F1的第一文件页表,得到上述文件存储内存区之中存储文件F1的内存区的第一物理地址空间。

306、操作系统为上述文件分配第一虚拟地址空间。

在本发明的一些实施例中,可以为上述文件分配预设大小的第一虚拟地址空间(例如第一虚拟地址空间的大小可小于或等于系统最大虚拟地址空间除以系统支持同时打开的最多文件个数)。或也可根据上述文件的文件类型,为上述文件分配与该文件类型对应大小的第一虚拟地址空间。例如,目录文件对应的虚拟地址空间和数据文件对应的虚拟地址空间的大小可不相等,例如目录文件对应的虚拟地址空间大小可小于数据文件对应的虚拟地址空间的大小,例如目录文件对应的虚拟地址空间大小为1MB、2MB、10MB或30MB等,数据文件对应的虚拟地址空间大小为100MB、500MB、1GB、10GB、100GB或者2TB等等。

307、操作系统利用内存页表记录第一虚实地址映射关系,跳转至步骤311。

其中,上述第一虚实地址映射关系为上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。

其中,在本发明的一些实施例中,上述利用内存页表记录第一虚实地址映射关系可以包括:在内存页表中增加用于记录上述第一虚实地址映射关系的表项(可能为一个或多个表项),其中,上述表项包含用于指向上述第一文件页表的指针(用于指向上述第一文件页表的指针可以包括上述第一文件页表的起始物理地址)。举例来说,上述内存页表的总级数为Y,上述第一文件页表的总级数为X,若上述表项包含上述第一文件页表,则上述表项可为上述内存页表中的第Y-X+1级内存页表之中的表项,若上述表项包含用于指向上述第一文件页表的指针,则上述表项可以为上述内存页表中的第Y-X级内存页表之中的表项,其中,上述X为正整数,上述Y为大于上述X的正整数。其中,在一些特殊应用场景下,在内存页表中增加的用于记录上述第一虚实地址映射关系的表项(可能为一个或多个表项)也可以是内存页表中的任意一级内存页表之中的表项。

在本发明的一些实施例中,还可进一步在上述第一索引节点中记录上述第一虚拟地址空间、上述第一虚拟地址空间的起始地址和上述第一虚拟地址空间的结束地址之中的至少一个,和/或,还可在上述文件对应的文件对象之中记录上述第一虚拟地址空间、上述第一虚拟地址空间的起始地址和上述第一虚拟地址空间的结束地址之中的至少一个。

在本发明的一些实施例中,上述第一虚拟地址空间为连续的或者非连续的虚拟地址空间。在本发明一些实施例中,上述第一虚拟地址空间处于内核虚拟地址空间或者上述第一虚拟地址空间处于用户进程虚拟地址空间。

308、操作系统在文件存储内存区之中创建文件F1,并为创建的文件F1分配第二索引节点,其中,文件F1的第二索引节点也存储于文件存储内存区之中。

在本发明的一些实施例中,文件F1的第二索引节点中可记录用于指向第二文件页表的指针,其中,上述第二文件页表用于指向文件存储内存区之中存储文件F1的内存区的第二物理地址空间,上述第二文件页表为单级或多级文件页表。

其中,本发明实施例中用数据结构类似或等同于内存页表的文件页表来组织用于存储单个文件的内存页,第二文件页表可是一级或多级文件页表。非最低一级文件页表中的每一级文件页表的每个表项记录下一级的某文件页表的起始物理地址。而最低一级文件页表的每个表项记录存储了文件的某内存页的起始物理地址。

其中,每个文件都对应一个索引节点(inode),例如第二索引节点中包含用于指向文件页表的指针(Pointer),该指针具体存放文件F1的最高一级文件页表所属物理内存页的起始物理地址。

其中,文件F1的第二索引节点中还可包含文件F1的元数据,文件F1的元数据中包含文件F1的属性信息(如文件大小、文件类型、文件修改时间、文件创建时间等)

可以理解的是,由于每个文件的文件页表都储存在文件存储内存区的文件数据区。由于文件存储内存区字节可寻址的特性和文件页表的基于链表的组织形式,因此第二文件页表并不需要放置在固定区域,只要当作一般的文件存放在文件数据区域中即可。

309、操作系统为文件F1分配第二虚拟地址空间。

在本发明的一些实施例中,可以为上述文件分配预设大小的第二虚拟地址空间(例如第二虚拟地址空间的大小可小于或等于系统最大虚拟地址空间除以系统支持同时打开的最多文件个数)。或也可根据上述文件的文件类型,为上述文件分配与该文件类型对应大小的第二虚拟地址空间。例如,目录文件对应的虚拟地址空间和数据文件对应的虚拟地址空间的大小可不相等,例如目录文件对应的虚拟地址空间大小可小于数据文件对应的虚拟地址空间的大小,例如目录文件对应的虚拟地址空间大小为1MB、2MB、10MB或30MB等,数据文件对应的虚拟地址空间大小为100MB、500MB、1GB、10GB、100GB或者2TB等等。

310、操作系统利用内存页表记录第二虚实地址映射关系,跳转至步骤311。

其中,上述第二虚实地址映射关系为上述第二虚拟地址空间与上述第二物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。

其中,在本发明的一些实施例中,上述利用内存页表记录第二虚实地址映射关系可以包括:在内存页表中增加用于记录上述第二虚实地址映射关系的表项(可能为一个或多个表项),其中,上述表项包含用于指向上述第二文件页表的指针。举例来说,上述内存页表的总级数为Y,上述第二文件页表的总级数为X,若上述表项包含上述第二文件页表,则上述表项可为上述内存页表中的第Y-X+1级内存页表之中的表项,若上述表项包含用于指向上述第二文件页表的指针,则上述表项可以为上述内存页表中的第Y-X级内存页表之中的表项,其中,上述X为正整数,上述Y为大于上述X的正整数。其中,在一些特殊应用场景下,在内存页表中增加的用于记录上述第二虚实地址映射关系的表项(可能为一个或多个表项)也可以是内存页表中的任意一级内存页表之中的表项。

在本发明的一些实施例中,还可进一步在上述第二索引节点中记录上述第二虚拟地址空间、上述第二虚拟地址空间的起始地址和上述第二虚拟地址空间的结束地址之中的至少一个,和/或,还可在上述文件对应的文件对象之中记录上述第二虚拟地址空间、上述第二虚拟地址空间的起始地址和上述第二虚拟地址空间的结束地址之中的至少一个。

在本发明的一些实施例中,上述第二虚拟地址空间为连续的或者非连续的虚拟地址空间。在本发明一些实施例中,上述第二虚拟地址空间处于内核虚拟地址空间或者上述第二虚拟地址空间处于用户进程虚拟地址空间。

311、操作系统向用户进程A反馈文件F1的文件描述符号。

用户进程A可基于文件F1的文件描述符号发起对文件F1的读写操作。

可以看出,本实施例的上述技术方案之中,在接收携带文件标识的文件打开请求之后,可判断文件存储内存区之中是否存储有上述文件标识所表示的文件;若上述文件存储内存区之中存储有上述文件,则获得上述文件的第一索引节点,并基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间;为上述文件分配第一虚拟地址空间;利用内存页表记录第一虚实地址映射关系;其中,上述第一虚实地址映射关系为上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见,上述文件访问方案比较适用于在文件系统常驻内存场景下进行文件高性能访问。并且,由于是在请求打开文件时才为文件分配虚拟地址空间,这样有利于减少系统虚拟地址空间的无效占用和地址冲突可能性,有利于提高系统虚拟地址空间的利用效率。

进一步的,由于在打开文件过程中可为文件分配连续虚拟地址空间,因此有利于实现从读写文件的起始虚拟地址开始,一次性访问所需读写长度之内的内存页,而不需要在软件层面多次查找不同内存页的对应虚拟地址,这样文件顺序访问速度可以非常快。

借助MMU可透明地完成文件的虚拟地址和物理地址之间的转换,这有利于加快文件访问速度快、甚至实现零开销。

进一步的,若采用数据结构与内存页表类似或相同的文件页表来指向文件存储内存区中存储文件内容的内存页,由于文件页表与内存页表的数据结构类似或相同,有利于实现页表数据结构的零转换,并且当存储文件内容的内存页发生变化时也可能无需对文件页表执行重建文件物理地址空间与虚拟地址空间的映射关系的操作,通过更新文件页表,将用于指向更新的文件页表的指针插入文件页表的表项中,进而完成重建文件物理地址与虚拟地址的映射,这种方式有利于在与文件大小无关的常数时间之内,重建文件物理地址与虚拟地址的映射。

进一步的,由于可以为不同的文件分配独立的虚拟地址空间,使得文件系统在文件存储内存区的文件受系统虚拟地址和MMU的保护,极大的减少被误写的可能性,不仅可以良好的保护文件,且不需要额外的写保护机制,有利于简化系统。

进一步的,由于是通过虚拟地址访问文件,文件的大小只受系统虚拟地址空间的大小,以及操作系统支持的同时打开的文件数量的影响,这两者都不是文件系统本身的限制,因此文件大小可不受文件系统本身设计限制。

进一步的,文件系统采用与内存管理相似的方式,都是通过虚拟地址访问存储介质,且都可利用MMU进行虚拟地址和物理地址的转换,对内核的改动可以相对较少,这样也便于文件系统移植到现有的操作系统中。

请参见图4,图4为本发明另一个实施例提供的另一种访问文件的方法的流程示意图。其中,图4所示的访问文件的方法可在图2-a或图3所示的技术方案执行完之后实施。其中,本发明另一个实施例提供的另一种访问文件的方法可包括以下内容:

401、操作系统接收用户进程A发送的用于请求读取文件F1的文件内容的文件读取请求。其中,上述文件读取请求携带有读入内存地址空间和请求读取的上述文件F1中的第一文件内容的数据量。

此外,上述文件读取请求还可以携带上述文件的文件描述符。

其中,上述读入内存地址空间为用户进程工作内存区之中的第一内存区的地址空间。

402、操作系统基于上述文件描述符查找到文件F1的第一索引节点或文件F1的文件对象。基于第一索引节点或文件F1的文件对象得到第一虚拟地址空间的起始地址。

403、操作系统基于第一文件内容偏移量和第一虚拟地址空间的起始地址,得到读取上述第一文件内容的起始读取虚拟地址。

404、操作系统基于上述起始读取虚拟地址和第一虚实地址映射关系得到从上述文件存储内存区读取上述第一文件内容的起始读取物理地址。

405、操作系统基于起始读取物理地址和上述第一文件内容的数据量得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间。

406、操作系统基于上述读取物理地址空间,从上述文件存储内存区之中读取出上述文件的第一文件内容。基于上述读入内存地址空间,将上述第一文件内容写入上述第一内存区。

可以看出,本实施例的上述技术方案之中,由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得在进行文件内容读取之时,内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见上述文件访问方案比较适用于在文件系统常驻内存场景下进行文件高性能访问。

请参见图5,图5为本发明另一个实施例提供的另一种访问文件的方法的流程示意图。其中,图5所示的访问文件的方法可在图2-a或图3所示的技术方案执行完之后实施。其中,本发明另一个实施例提供的另一种访问文件的方法可包括以下内容:

501、操作系统接收用户进程A发送的用于请求读取文件F1的第一文件内容的文件读取请求。其中,上述文件读取请求携带有读入内存地址空间和请求读取的上述文件F1中的第一文件内容的数据量。

此外,上述文件读取请求还可以携带上述文件的文件描述符。

其中,上述读入内存地址空间为用户进程工作内存区之中的第一内存区的地址空间。

502、操作系统基于上述文件描述符查找到文件F1的第一索引节点或文件F1的文件对象;基于第一索引节点或文件F1的文件对象得到第一虚拟地址空间的起始地址。

503、操作系统基于第一文件内容偏移量和第一虚拟地址空间的起始地址,得到读取上述第一文件内容的起始读取虚拟地址。

504、操作系统基于上述起始读取虚拟地址和上述第一文件内容的数据量,得到读取上述第一文件内容的读取虚拟地址空间。

505、操作系统可基于上述读取虚拟地址空间和上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间。

506、操作系统基于上述读取物理地址空间,从上述文件存储内存区之中读取出上述文件的第一文件内容。基于上述读入内存地址空间,将上述第一文件内容写入上述第一内存区。

可以看出,本实施例的上述技术方案之中,由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得在进行文件内容读取之时,内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见上述文件访问方案比较适用于在文件系统常驻内存场景下进行文件高性能访问。

请参见图6,图6为本发明另一个实施例提供的另一种访问文件的方法的流程示意图。其中,图6所示的访问文件的方法可在图2-a或图3所示的技术方案执行完之后实施。其中,本发明另一个实施例提供的另一种访问文件的方法可包括以下内容:

601、操作系统接收用户进程A发送的请求向上述文件F1之中写入第二文件内容的文件写入请求,其中,上述文件写入请求携带有读出内存地址空间和请求写入上述文件之中的第二文件内容的数据量。

此外,上述文件写入请求还可以携带上述文件的文件描述符。

其中,上述读出内存地址空间为用户进程工作内存区之中的第二内存区的地址空间。

602、操作系统可以基于上述文件描述符查找到文件F1的第一索引节点或文件F1的文件对象。操作系统基于第一索引节点或文件F1的文件对象得到第一虚拟地址空间的起始地址。

603、操作系统可以基于第二文件内容偏移量和第一虚拟地址空间的起始地址,得到向文件F1中写入上述第二文件内容的起始写入虚拟地址。

604、操作系统可以基于上述起始写入虚拟地址和第一虚实地址映射关系,得到向上述文件存储内存区的文件F1中写入第二文件内容的起始写入物理地址。

605、操作系统可以基于起始写入物理地址和上述第二文件内容的数据量,得到向上述文件存储内存区的文件F1中写入第二文件内容的写入物理地址空间。

606、操作系统基于上述读出内存地址空间从上述第二内存区之中读取出上述第二文件内容,操作系统基于上述写入物理地址空间,将读取出的上述第二文件内容写入到上述第三内存区之中。

可以看出,本实施例的上述技术方案之中,由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得在进行文件内容写入之时,内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见上述文件访问方案比较适用于在文件系统常驻内存场景下进行文件高性能访问。

请参见图7,图7为本发明另一个实施例提供的另一种访问文件的方法的流程示意图。其中,图7所示的访问文件的方法可在图2-a或图3所示的技术方案执行完之后实施。其中,本发明另一个实施例提供的另一种访问文件的方法可包括以下内容:

701、操作系统接收用户进程A发送的请求向上述文件F1之中写入第二文件内容的文件写入请求,其中,上述文件写入请求携带有读出内存地址空间和请求写入上述文件之中的第二文件内容的数据量。

此外,上述文件写入请求还可以携带上述文件的文件描述符。

其中,上述读出内存地址空间为用户进程工作内存区之中的第二内存区的地址空间。

702、操作系统可以基于上述文件描述符查找到文件F1的第一索引节点或文件F1的文件对象。基于第一索引节点或文件F1的文件对象得到第一虚拟地址空间的起始地址。

703、操作系统可以基于第二文件内容偏移量和第一虚拟地址空间的起始地址,得到向文件F1中写入上述第二文件内容的起始写入虚拟地址。

704、操作系统可以基于上述起始写入虚拟地址和上述第二文件内容的数据量,得到向文件F1中写入第二文件内容的写入虚拟地址空间。

705、操作系统可以基于上述写入虚拟地址空间和第一虚实地址映射关系,得到向上述文件存储内存区的文件F1中写入第二文件内容的写入物理地址空间。

706、操作系统基于上述读出内存地址空间从上述第二内存区之中读取出上述第二文件内容,操作系统基于上述写入物理地址空间,将读取出的上述第二文件内容写入到上述第三内存区之中。

可以看出,本实施例的上述技术方案之中,由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得在进行文件内容写入之时,内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见上述文件访问方案比较适用于在文件系统常驻内存场景下进行文件高性能访问。

请参见图8,图8为本发明另一个实施例提供的另一种访问文件的方法的流程示意图。其中,图8所示的访问文件的方法可在图2-a或图3~图7任意一图所示的技术方案执行完之后实施。其中,本发明另一个实施例提供的另一种访问文件的方法可包括以下内容:

801、操作系统接收用户进程A发送的请求关闭上述文件F1的文件关闭请求,其中,上述文件关闭请求还可携带上述文件的文件描述符。

802、操作系统释放为上述文件分配的第一虚拟地址空间或第二虚拟地址空间。

803、操作系统释放上述内存页表中记录的上述第一虚实地址映射关系或第二虚实地址映射关系。

804、操作系统释放上述文件F1对应的文件对象等。

可以看出,本实施例的上述技术方案之中。由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见,上述文件访问方案比较适用于在文件系统常驻内存场景下进行文件高性能访问。并且,由于是在请求打开文件时才为文件分配虚拟地址空间,而在关闭文件时就释放为文件分配虚拟地址空间,这样有利于减少对系统虚拟地址空间的无效占用和地址冲突可能性,有利于提高系统虚拟地址空间的利用效率。

可以理解的是,上述各实施例描述的任意一种访问文件的方法均可应用于计算节点中,该计算节点可包括内存,该内存包括:文件存储内存区和进程工作内存区,其中,上述进程工作内存区存储有内存页表,上述进程工作内存区之中运行有操作系统。举例来说,上述进程工作内存区可包括内核进程工作内存区和用户进程工作内存区,其中,内核内存页表可存储于内核进程工作内存区,用户进程内存页表可存储于上述用户进程工作内存区,例如内核进程工作内存区之中运行有操作系统。

为便于更好的实施本发明实施例的上述方案,下面提供用于实施上述方案的相关装置。

参见图9-a,本发明实施例提供访问文件的装置900,可包括:

接收单元901、获取单元902、分配单元903和映射单元904。

其中,接收单元901,用于接收携带文件标识的文件打开请求。

在本发明一些实施例中,上述文件打开请求可以携带文件存储路径(即请求打开的文件的存储路径),其中,上述文件标识可包含在上述文件存储路径之中,当然,上述文件打开请求中也可能携带文件标识并且可不携带文件存储路径。进一步的,上述文件打开请求中还可携带文件类型标志位,该文件类型标志位可指示出上述文件标识所表示的文件的文件类型(文件类型可能是目录文件或数据文件)。

获取单元902,用于获得上述文件标识所表示的文件的第一索引节点,上述文件存储于文件存储内存区之中;基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间。

分配单元903,用于为上述文件分配第一虚拟地址空间。

在本发明的一些实施例中,可以为上述文件分配预设大小的第一虚拟地址空间(例如第一虚拟地址空间的大小可小于或等于系统最大虚拟地址空间除以系统支持同时打开的最多文件个数)。或也可根据上述文件的文件类型,为上述文件分配与该文件类型对应大小的第一虚拟地址空间。例如,目录文件对应的虚拟地址空间和数据文件对应的虚拟地址空间的大小可不相等,例如目录文件对应的虚拟地址空间大小可小于数据文件对应的虚拟地址空间的大小,例如目录文件对应的虚拟地址空间大小为1MB、2MB、10MB或30MB等,数据文件对应的虚拟地址空间大小为100MB、500MB、1GB、10GB、100GB或者2TB等等。

映射单元904,用于利用内存页表记录第一虚实地址映射关系。

其中,上述第一虚实地址映射关系包括上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。

其中,文件的索引节点中可包含能够得出文件存储内存区之中存储该文件的内存区的物理地址空间的信息。例如,上述文件的第一索引节点中可记录第一文件页表或用于指向第一文件页表的指针,上述第一文件页表用于指向上述文件存储内存区之中存储上述文件的内存区,上述第一文件页表为单级或多级文件页表,其中,第一物理地址空间为上述文件存储内存区之中存储上述文件的内存区的物理地址空间。当然,第一索引节点也可能直接存储上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间或第一物理地址空间的起始地址等。进一步的,上述文件的第一索引节点中还可包含该文件的元数据等信息。

在本发明的一些实施例中,在上述基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间的方面,获取单元902可具体用于,基于上述第一索引节点中记录的第一文件页表或用于指向第一文件页表的指针,得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间,其中,上述第一文件页表用于指向上述文件存储内存区之中存储上述文件的内存区,上述的第一物理地址空间为上述文件存储内存区之中存储上述文件的内存区的物理地址空间,上述第一文件页表为单级或多级文件页表。

在本发明的一些实施例中,内存可以包括:进程工作内存区(其中,进程工作内存区可以包括用户进程工作内存区和内核进程工作内存区)和文件存储内存区。其中,进程工作内存区是指,用于存放进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,上述数据结构和变量可包括如下信息的至少一种:进程运行时的堆、栈、内存映射区、进程所对应的程序的变量、字符和数组等数据。

举例来说,用户进程工作内存区可以是指,用于存放用户进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,用户进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:用户进程运行时的堆、栈、内存映射区、用户进程所对应的程序的变量、字符和数组等数据。

又举例来说,内核进程工作内存区可以是指,用于存放内核进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,内核进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:内核进程运行时的堆、栈、内存映射区、内核进程所对应的程序的变量、字符和数组等数据。

其中,文件存储内存区可指用于存储文件系统的物理内存区域,文件存储内存区中可存放文件系统本身的各种信息,例如,文件存储内存区中可存放文件系统的索引节点和文件,还可进一步存放文件系统的超级块(若存在)等等信息。

在本发明一些实施例中,上述文件存储内存区可包括非易失性内存区和/或易失性内存区(即,文件存储内存区的存储介质包括非易失性存储介质和/或易失性存储介质)。其中,进程工作内存区(如内核进程工作内存区、用户进程工作内存区)可包括非易失性内存区和/或易失性内存区(即进程工作内存区的存储介质包括非易失性存储介质和/或易失性存储介质)。其中,进程工作内存区(如内核进程工作内存区、用户进程工作内存区)和文件存储内存区互不重叠。

在本发明的一些实施例中,映射单元904可具体用于,在内存页表中增加用于记录上述第一虚实地址映射关系的表项,上述表项包含上述第一文件页表或用于指向上述第一文件页表的指针。

在本发明的一些实施例中,上述内存页表的总级数为Y,上述第一文件页表的总级数为X,若上述表项包含上述第一文件页表,则上述表项为上述内存页表中的第Y-X+1级内存页表中的表项,若上述表项包含用于指向上述第一文件页表的指针,则上述表项为上述内存页表中的第Y-X级内存页表中的表项,上述X为正整数,上述Y为大于上述X的正整数。

参见图9-b,在本发明的一些实施例中,访问文件的装置900还包括:

记录单元905,用于在上述第一索引节点中记录上述第一虚拟地址空间和/或上述第一虚拟地址空间的起始地址,和/或,在上述文件对应的文件对象之中记录上述第一虚拟地址空间和/或上述第一虚拟地址空间的起始地址。

在本发明的一些实施例中,上述第一虚拟地址空间为连续的或者非连续的虚拟地址空间。

在本发明的一些实施例中,上述第一虚拟地址空间处于内核虚拟地址空间或者用户进程虚拟地址空间。

在本发明的一些实施例中,获取单元902可具体用于:当确定上述文件存储内存区之中存储有上述文件标识所表示的文件,获得上述文件标识所表示的文件的第一索引节点。

在本发明的一些实施例中,接收单元901还可用于,接收用于请求读取上述文件的文件内容的文件读取请求,其中,上述文件读取请求携带有读入内存地址空间和请求读取的上述文件中的第一文件内容的数据量,其中,上述读入内存地址空间为用户进程工作内存区之中的第一内存区的地址空间;

参见图9-c,上述访问文件的装置900还包括:

第二映射单元906,用于基于上述第一文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间;

第一读写单元907,用于基于上述读取物理地址空间,从上述文件存储内存区之中读取出上述文件的第一文件内容;将上述第一文件内容写入上述第一内存区。

在本发明的一些实施例中,在上述基于上述第一文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间的方面,第二映射单元906可具体用于,基于上述第一文件内容的数据量、第一文件内容偏移量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间,其中,上述第一文件内容偏移量从上述文件读取请求之中得到,或者,上述第一文件内容偏移量从上述文件对应的文件对象之中得到。

例如,可基于第一文件内容偏移量(其中,若未从上述文件读取请求从上述文件对应的文件对象之中得到第一文件内容偏移量,则可将默认文件内容偏移量作为第一文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到读取上述第一文件内容的起始读取虚拟地址;利用上述起始读取虚拟地址和第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的起始读取物理地址;基于上述起始读取物理地址和第一文件内容的数据量,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间。

又例如,可基于第一文件内容偏移量(其中,若未从上述文件读取请求从上述文件对应的文件对象之中得到第一文件内容偏移量,则可将默认文件内容偏移量作为第一文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到读取上述第一文件内容的起始读取虚拟地址;基于起始读取虚拟地址和第一文件内容的数据量,得到读取上述第一文件内容的读取虚拟地址空间;利用上述读取虚拟地址空间和第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间。

在本发明的一些实施例中,接收单元901还可用于,接收请求向上述文件之中写入文件内容的文件写入请求,其中,上述文件写入请求携带有读出内存地址空间和请求写入上述文件之中的第二文件内容的数据量,其中,上述读出内存地址空间为上述进程工作内存区之中的第二内存区的地址空间;

参见图9-d,上述访问文件的装置900还包括:

第三映射单元908,用于基于上述第二文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间,其中,上述写入物理地址空间为上述文件存储内存区之中的第三内存区的物理地址空间;

第二读写单元909,用于将上述第二内存区之中缓存的上述第二文件内容写入到上述第三内存区之中。

在本发明的一些实施例中,在上述基于上述第二文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间的方面,上述第三映射单元908可具体用于,基于上述第二文件内容的数据量、第二文件内容偏移量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间,其中,上述第二文件内容偏移量从上述文件写入请求之中得到,或者,上述第二文件内容偏移量从上述文件对应的文件对象之中得到。

例如,可基于第二文件内容偏移量(其中,若未从上述文件写入请求从上述文件对应的文件对象之中得到第二文件内容偏移量,则可将默认文件内容偏移量作为第二文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到向上述文件写入上述第二文件内容的起始写入虚拟地址;利用上述起始写入虚拟地址和第一虚实地址映射关系,得到向从上述文件存储内存区的上述文件中写入上述第二文件内容的起始写入物理地址;基于上述起始写入物理地址和第二文件内容的数据量,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入物理地址空间。

又例如,可基于第二文件内容偏移量(其中,若未从上述文件写入请求从上述文件对应的文件对象之中得到第二文件内容偏移量,则可将默认文件内容偏移量作为第二文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到向上述文件中上述第二文件内容的起始写入虚拟地址;基于起始写入虚拟地址和第二文件内容的数据量,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入虚拟地址空间;利用上述写入虚拟地址空间和第一虚实地址映射关系,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入物理地址空间。

其中,上述第三内存区的存储容量可以大于或者等于上述第二文件内容的数据量。其中,第三内存区和上述第一物理地址空间对应的内存区具有交集或没有交集。可以理解的是,在通常情况下,若第三内存区和上述第一物理地址空间对应的内存区具有交集,则可以表示用第二文件内容替换了上述文件中原有的部分或者全部文件内容(若第三内存区和上述第一物理地址空间对应的内存区的交集小于第三内存区,表示为第二文件内容分配了新的内存区,即存储上述文件的内存区发生了变化,存储上述文件的内存区被扩容了)。若第三内存区和上述第一物理地址空间对应的内存区没有交集,则可以表示上述文件中新增了第二文件内容,第三内存区是为第二文件内容分配了新内存区,即存储上述文件的内存区发生了变化,存储上述文件的内存区被扩容了。

进一步的,若文件存储内存区中存储上述文件的内存区发生了变化,映射单元904可更新第一文件页表,以使得更新后的第一文件页表指向文件存储内存区中当前存储上述文件的内存区。

当然,进一步的,映射单元904可将上述内存页表中记录的上述第一虚实地址映射关系更新为第三虚实地址映射关系,上述第三虚实地址映射关系包括上述第一虚拟地址空间与上述第三物理地址空间之间的映射关系,其中,上述第三物理地址空间为文件存储内存区中当前存储上述文件的内存区的物理地址空间。其中,若内存页表中记录的是指向第一文件页表的指针(例如内存页表中记录的第一文件页表的起始物理地址),若更新之后的第一文件页表的起始物理地址未变化,则也可以不修改内存页表中记录的是指向第一文件页表的指针。而在这种情况下,更新第一文件页表而无需修改内存页表,即可重建虚实地址映射关系,极大的简化了映射操作。

在本发明的一些实施例中,接收单元901还可用于,接收用于请求关闭上述文件的文件关闭请求。

参见图9-e,访问文件的装置900还可包括:释放单元910,用于释放为上述文件分配的第一虚拟地址空间;释放上述内存页表中记录的上述第一虚实地址映射关系。

在本发明的一些实施例中,访问文件的装置900还可包括:

创建单元,用于当确定上述文件存储内存区之中未存储有上述文件标识所表示的文件,在上述文件存储内存区之中创建上述文件,为上述文件分配第二索引节点,其中,上述第二索引节点中记录有第二文件页表或者用于指向第二文件页表的指针,其中,上述第二文件页表用于指向上述文件存储内存区之中存储上述文件的内存区。

分配单元903还可用于,为上述文件分配第二虚拟地址空间。

映射单元904还可用于,利用内存页表记录第二虚实地址映射关系。

其中,上述第二虚实地址映射关系包括上述第二虚拟地址空间与上述第二物理地址空间之间的映射关系,其中,上述第二物理地址空间为上述文件存储内存区之中存储上述文件的内存区的物理地址空间,上述内存页表包括内核内存页表和/或用户进程内存页表。

在本发明的一些实施例中,上述第二文件页表的级数与上述文件的文件类型之间具有对应关系。

在本发明的一些实施例中,上述文件存储内存区包括非易失性内存区和/或易失性内存区。

可以理解的是,本实施例的访问文件的装置900的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。

可以看出,本实施例的上述技术方案之中,访问文件的装置900可在接收携带文件标识的文件打开请求之后;获得上述文件标识所表示的文件的第一索引节点,并基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间;为上述文件分配第一虚拟地址空间;利用内存页表记录第一虚实地址映射关系;其中,上述第一虚实地址映射关系为上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,这有利于极大的提高文件访问性能。可见,上述文件访问方案比较适用于在文件系统常驻内存场景下进行文件高性能访问。并且,由于是在请求打开文件时才为文件分配虚拟地址空间,这样有利于减少系统虚拟地址空间的无效占用和地址冲突可能性,有利于提高系统虚拟地址空间的利用效率。

进一步的,由于在打开文件过程中可为文件分配连续虚拟地址空间,因此有利于实现从读写文件的起始虚拟地址开始,一次性访问所需读写长度之内的内存页,而不需要在软件层面多次查找不同内存页的对应虚拟地址,这样文件顺序访问速度可以非常快。

借助MMU可透明地完成文件的虚拟地址和物理地址之间的转换,这有利于加快文件访问速度快、甚至实现零开销。

进一步的,若采用数据结构与内存页表类似或相同的文件页表来指向文件存储内存区中存储文件内容的内存页,由于文件页表与内存页表的数据结构类似或相同,有利于实现页表数据结构的零转换,并且当存储文件内容的内存页发生变化时也可能无需对文件页表执行重建文件物理地址空间与虚拟地址空间的映射关系的操作,通过更新文件页表,将用于指向更新的文件页表的指针插入文件页表的表项中,进而完成重建文件物理地址与虚拟地址的映射,这种方式有利于在与文件大小无关的常数时间之内,重建文件物理地址与虚拟地址的映射。

进一步的,由于可以为不同的文件分配独立的虚拟地址空间,使得文件系统在文件存储内存区的文件受系统虚拟地址和MMU的保护,极大的减少被误写的可能性,不仅可以良好的保护文件,且不需要额外的写保护机制,有利于简化系统。

进一步的,由于是通过虚拟地址访问文件,文件的大小只受系统虚拟地址空间的大小,以及操作系统支持的同时打开的文件数量的影响,这两者都不是文件系统本身的限制,因此文件大小可不受文件系统本身设计限制。

进一步的,文件系统采用与内存管理相似的方式,都是通过虚拟地址访问存储介质,且都可利用MMU进行虚拟地址和物理地址的转换,对内核的改动可以相对较少,这样也便于文件系统移植到现有的操作系统中。

参见图10,图10为本发明实施例提供的计算节点1000的示意图,计算节点1000可包括至少一个总线1001、与总线1001相连的至少一个处理器1002以及与总线1001相连的至少一个存储器1003。

其中,存储器1003可包括内存,还可包括外存。上述内存可包括:文件存储内存区和进程工作内存区,其中,上述进程工作内存区存储有内存页表,上述进程工作内存区之中运行有操作系统。例如,上述进程工作内存区可包括内核进程工作内存区和用户进程工作内存区,其中,内核内存页表可存储于内核进程工作内存区,用户进程内存页表可存储于上述用户进程工作内存区。

其中,处理器1002通过总线1001,调用存储器1003中存储的代码以用于接收携带文件标识的文件打开请求;获得上述文件标识所表示的文件的第一索引节点,其中,上述文件存储于文件存储内存区之中;基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间;为上述文件分配第一虚拟地址空间;利用内存页表记录第一虚实地址映射关系;其中,上述第一虚实地址映射关系包括上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。

在本发明一些实施例中,上述文件打开请求可以携带文件存储路径(即请求打开的文件的存储路径),其中,上述文件标识可包含在上述文件存储路径之中,当然,上述文件打开请求中也可能携带文件标识并且可不携带文件存储路径。进一步的,上述文件打开请求中还可携带文件类型标志位,该文件类型标志位可指示出上述文件标识所表示的文件的文件类型(文件类型可能是目录文件或数据文件)。

在本发明的一些实施例中,在上述基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间的方面,处理器1002通过总线1001,调用存储器1003中存储的代码以具体用于,基于上述第一索引节点中记录的第一文件页表或用于指向第一文件页表的指针,得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间,其中,上述第一文件页表用于指向上述文件存储内存区之中存储上述文件的内存区,上述的第一物理地址空间为上述文件存储内存区之中存储上述文件的内存区的物理地址空间,上述第一文件页表为单级或多级文件页表。

其中,进程工作内存区是指,用于存放进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,上述数据结构和变量可包括如下信息的至少一种:进程运行时的堆、栈、内存映射区、进程所对应的程序的变量、字符和数组等数据。

举例来说,用户进程工作内存区可以是指,用于存放用户进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,用户进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:用户进程运行时的堆、栈、内存映射区、用户进程所对应的程序的变量、字符和数组等数据。

又举例来说,内核进程工作内存区可以是指,用于存放内核进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,内核进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:内核进程运行时的堆、栈、内存映射区、内核进程所对应的程序的变量、字符和数组等数据。

其中,文件存储内存区可指用于存储文件系统的物理内存区域,文件存储内存区中可存放文件系统本身的各种信息,例如,文件存储内存区中可存放文件系统的索引节点和文件,还可进一步存放文件系统的超级块(若存在)等等信息。

在本发明一些实施例中,上述文件存储内存区可包括非易失性内存区和/或易失性内存区(即,文件存储内存区的存储介质包括非易失性存储介质和/或易失性存储介质)。其中,进程工作内存区(如内核进程工作内存区、用户进程工作内存区)可包括非易失性内存区和/或易失性内存区(即进程工作内存区的存储介质包括非易失性存储介质和/或易失性存储介质)。其中,进程工作内存区(如内核进程工作内存区、用户进程工作内存区)和文件存储内存区互不重叠。

在本发明的一些实施例中,在上述利用内存页表记录第一虚实地址映射关系的方面,处理器1002通过总线1001,调用存储器1003中存储的代码以具体用于,在内存页表中增加用于记录上述第一虚实地址映射关系的表项,上述表项包含上述第一文件页表或用于指向上述第一文件页表的指针。

在本发明的一些实施例中,上述内存页表的总级数为Y,上述第一文件页表的总级数为X,若上述表项包含上述第一文件页表,则上述表项为上述内存页表中的第Y-X+1级内存页表中的表项,若上述表项包含用于指向上述第一文件页表的指针,则上述表项为上述内存页表中的第Y-X级内存页表中的表项,上述X为正整数,上述Y为大于上述X的正整数。

在本发明的一些实施例中,处理器1002通过总线1001,调用存储器1003中存储的代码以还用于,在上述第一索引节点中记录上述第一虚拟地址空间和/或上述第一虚拟地址空间的起始地址,和/或,在上述文件对应的文件对象之中记录上述第一虚拟地址空间和/或上述第一虚拟地址空间的起始地址。

在本发明的一些实施例中,上述第一虚拟地址空间为连续的或者非连续的虚拟地址空间。

在本发明的一些实施例中,上述第一虚拟地址空间处于内核虚拟地址空间或者用户进程虚拟地址空间。

在本发明的一些实施例中,在上述获得上述文件标识所表示的文件的第一索引节点的方面,处理器1002通过总线1001,调用存储器1003中存储的代码以具体用于,当确定上述文件存储内存区之中存储有上述文件标识所表示的文件,获得上述文件标识所表示的文件的第一索引节点。

在本发明的一些实施例中,处理器1002通过总线1001,调用存储器1003中存储的代码以还用于,接收用于请求读取上述文件的文件内容的文件读取请求,其中,上述文件读取请求携带有读入内存地址空间和请求读取的上述文件中的第一文件内容的数据量,其中,上述读入内存地址空间为用户进程工作内存区之中的第一内存区的地址空间;基于上述第一文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间;基于上述读取物理地址空间,从上述文件存储内存区之中读取出上述文件的第一文件内容;将上述第一文件内容写入上述第一内存区。

在本发明的一些实施例中,在上述基于上述第一文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间的方面,处理器1002通过总线1001,调用存储器1003中存储的代码以具体用于,

基于上述第一文件内容的数据量、第一文件内容偏移量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间,其中,上述第一文件内容偏移量从上述文件读取请求之中得到,或者,上述第一文件内容偏移量从上述文件对应的文件对象之中得到。

例如,可基于第一文件内容偏移量(其中,若未从上述文件读取请求从上述文件对应的文件对象之中得到第一文件内容偏移量,则可将默认文件内容偏移量作为第一文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到读取上述第一文件内容的起始读取虚拟地址;利用上述起始读取虚拟地址和第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的起始读取物理地址;基于上述起始读取物理地址和第一文件内容的数据量,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间。

又例如,可基于第一文件内容偏移量(其中,若未从上述文件读取请求从上述文件对应的文件对象之中得到第一文件内容偏移量,则可将默认文件内容偏移量作为第一文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到读取上述第一文件内容的起始读取虚拟地址;基于起始读取虚拟地址和第一文件内容的数据量,得到读取上述第一文件内容的读取虚拟地址空间;利用上述读取虚拟地址空间和第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间。

在本发明的一些实施例中,处理器1002通过总线1001,调用存储器1003中存储的代码以还用于,接收请求向上述文件之中写入文件内容的文件写入请求,其中,上述文件写入请求携带有读出内存地址空间和请求写入上述文件之中的第二文件内容的数据量,其中,上述读出内存地址空间为上述进程工作内存区之中的第二内存区的地址空间;

基于上述第二文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间,其中,上述写入物理地址空间为上述文件存储内存区之中的第三内存区的物理地址空间;

将上述第二内存区之中缓存的上述第二文件内容写入到上述第三内存区之中。

在本发明的一些实施例中,在上述基于上述第二文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间的方面,处理器1002通过总线1001,调用存储器1003中存储的代码以具体用于,

基于上述第二文件内容的数据量、第二文件内容偏移量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间,其中,上述第二文件内容偏移量从上述文件写入请求之中得到,或者,上述第二文件内容偏移量从上述文件对应的文件对象之中得到。

例如,可基于第二文件内容偏移量(其中,若未从上述文件写入请求从上述文件对应的文件对象之中得到第二文件内容偏移量,则可将默认文件内容偏移量作为第二文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到向上述文件写入上述第二文件内容的起始写入虚拟地址;利用上述起始写入虚拟地址和第一虚实地址映射关系,得到向从上述文件存储内存区的上述文件中写入上述第二文件内容的起始写入物理地址;基于上述起始写入物理地址和第二文件内容的数据量,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入物理地址空间。

又例如,可基于第二文件内容偏移量(其中,若未从上述文件写入请求从上述文件对应的文件对象之中得到第二文件内容偏移量,则可将默认文件内容偏移量作为第二文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到向上述文件中上述第二文件内容的起始写入虚拟地址;基于起始写入虚拟地址和第二文件内容的数据量,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入虚拟地址空间;利用上述写入虚拟地址空间和第一虚实地址映射关系,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入物理地址空间。

其中,上述第三内存区的存储容量可以大于或者等于上述第二文件内容的数据量。其中,第三内存区和上述第一物理地址空间对应的内存区具有交集或没有交集。可以理解的是,在通常情况下,若第三内存区和上述第一物理地址空间对应的内存区具有交集,则可以表示用第二文件内容替换了上述文件中原有的部分或者全部文件内容(若第三内存区和上述第一物理地址空间对应的内存区的交集小于第三内存区,表示为第二文件内容分配了新的内存区,即存储上述文件的内存区发生了变化,存储上述文件的内存区被扩容了)。若第三内存区和上述第一物理地址空间对应的内存区没有交集,则可以表示上述文件中新增了第二文件内容,第三内存区是为第二文件内容分配了新内存区,即存储上述文件的内存区发生了变化,存储上述文件的内存区被扩容了。

进一步的,若文件存储内存区中存储上述文件的内存区发生了变化,处理器1002可更新第一文件页表,以使得更新后的第一文件页表指向文件存储内存区中当前存储上述文件的内存区。

当然,进一步的,处理器1002可将上述内存页表中记录的上述第一虚实地址映射关系更新为第三虚实地址映射关系,上述第三虚实地址映射关系包括上述第一虚拟地址空间与上述第三物理地址空间之间的映射关系,其中,上述第三物理地址空间为文件存储内存区中当前存储上述文件的内存区的物理地址空间。其中,若内存页表中记录的是指向第一文件页表的指针(例如内存页表中记录的第一文件页表的起始物理地址),若更新后的第一文件页表的起始物理地址未变化,可不修改内存页表中记录的是指向第一文件页表的指针。而在这种情况下,更新第一文件页表而无需修改内存页表,即可重建虚实地址映射关系,极大的简化了映射操作。

在本发明的一些实施例中,处理器1002通过总线1001,调用存储器1003中存储的代码以还用于,接收用于请求关闭上述文件的文件关闭请求;释放为上述文件分配的第一虚拟地址空间;释放上述内存页表中记录的上述第一虚实地址映射关系。

在本发明的一些实施例中,处理器1002通过总线1001,调用存储器1003中存储的代码以还用于,当确定上述文件存储内存区之中未存储有上述文件标识所表示的文件,在上述文件存储内存区之中创建上述文件,为上述文件分配第二索引节点,其中,上述第二索引节点中记录有第二文件页表或者用于指向第二文件页表的指针,其中,上述第二文件页表用于指向上述文件存储内存区之中存储上述文件的内存区;为上述文件分配第二虚拟地址空间;利用内存页表记录第二虚实地址映射关系;其中,上述第二虚实地址映射关系包括上述第二虚拟地址空间与上述第二物理地址空间之间的映射关系,其中,上述第二物理地址空间为上述文件存储内存区之中存储上述文件的内存区的物理地址空间,上述内存页表包括内核内存页表和/或用户进程内存页表。

在本发明另一些实施例中,接收携带文件标识的文件打开请求之后,当确定上述文件存储内存区中未存储有上述文件标识所表示的文件,在上述文件存储内存区之中创建上述文件,为上述文件分配第三索引节点,此时处理器1002可先不创建该文件的文件页表或创建该文件的空文件页表(其中,若创建该文件的空文件页表,则第三索引节点中可包含上述空文件页表或者用于指向上述空文件页表的指针),当需要向创建的上述文件中写入文件内容时,处理器1002可扩容存储上述文件的内存区(如从10MB扩容至1000MB),处理器1002更新上述文件的文件页表以使得更新后的文件页表指向扩容之后的存储上述文件的内存区。

在本发明的一些实施例中,上述第二文件页表的级数与上述文件的文件类型之间具有对应关系。

在本发明的一些实施例中,上述文件存储内存区包括非易失性内存区和/或易失性内存区。

可以理解的是,本实施例的计算节点1000的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。

其中,计算节点1000可为服务器、个人计算机、网元、移动终端等等具有内存的设备。

可以看出,本实施例的上述技术方案之中,处理器在接收携带文件标识的文件打开请求之后;获得上述文件标识所表示的文件的第一索引节点,并基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间;为上述文件分配第一虚拟地址空间;利用内存页表记录第一虚实地址映射关系;其中,上述第一虚实地址映射关系为上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见,上述文件访问方案比较适用于在文件系统常驻内存场景下进行文件高性能访问。并且,由于是在请求打开文件时才为文件分配虚拟地址空间,这样有利于减少系统虚拟地址空间的无效占用和地址冲突可能性,有利于提高系统虚拟地址空间的利用效率。

进一步的,由于在打开文件过程中可为文件分配连续虚拟地址空间,因此有利于实现从读写文件的起始虚拟地址开始,一次性访问所需读写长度之内的内存页,而不需要在软件层面多次查找不同内存页的对应虚拟地址,这样文件顺序访问速度可以非常快。

借助MMU可透明地完成文件的虚拟地址和物理地址之间的转换,这有利于加快文件访问速度快、甚至实现零开销。

进一步的,若采用数据结构与内存页表类似或相同的文件页表来指向文件存储内存区中存储文件内容的内存页,由于文件页表与内存页表的数据结构类似或相同,有利于实现页表数据结构的零转换,并且当存储文件内容的内存页发生变化时也可能无需对文件页表执行重建文件物理地址空间与虚拟地址空间的映射关系的操作,通过更新文件页表,将用于指向更新的文件页表的指针插入文件页表的表项中,进而完成重建文件物理地址与虚拟地址的映射,这种方式有利于在与文件大小无关的常数时间之内,重建文件物理地址与虚拟地址的映射。

进一步的,由于可以为不同的文件分配独立的虚拟地址空间,使得文件系统在文件存储内存区的文件受系统虚拟地址和MMU的保护,极大的减少被误写的可能性,不仅可以良好的保护文件,且不需要额外的写保护机制,有利于简化系统。

进一步的,由于是通过虚拟地址访问文件,文件的大小只受系统虚拟地址空间的大小,以及操作系统支持的同时打开的文件数量的影响,这两者都不是文件系统本身的限制,因此文件大小可不受文件系统本身设计限制。

进一步的,文件系统采用与内存管理相似的方式,都是通过虚拟地址访问存储介质,且都可利用MMU进行虚拟地址和物理地址的转换,对内核的改动可以相对较少,这样也便于文件系统移植到现有的操作系统中。

参见图11,图11是本发明另一实施例提供的计算节点1100的结构框图。

其中,计算节点1100可以包括:至少一个处理器1101,至少一个网络接口1104或者其他用户接口1103,存储器1105,至少一个通信总线1102。通信总线1102用于实现这些组件之间的连接通信。其中,该计算节点1100可选的包含用户接口1103,包括:显示器(例如,触摸屏、LCD、CRT、全息成像(Holographic)或者投影(Projector)等)、点击设备(例如,鼠标,轨迹球(trackball)触感板或触摸屏等)、摄像头和/或拾音装置等。

其中,存储器1102例如可包括只读存储器和随机存取存储器,并向处理器1101提供指令和数据。

存储器1102中的一部分还包括非易失性内存(NVRAM)等。

举例来说,其中,存储器1102可包括内存,还可包括外存。上述内存可以包括:文件存储内存区和进程工作内存区,其中,上述进程工作内存区存储有内存页表,上述进程工作内存区之中运行有操作系统。例如,上述进程工作内存区可包括内核进程工作内存区和用户进程工作内存区,其中,内核内存页表可存储于内核进程工作内存区,用户进程内存页表可存储于上述用户进程工作内存区。。

在一些实施方式中,存储器1105存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:

操作系统11051,包含各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。

应用程序模块11052,包含各种应用程序,用于实现各种应用业务。

在本发明实施例中,通过调用存储器1105存储的程序或指令,处理器1101接收携带文件标识的文件打开请求;获得上述文件标识所表示的文件的第一索引节点,其中,上述文件存储于文件存储内存区之中;基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间;为上述文件分配第一虚拟地址空间;利用内存页表记录第一虚实地址映射关系;其中,上述第一虚实地址映射关系包括上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。

在本发明一些实施例中,上述文件打开请求可以携带文件存储路径(即请求打开的文件的存储路径),其中,上述文件标识可包含在上述文件存储路径之中,当然,上述文件打开请求中也可能携带文件标识并且可不携带文件存储路径。进一步的,上述文件打开请求中还可携带文件类型标志位,该文件类型标志位可指示出上述文件标识所表示的文件的文件类型(文件类型可能是目录文件或数据文件)。

在本发明的一些实施例中,在上述基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间的方面,通过调用存储器1105存储的程序或指令,处理器1101以具体用于,基于上述第一索引节点中记录的第一文件页表或用于指向第一文件页表的指针,得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间,其中,上述第一文件页表用于指向上述文件存储内存区之中存储上述文件的内存区,上述的第一物理地址空间为上述文件存储内存区之中存储上述文件的内存区的物理地址空间,上述第一文件页表为单级或多级文件页表。

其中,进程工作内存区是指,用于存放进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,上述数据结构和变量可包括如下信息的至少一种:进程运行时的堆、栈、内存映射区、进程所对应的程序的变量、字符和数组等数据。

举例来说,用户进程工作内存区可以是指,用于存放用户进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,用户进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:用户进程运行时的堆、栈、内存映射区、用户进程所对应的程序的变量、字符和数组等数据。

又举例来说,内核进程工作内存区可以是指,用于存放内核进程运行时的工作环境所包含的数据结构和变量等内容的物理内存区域。其中,内核进程工作内存区存放的上述数据结构和变量例如可包括如下信息的至少一种:内核进程运行时的堆、栈、内存映射区、内核进程所对应的程序的变量、字符和数组等数据。

其中,文件存储内存区可指用于存储文件系统的物理内存区域,文件存储内存区中可存放文件系统本身的各种信息,例如,文件存储内存区中可存放文件系统的索引节点和文件,还可进一步存放文件系统的超级块(若存在)等等信息。

在本发明一些实施例中,上述文件存储内存区可包括非易失性内存区和/或易失性内存区(即,文件存储内存区的存储介质包括非易失性存储介质和/或易失性存储介质)。其中,进程工作内存区(如内核进程工作内存区、用户进程工作内存区)可包括非易失性内存区和/或易失性内存区(即进程工作内存区的存储介质包括非易失性存储介质和/或易失性存储介质)。其中,进程工作内存区(如内核进程工作内存区、用户进程工作内存区)和文件存储内存区互不重叠。

在本发明的一些实施例中,在上述利用内存页表记录第一虚实地址映射关系的方面,通过调用存储器1105存储的程序或指令,处理器1101以具体用于在内存页表中增加用于记录上述第一虚实地址映射关系的表项,上述表项包含上述第一文件页表或用于指向上述第一文件页表的指针。

在本发明的一些实施例中,上述内存页表的总级数为Y,上述第一文件页表的总级数为X,若上述表项包含上述第一文件页表,则上述表项为上述内存页表中的第Y-X+1级内存页表中的表项,若上述表项包含用于指向上述第一文件页表的指针,则上述表项为上述内存页表中的第Y-X级内存页表中的表项,上述X为正整数,上述Y为大于上述X的正整数。

在本发明的一些实施例中,通过调用存储器1105存储的程序或指令,处理器1101还用于,在上述第一索引节点中记录上述第一虚拟地址空间和/或上述第一虚拟地址空间的起始地址,和/或,在上述文件对应的文件对象之中记录上述第一虚拟地址空间和/或上述第一虚拟地址空间的起始地址。

在本发明的一些实施例中,上述第一虚拟地址空间为连续的或者非连续的虚拟地址空间。

在本发明的一些实施例中,上述第一虚拟地址空间处于内核虚拟地址空间或者用户进程虚拟地址空间。

在本发明的一些实施例中,在上述获得上述文件标识所表示的文件的第一索引节点的方面,通过调用存储器1105存储的程序或指令,处理器1101具体用于当确定上述文件存储内存区之中存储有上述文件标识所表示的文件,获得上述文件标识所表示的文件的第一索引节点。

在本发明的一些实施例中,通过调用存储器1105存储的程序或指令,处理器1101还用于,接收用于请求读取上述文件的文件内容的文件读取请求,其中,上述文件读取请求携带有读入内存地址空间和请求读取的上述文件中的第一文件内容的数据量,其中,上述读入内存地址空间为用户进程工作内存区之中的第一内存区的地址空间;基于上述第一文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间;基于上述读取物理地址空间,从上述文件存储内存区之中读取出上述文件的第一文件内容;将上述第一文件内容写入上述第一内存区。

在本发明的一些实施例中,在上述基于上述第一文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间的方面,通过调用存储器1105存储的程序或指令,处理器1101具体用于,

基于上述第一文件内容的数据量、第一文件内容偏移量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间,其中,上述第一文件内容偏移量从上述文件读取请求之中得到,或者,上述第一文件内容偏移量从上述文件对应的文件对象之中得到。

例如,可基于第一文件内容偏移量(其中,若未从上述文件读取请求从上述文件对应的文件对象之中得到第一文件内容偏移量,则可将默认文件内容偏移量作为第一文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到读取上述第一文件内容的起始读取虚拟地址;利用上述起始读取虚拟地址和第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的起始读取物理地址;基于上述起始读取物理地址和第一文件内容的数据量,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间。

又例如,可基于第一文件内容偏移量(其中,若未从上述文件读取请求从上述文件对应的文件对象之中得到第一文件内容偏移量,则可将默认文件内容偏移量作为第一文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到读取上述第一文件内容的起始读取虚拟地址;基于起始读取虚拟地址和第一文件内容的数据量,得到读取上述第一文件内容的读取虚拟地址空间;利用上述读取虚拟地址空间和第一虚实地址映射关系,得到从上述文件存储内存区读取上述第一文件内容的读取物理地址空间。

在本发明的一些实施例中,通过调用存储器1105存储的程序或指令,处理器1101还用于,接收请求向上述文件之中写入文件内容的文件写入请求,其中,上述文件写入请求携带有读出内存地址空间和请求写入上述文件之中的第二文件内容的数据量,其中,上述读出内存地址空间为上述进程工作内存区之中的第二内存区的地址空间;

基于上述第二文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间,其中,上述写入物理地址空间为上述文件存储内存区之中的第三内存区的物理地址空间;

将上述第二内存区之中缓存的上述第二文件内容写入到上述第三内存区之中。

在本发明的一些实施例中,在上述基于上述第二文件内容的数据量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间的方面,通过调用存储器1105存储的程序或指令,处理器1101具体用于,

基于上述第二文件内容的数据量、第二文件内容偏移量、上述第一虚拟地址空间和上述内存页表记录的上述第一虚实地址映射关系,得到向上述文件存储内存区写入上述第二文件内容的写入物理地址空间,其中,上述第二文件内容偏移量从上述文件写入请求之中得到,或者,上述第二文件内容偏移量从上述文件对应的文件对象之中得到。

例如,可基于第二文件内容偏移量(其中,若未从上述文件写入请求从上述文件对应的文件对象之中得到第二文件内容偏移量,则可将默认文件内容偏移量作为第二文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到向上述文件写入上述第二文件内容的起始写入虚拟地址;利用上述起始写入虚拟地址和第一虚实地址映射关系,得到向从上述文件存储内存区的上述文件中写入上述第二文件内容的起始写入物理地址;基于上述起始写入物理地址和第二文件内容的数据量,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入物理地址空间。

又例如,可基于第二文件内容偏移量(其中,若未从上述文件写入请求从上述文件对应的文件对象之中得到第二文件内容偏移量,则可将默认文件内容偏移量作为第二文件内容偏移量)和上述第一虚拟地址空间的起始地址,得到向上述文件中上述第二文件内容的起始写入虚拟地址;基于起始写入虚拟地址和第二文件内容的数据量,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入虚拟地址空间;利用上述写入虚拟地址空间和第一虚实地址映射关系,得到向上述文件存储内存区的上述文件中写入上述第二文件内容的写入物理地址空间。

其中,上述第三内存区的存储容量可以大于或者等于上述第二文件内容的数据量。其中,第三内存区和上述第一物理地址空间对应的内存区具有交集或没有交集。可以理解的是,在通常情况下,若第三内存区和上述第一物理地址空间对应的内存区具有交集,则可以表示用第二文件内容替换了上述文件中原有的部分或者全部文件内容(若第三内存区和上述第一物理地址空间对应的内存区的交集小于第三内存区,表示为第二文件内容分配了新的内存区,即存储上述文件的内存区发生了变化,存储上述文件的内存区被扩容了)。若第三内存区和上述第一物理地址空间对应的内存区没有交集,则可以表示上述文件中新增了第二文件内容,第三内存区是为第二文件内容分配了新内存区,即存储上述文件的内存区发生了变化,存储上述文件的内存区被扩容了。

进一步的,若文件存储内存区中存储上述文件的内存区发生了变化,处理器1101可更新第一文件页表,以使得更新后的第一文件页表指向文件存储内存区中当前存储上述文件的内存区。

当然,进一步的,处理器1101可将上述内存页表中记录的上述第一虚实地址映射关系更新为第三虚实地址映射关系,上述第三虚实地址映射关系包括上述第一虚拟地址空间与上述第三物理地址空间之间的映射关系,其中,上述第三物理地址空间为文件存储内存区中当前存储上述文件的内存区的物理地址空间。其中,若内存页表中记录的是指向第一文件页表的指针(例如内存页表中记录的第一文件页表的起始物理地址),若更新后的第一文件页表的起始物理地址未变化,可不修改内存页表中记录的是指向第一文件页表的指针。而在这种情况下,更新第一文件页表而无需修改内存页表,即可重建虚实地址映射关系,极大的简化了映射操作。

在本发明的一些实施例中,通过调用存储器1105存储的程序或指令,处理器1101还用于,接收用于请求关闭上述文件的文件关闭请求;释放为上述文件分配的第一虚拟地址空间;释放上述内存页表中记录的上述第一虚实地址映射关系。

在本发明的一些实施例中,通过调用存储器1105存储的程序或指令,处理器1101还用于,当确定上述文件存储内存区之中未存储有上述文件标识所表示的文件,在上述文件存储内存区之中创建上述文件,为上述文件分配第二索引节点,其中,上述第二索引节点中记录有第二文件页表或者用于指向第二文件页表的指针,其中,上述第二文件页表用于指向上述文件存储内存区之中存储上述文件的内存区;为上述文件分配第二虚拟地址空间;利用内存页表记录第二虚实地址映射关系;其中,上述第二虚实地址映射关系包括上述第二虚拟地址空间与上述第二物理地址空间之间的映射关系,其中,上述第二物理地址空间为上述文件存储内存区之中存储上述文件的内存区的物理地址空间,上述内存页表包括内核内存页表和/或用户进程内存页表。

在本发明另一些实施例中,接收携带文件标识的文件打开请求之后,当确定上述文件存储内存区中未存储有上述文件标识所表示的文件,在上述文件存储内存区之中创建上述文件,为上述文件分配第三索引节点,此时处理器1101可先不创建该文件的文件页表或创建该文件的空文件页表(其中,若创建该文件的空文件页表,则第三索引节点中可包含上述空文件页表或者用于指向上述空文件页表的指针),当需要向创建的上述文件中写入文件内容时,处理器1101可扩容存储上述文件的内存区(如从10MB扩容至1100MB),处理器1101更新上述文件的文件页表以使得更新后的文件页表指向扩容之后的存储上述文件的内存区。

在本发明的一些实施例中,上述第二文件页表的级数与上述文件的文件类型之间具有对应关系。

在本发明的一些实施例中,上述文件存储内存区包括非易失性内存区和/或易失性内存区。

可以理解的是,本实施例的计算节点1100的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。

可以看出,本实施例的上述技术方案之中,处理器在接收携带文件标识的文件打开请求之后;获得上述文件标识所表示的文件的第一索引节点,并基于上述第一索引节点得到上述文件存储内存区之中存储上述文件的内存区的第一物理地址空间;为上述文件分配第一虚拟地址空间;利用内存页表记录第一虚实地址映射关系;其中,上述第一虚实地址映射关系为上述第一虚拟地址空间与上述第一物理地址空间之间的映射关系,其中,上述内存页表包括内核内存页表和/或用户进程内存页表。由于是利用内核内存页表和/或用户进程内存页表来记录第一虚实地址映射关系,可认为是在一定程度上将文件存储内存区之中存储上述文件的内存区的第一物理地址空间,包装成进程工作内存区之中的某内存区对应的物理地址空间,这有利于使得内核或用户进程按照类似访问进程工作内存区的方式来访文件存储内存区中文件,这样有利于实现内核或用户进程以近似普通内存数据的访问性能来访问常驻内核的文件系统的文件,有利于极大的提高文件访问性能。可见,上述文件访问方案比较适用于在文件系统常驻内存场景下进行文件高性能访问。并且,由于是在请求打开文件时才为文件分配虚拟地址空间,这样有利于减少系统虚拟地址空间的无效占用和地址冲突可能性,有利于提高系统虚拟地址空间的利用效率。

进一步的,由于在打开文件过程中可为文件分配连续虚拟地址空间,因此有利于实现从读写文件的起始虚拟地址开始,一次性访问所需读写长度之内的内存页,而不需要在软件层面多次查找不同内存页的对应虚拟地址,这样文件顺序访问速度可以非常快。

借助MMU可透明地完成文件的虚拟地址和物理地址之间的转换,这有利于加快文件访问速度快、甚至实现零开销。

进一步的,若采用数据结构与内存页表类似或相同的文件页表来指向文件存储内存区中存储文件内容的内存页,由于文件页表与内存页表的数据结构类似或相同,有利于实现页表数据结构的零转换,并且当存储文件内容的内存页发生变化时也可能无需对文件页表执行重建文件物理地址空间与虚拟地址空间的映射关系的操作,通过更新文件页表,将用于指向更新的文件页表的指针插入文件页表的表项中,进而完成重建文件物理地址与虚拟地址的映射,这种方式有利于在与文件大小无关的常数时间之内,重建文件物理地址与虚拟地址的映射。

进一步的,由于可以为不同的文件分配独立的虚拟地址空间,使得文件系统在文件存储内存区的文件受系统虚拟地址和MMU的保护,极大的减少被误写的可能性,不仅可以良好的保护文件,且不需要额外的写保护机制,有利于简化系统。

进一步的,由于是通过虚拟地址访问文件,文件的大小只受系统虚拟地址空间的大小,以及操作系统支持的同时打开的文件数量的影响,这两者都不是文件系统本身的限制,因此文件大小可不受文件系统本身设计限制。

进一步的,文件系统采用与内存管理相似的方式,都是通过虚拟地址访问存储介质,且都可利用MMU进行虚拟地址和物理地址的转换,对内核的改动可以相对较少,这样也便于文件系统移植到现有的操作系统中。

本发明各实施例的计算节点可为服务器、个人计算机、网元、移动终端等等具有内存的设备。

本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的至少一种访问文件的方法的部分或全部步骤。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以为个人计算机、服务器或者网络设备等,具体可以是计算机设备中的处理器)执行本发明各个实施例所述方法的全部或部分步骤。其中,而前述的存储介质可包括:U盘、移动硬盘、磁碟、光盘、只读存储器(ROM,Read-Only Memory)或者随机存取存储器(RAM,Random Access Memory)等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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