访问文件的方法、装置和存储系统与流程

文档序号:16905980发布日期:2019-02-19 18:21阅读:250来源:国知局
访问文件的方法、装置和存储系统与流程

本发明实施例涉及计算机领域,并且更具体地,涉及一种访问文件的方法、装置和存储系统。



背景技术:

传统技术中,只有在内核空间中才可以访问文件系统,当进程要访问文件系统中的目标文件时,需要执行系统调用,从用户空间切换到内核空间执行目标文件的访问,这种方式会影响访问文件的速度,同时会产生较大的软件运行开销。

因此需要提出一种可以实现直接在用户空间下访问文件的方法。



技术实现要素:

本发明实施例提供了一种访问文件的方法、装置和存储系统,能够在产生较小软件运行开销的情况下,实现在用户空间访问文件。

第一方面,提供了一种访问文件的方法,该方法包括:

接收来自进程的文件访问请求,该文件访问请求包括文件标识,该文件标识用于指示要访问的目标文件;

根据预设的第一虚拟地址空间和该第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,访问该第一物理地址空间,其中,该第一虚拟地址空间为操作系统的用户空间的一部分,该第一物理地址空间为内存空间的一部分;

根据该目标文件的文件标识,在该第一物理地址空间中获取该目标文件的索引节点,该索引节点中包含有该目标文件的文件页表的信息;

根据该索引节点中包含的该目标文件的文件页表的信息,获取该目标文件的文件页表,该文件页表中记录有在该第一物理地址空间中存储的该目标文件的数据页的第二物理地址空间,该目标文件的数据页用于存储文件数据;

为该目标文件分配第二虚拟地址空间,该第二虚拟地址空间为操作系统的用户空间中为所有进程分配的共享空间的一部分,该第二虚拟地址空间为连续的地址空间;

建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系;

根据该第二虚拟地址空间以及该第二映射关系,访问该第二物理地址空间中的该目标文件。

结合第一方面,在第一方面的第一种可能的实现方式中,建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系,包括:

通过将该目标文件的文件页表链入该第二虚拟地址空间对应的进程页表的方式,建立该第二映射关系。

结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,该第二虚拟地址空间大于该第二物理地址空间;

根据该第二虚拟地址空间以及该第二映射关系,访问该第二物理地址空间中的该目标文件,包括:

根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行读操作;

当该读操作待读取的数据所对应的虚拟地址超出该目标文件所对应的虚拟地址空间时,结束该读操作。

结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,该第二虚拟地址空间大于该第二物理地址空间;

根据该第二虚拟地址空间以及该第二映射关系,访问该第二物理地址空间中的该目标文件,包括:

根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行写操作;

当该写操作待写入的数据对应的虚拟地址超出该第二虚拟地址空间时,结束该写操作。

结合第一方面和第一方面的第一种至第三种可能的实现方式中的任一种可能的实现方式,在第一方面的第四种可能的实现方式中,该方法还包括:

在内核空间,建立该第一虚拟地址空间与该第一物理地址空间之间的该第一映射关系,并将该第一映射关系对应的映射页表存储在内核空间对应的进程页表中;

在接收到来自该进程的该文件访问请求后,该方法还包括:

确定该第一虚拟地址空间对应的进程页表中未记录有该第一映射关系;

将存储在内核空间的该第一映射关系对应的映射页表链入该第一虚拟地址空间对应的进程页表中。

第二方面,提供了一种访问文件的装置,该装置包括:

接收模块,用于接收来自进程的文件访问请求,该文件访问请求包括文件标识,该文件标识用于指示要访问的目标文件;

第一访问模块,用于根据预设的第一虚拟地址空间和该第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,访问该第一物理地址空间,其中,该第一虚拟地址空间为操作系统的用户空间的一部分,该第一物理地址空间为内存空间的一部分;

获取模块,用于根据该接收模块接收的该目标文件的文件标识,在该第一物理地址空间中获取该目标文件的索引节点,该索引节点中包含有该目标文件的文件页表的信息;

该获取模块还用于,根据该索引节点中包含的该目标文件的文件页表的信息,获取该目标文件的文件页表,该文件页表中记录有在该第一物理地址空间中存储的该目标文件的数据页的第二物理地址空间,该目标文件的数据页用于存储文件数据;

分配模块,用于为该目标文件分配第二虚拟地址空间,该第二虚拟地址空间为操作系统的用户空间中为所有进程分配的共享空间的一部分,该第二虚拟地址空间为连续的地址空间;

第一建立模块,用于建立该第二物理地址空间与该分配模块分配的该第二虚拟地址空间之间的第二映射关系;

第二访问模块,用于根据该分配模块分配的该第二虚拟地址空间以及该第一建立模块建立的该第二映射关系,访问该第二物理地址空间中的该目标文件。

结合第二方面,在第二方面的第一种可能的实现方式中,该第一建立模块具体用于,通过将该目标文件的文件页表链入该第二虚拟地址空间对应的进程页表的方式,建立该第二映射关系。

结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,该分配模块分配的该第二虚拟地址空间大于该第二物理地址空间;

该第二访问模块,具体用于:

根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行读操作;

当该读操作待读取的数据所对应的虚拟地址超出该目标文件所对应的虚拟地址空间时,结束该读操作。

结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第三种可能的实现方式中,该分配模块分配的该第二虚拟地址空间大于该第二物理地址空间;

该第二访问模块,具体用于:

根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行写操作;

当该写操作待写入的数据对应的虚拟地址超出该第二虚拟地址空间时,结束该写操作。

结合第二方面和第二方面的第一种至第三种可能的实现方式中的任一种可能的实现方式,在第二方面的第四种可能的实现方式中,该装置还包括:

第二建立模块,用于在内核空间,建立该第一虚拟地址空间与该第一物理地址空间之间的该第一映射关系,并将该第一映射关系对应的映射页表存储在内核空间对应的进程页表中;

确定模块,用于在该接收模块接收到来自该进程的该文件访问请求后,确定该第一虚拟地址空间对应的进程页表中未记录有该第一映射关系;

链入模块,用于将存储在内核空间的该第二建立模块建立的该第一映射关系对应的映射页表链入该第一虚拟地址空间对应的进程页表中。

第三方面,提供了一种存储系统,该存储系统包括:

存储器,用于存储文件和程序;

处理器,用于执行所述程序,以实现:

接收来自进程的文件访问请求,该文件访问请求包括文件标识,该文件标识用于指示要访问的目标文件;

根据预设的第一虚拟地址空间和该第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,访问该第一物理地址空间,其中,该第一虚拟地址空间为操作系统的用户空间的一部分,该第一物理地址空间为内存空间的一部分;

根据该目标文件的文件标识,在该第一物理地址空间中获取该目标文件的索引节点,该索引节点中包含有该目标文件的文件页表的信息;

根据该索引节点中包含的该目标文件的文件页表的信息,获取该目标文件的文件页表,该文件页表中记录有在该第一物理地址空间中存储的该目标文件的数据页的第二物理地址空间,该目标文件的数据页用于存储文件数据;

为该目标文件分配第二虚拟地址空间,该第二虚拟地址空间为操作系统的用户空间中为所有进程分配的共享空间的一部分,该第二虚拟地址空间为连续的地址空间;

建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系;

根据该第二虚拟地址空间以及该第二映射关系,访问该第二物理地址空间中的该目标文件。

结合第三方面,在第三方面的第一种可能的实现方式中,该处理器具体用于:通过将该目标文件的文件页表链入该第二虚拟地址空间对应的进程页表的方式,建立该第二映射关系。

结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,该第二虚拟地址空间大于该第二物理地址空间;

该处理器具体用于:

根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行读操作;

当该读操作待读取的数据所对应的虚拟地址超出该目标文件所对应的虚拟地址空间时,结束该读操作。

结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第三种可能的实现方式中,该第二虚拟地址空间大于该第二物理地址空间;

该处理器具体用于:

根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行写操作;

当该写操作待写入的数据对应的虚拟地址超出该第二虚拟地址空间时,结束该写操作。

结合第三方面和第三方面的第一种至第三种可能的实现方式中的任一种可能的实现方式,在第三方面的四种可能的实现方式中,该处理器还用于:

在内核空间,建立该第一虚拟地址空间与该第一物理地址空间之间的该第一映射关系,并将该第一映射关系对应的映射页表存储在内核空间对应的进程页表中;

在该接收到来自该进程的该文件访问请求后,确定该第一虚拟地址空间对应的进程页表中未记录有该第一映射关系;

将存储在内核空间的该第一映射关系对应的映射页表链入该第一虚拟地址空间对应的进程页表中。

本发明实施例的访问文件的方法、装置和存储系统,根据用户空间中的第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,可以通过该第一虚拟地址空间确定第一物理地址空间中存储目标文件的第二物理地址空间,为该目标文件分配连续的第二虚拟地址空间,然后建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系,根据该第二虚拟地址和第二映射关系,访问该目标文件,能够实现在避免现有技术中访问文件时存在的频繁系统调用的前提下,在用户空间直接访问文件,从而避免了现有技术在访问文件时存在的频繁的系统调用,能够有效降低访问文件时的软件运行开销,同时能够提高文件访问速率。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。

图1-a为本发明实施例提供的操作系统的虚拟地址空间的示意图。

图1-b为本发明实施例提供的操作系统的虚拟地址空间的另一示意图。

图2为本发明实施例提供的一种访问文件的方法的示意性流程图。

图3为本发明实施例提供的文件页表的示意图。

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

图5为本发明实施例提供的一种访问文件的装置的结构示意性框图。

图6为本发明实施例提供的另一种访问文件的装置的结构示意性框图。

图7为本发明实施例提供的一种存储系统的结构示意性框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。

为了方便理解本发明实施例,首先在此介绍几个相关的概念;

1)文件系统:

操作系统中用于存储和管理文件数据的软件叫做文件系统。文件系统用于存储、组织数据,并定义文件的访问策略。文件系统中的数据分为元数据和数据,其中数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据。元数据可以包括例如访问权限,文件拥有者以及文件数据块的分布信息(inode)等等。用户需要操作一个文件,必要首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。元数据就是数据的数据,在文件系统领域每一个文件对应一个元数据结构体。这个结构体包括文件的属性,比如,文件创建、修改及访问的时间,文件拥有者、权限、映射信息等。

文件系统中有3个重要的数据结构:file,inode,dentry,下面将对这三个重要的数据结构进行简单说明:

①文件对象file

file结构表示一个打开的文件对象(系统中,每个打开的文件在内核空间都对应一个file结构),由内核在open时创建,由close释放;

②文件索引节点对象inode

内核用inode结构表示文件,和file结构不同,后者表示打开的文件描述符,对于一个文件,可能会有许多个表示打开的文件描述符的file结构,但他们都只向唯一的inode;

③文件目录对象dentry

对于进程查找的每个路径名的分量,内核都为其创建一个dentry结构、例如在查找路径名/dev/test时,内核为根目录“/”创建一个dentry结构,为dev创建二级dentry结构,为test创建三级dentry结构。

传统的文件系统在内核态运行,用户进程要想访问文件系统中的文件,需要通过系统调用,实现文件的访问。

2)系统调用:

系统调用是一种内核空间与用户空间之间通讯的普遍手段。系统调用可以看作是操作系统提供给用户程序调用的一组“特殊接口”,用户程序可以通过这组“特殊接口”来获取操作系统内核提供的系统服务,比如用户可以通过文件系统相关的系统调用来请求系统打开文件、关闭文件或读写文件。系统服务之所以需要通过系统调用来提供给用户空间的根本原因是为了对系统进行“保护”,因为Linux的运行空间分为内核空间与用户空间,内核空间与用户空间各自运行于不同的级别中,逻辑上相互隔离。进程(运行于用户空间)通常情况下不允许访问内核数据,也无法使用内核函数,只能操作用户数据或者调用用户函数。当进程需要访问内核数据(例如访问文件)时,利用系统提供给用户的“特殊接口”,即通过系统调用来访问内核数据,具体地,把进程的请求传达给内核,在内核空间把请求处理完毕后,再将处理结果返回用户空间(相当于返回给进程)。

3)用户空间和内核空间:

Linux的运行空间分为内核空间(也可称之为内核态)与用户空间(也可称之为用户态),内核空间与用户空间各自运行于不同的级别中,逻辑上相互隔离。

现有技术中,操作系统的虚拟地址空间划分为用户空间(其运行环境可称之为用户态)和内核空间(其运行环境可称之为内核态)两部分。其中,用户空间为进程私有的虚拟地址空间,进程运行于用户空间。内核空间专门用于管理系统资源,进程需要访问资源时(例如访问文件),需要通过系统调用,向内核申请资源。为了避免在进程请求访问文件时频繁产生系统调用,本发明提出一种访问文件的方法、装置和存储系统,能够有效降低访问文件的软件运行开销。

为了便于理解本发明实施例提供的技术方案,下面结合图1-a和图1-b说明一下本发明实施例的应用场景。

如图1-a所示,操作系统的虚拟地址空间110包括内核空间120和用户空间130,其中,用户空间130具体包括第一虚拟地址空间140、文件访问虚拟地址空间180和进程私有空间150。第一虚拟地址空间140与文件访问虚拟地址空间180为所有进程共享的空间,即所有进程在用户空间130中都有权限去访问第一虚拟地址空间140和文件访问虚拟地址空间180;进程私有空间150为每个进程所私有的空间,该进程私有空间150也可称之为进程活动空间。该第一虚拟地址空间140与第一物理地址空间160具有第一映射关系(如图1-a中所示),其中,第一物理地址空间160为物理内存空间中存储文件系统的存储区所对应的物理地址空间。如1-a中举例,文件系统包括目标文件,第一物理地址空间160中用于存储该目标文件的地址空间为第二物理地址空间170。具体地,第一虚拟地址空间140对应的进程页表中记录有该第一映射关系。文件访问虚拟地址空间180为一段连续的地址空间,且用于映射待访问的目标文件。如图1-a举例所示,文件访问虚拟地址空间180中的第二虚拟地址空间181是为待访问的目标文件分配的一段连续的虚拟地址空间,且该第二虚拟地址空间181与目标文件所在的第二物理地址空间170之间具有第二映射关系,这样可以实现在用户空间连续访问目标文件。

具体地例如,进程要访问图1-a中所示的目标文件,基于该第一映射关系,通过该第一虚拟地址空间可以访问到该第一物理地址空间;在第一物理地址空间中定位到存储目标文件的第二物理地址空间170;在文件访问虚拟地址空间180中为该目标文件分配连续的第二虚拟地址空间181,并建立第二虚拟地址空间181与第二物理地址空间170之间的第二映射关系;就可以根据该第二虚拟地址空间181,在用户空间连续访问目标文件了。因此,在本发明实施例提供的技术方案中,任何一个进程要想访问文件系统中的目标文件,都可以通过第一虚拟地址空间140、第一映射关系、第二虚拟地址空间181以及第二映射关系,在用户空间中实现对目标文件的连续访问,从而可以避免现有技术中访问文件时存在的频繁系统调用,进而能够降低软件运行开销,同时提高访问文件的速度。

可选地,第一虚拟地址空间140与第一物理地址空间160之间的第一映射关系可以为线性映射关系,能够方便对第一物理地址空间160的访问。

应理解,图1-a示意性给出的进程私有空间150可以表示任何一个进程的私有空间,图1-a所示示意性框图不对本发明实施例造成特定限定。

图1-a中的第一物理地址空间160为物理内存中用于存储文件系统的内存区所对应的物理地址空间。进一步地,如图1-b所示,用于存储文件系统的该第一物理地址空间160又可以分为用于存储文件系统的元数据和数据的第一物理内存区161和用于存储该文件系统在运行时产生的缓存数据的第二物理内存区162。其中,该文件系统在运行时产生的缓存数据具体指的是进程在访问文件过程中产生的数据,例如文件对象file、文件索引节点对象inode、文件目录对象dentry以及文件描述符(也可称之为句柄)等数据。应理解,第一物理地址空间160中用于存储目标文件的第二物理地址空间170在第一物理内存区161中(如图1-b所示)。可选地,第一物理内存区161和第二物理内存区162在物理地址上可以是不连续的。

如图1-b所示,由于第一虚拟地址空间140与第一物理地址空间160具有第一映射关系,因此针对第一物理地址空间160划分的两个区域,第一虚拟地址空间140也可以相应地包括两个区域:第一区域141和第二区域142。第一物理内存区161在第一虚拟地址空间140中的映射区域为第一区域141,第一物理内存区162在第一虚拟地址空间140中的映射区域为第二区域142。应理解,进程可以通过访问第一区域141和第二区域142分别访问到第一物理内存区161和第二物理内存区162,从而访问文件系统的元数据和数据以及文件运行时产生的缓存数据。应理解,存储目标文件的第二物理地址空间170在第一虚拟地址空间140中的映射地址空间在第一区域141中。

可以理解的是,上述将第一物理地址空间160划分为两个区域只是一种示例,在实际应用中还可以根据实际需要将第一物理地址空间160划分为多个区域。当然,在实际应用中也可以根据实际需要将第一虚拟地址空间140划分为多个区域。在此不做限定。

在本发明实施例中,在一种情形下,第一物理内存区161和第二物理内存区162均可采用非易失性固态存储(Non-Violate Memory,NVM)介质。例如:相变内存(Phase Change Memory,PCM)、可变电阻式随机存储器(Resistive RAM,ReRAM)、磁性随机存储器(Magnetic Random Access Memory,MRAM)等具有类似DRAM的读写特点、能够挂在内存总线上进行访问的非易失性存储介质。在又一种情形下,第一物理内存区161可以采用非易失性内存介质,具体地,例如耐磨损的动态随机存储(Dynamic Random Access Memory,DRAM)介质。第二物理内存区162可以采用易失性内存介质。

还应理解,本发明实施例的访问文件的方法200的执行主体可以为控制器或中央处理器(Central Processing Unit,CPU)。

下面将结合附图2至图4对本发明实施例提供的访问文件的方法进行详细介绍。图2本发明实施例提供的一种访问文件的方法的示意性流程图。需要说明的是,图2是以一个进程的文件访问请求为例来描述的。可以理解的是,该方法200可以应用于任意的进程请求访问文件的场景中。如图2所示,该方法200包括:

S210,接收来自进程的文件访问请求,该文件访问请求包括文件标识,该文件标识用于指示要访问的目标文件;

具体的,该文件标识可以包括目标文件的存储路径、目标文件的文件类型(目录文件或数据文件)等。应理解,该文件访问请求具体地,可以是文件打开请求,文件读请求、或文件写请求等访问请求。

S220,根据预设的第一虚拟地址空间和该第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,访问该第一物理地址空间,其中,该第一虚拟地址空间为操作系统的用户空间的一部分,该第一物理地址空间为内存空间的一部分;

可选地,在本发明实施例中,S220根据预设的第一虚拟地址空间和该第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,访问该第一物理地址空间,包括:

S221,根据该文件访问请求,访问该第一虚拟地址空间;

S222,确定该第一虚拟地址空间对应的进程页表中记录有该第一虚拟地址空间与存储文件系统的该第一物理地址空间之间的该第一映射关系;

S223,根据该第一虚拟地址空间和该第一映射关系,访问该第一物理地址空间。

进一步地,该第一映射关系为线性映射关系,使得该第一物理地址空间的首地址对应于第一虚拟地址空间的首地址,后续地址以此类推,这样有利于对第一物理地址空间的访问。

S230,根据该目标文件的文件标识,在该第一物理地址空间中获取该目标文件的索引节点,该索引节点中包含有该目标文件的文件页表的信息;

可选地,在本发明实施例中,S230根据该目标文件的文件标识,在该第一物理地址空间中获取该目标文件的索引节点,包括:

S231,根据该目标文件的文件标识,确定该第一物理地址空间中是否存储有该文件标识所表示的要访问的目标文件;

S232,当确定该第一物理地址空间中存储有该文件标识所表示的要访问的目标文件时,获取该目标文件的索引节点;

S233,当确定该第一物理地址空间中未存储有该文件标识所表示的要访问的目标文件时,在该第一物理地址空间中创建该目标文件,并为该目标文件分配索引节点,为该目标文件分配的索引节点中包含有该目标文件的文件页表的信息,其中,该文件页表用于指向在该第一物理地址空间中创建该目标文件所在的第二物理地址空间。

应理解,文件系统中的每个文件都对应一个索引节点(inode),因此,确定文件系统所在的第一物理地址空间中存储有目标文件,就能获取对应于该目标文件的索引节点。还应理解,也可以默认该第一物理地址空间中存储有该目标文件,这种场景下,可以省略判断第一物理地址空间中是否存储该目标文件的相关步骤。

该索引节点中包含有该目标文件的文件页表的信息,具体地,该索引节点中可包含能够得出第一物理地址空间中存储该目标文件的内存页的第二物理地址空间的信息。例如,目标文件的索引节点中可记录目标文件的文件页表(File Page Table,简称为“FPT”)或用于指向目标文件的文件页表的指针。具体地,如图3中所示,目标文件的索引节点中包含用于指向文件页表的指针(Pointer),该指针具体存放目标文件的最高一级文件页表(PUD)。

S240,根据该索引节点中包含的该目标文件的文件页表的信息,获取该目标文件的文件页表,该文件页表中记录有在第一物理地址空间中存储的该目标文件的数据页的第二物理地址空间,该目标文件的数据页用于存储文件数据;

具体地,目标文件的文件页表用于指向第一物理地址空间中存储目标文件的内存页的物理地址。因此,根据目标文件的文件页表,可以定位到目标文件所在的第二物理地址空间。

可选地,在本发明实施例中,目标文件的文件页表与进程页表的数据结构类似或相同。

应理解,当前技术中,进程页表为处于保护模式下的操作系统里的进程使用,代表进程虚拟空间到物理空间的映射关系,对于给定待访问的虚拟地址,MMU根据虚拟地址,在当前进程页表中定位此虚拟地址对应的进程页表项,然后解析此页表项,获取实际的物理地址,从而实现访问。根据操作系统的寻址空间的不同,有32位寻址空间,空间大小232或64位寻址空间,空间大小264,常见的进程页表也分3级页表或4级页表。四级页表分别是PGD,PUD,PMD,PTE。三级页表采用与4级页表兼容的方式,名义上也是PGD,PUD,PMD,PTE,但PUD和PMD是同一级页表。其中,上一级页表中包含指向下一级页表的起始物理地址,最后一级页表PTE包含指向具体物理页的起始物理地址。

本发明实施例中的文件页表可以与进程页表具有相同或相似结构,具体地,文件页表可是一级或多级页表,非最低一级页表中的每一级页表的每个表项记录下一级的某页表的起始物理地址;而最低一级页表的每个表项记录存储了文件的内存页的起始物理地址。具体地,如图3所示,图3举例目标文件的文件页表为一个三级文件页表,分别是PUD、PMD和PTE三级,其中,PUD中的每一个表项都记录一个PMD的起始物理地址,而各个PMD的每个表项都记录一个PTE的起始物理地址,PTE的每一个表项都记录一个内存页(其中,内存页存储目标文件的文件内容)的起始物理地址。应理解,并不是每一个文件都需要使用三级文件页表,即便是使用三级页表,也不一定有固定的格式,例如不一定每个文件都需要使用1024个PTE,可以根据文件的大小变化动态调整文件页表组织架构。

图3以目标文件的索引节点中记录有指向三级文件页表的第一级文件页表PUD的指针(如PUD的起始物理地址)为例进行描述。还可以理解的是,目标文件的索引节点中也可能直接存储第一物理地址空间中存储目标文件的第二物理地址空间或第二物理地址空间的起始地址等。在此不对目标文件的索引节点中记录的信息做具体限定,只要能够根据目标文件的索引节点中记录的信息获得该目标文件的第二物理地址空间的相关信息即可。

应理解,图3所示的例子是为了帮助本领域技术人员更好地理解本发明实施例,而非要限制本发明实施例的范围。本领域技术人员根据所给出的图3的例子,显然可以进行各种等价的修改或变化,这样的修改或变化也落入本发明实施例的范围内。

S250,为该目标文件分配第二虚拟地址空间,该第二虚拟地址空间为操作系统的用户空间中为所有进程分配的共享空间的一部分,该第二虚拟地址空间为连续的地址空间;

S260,建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系;

可选地,在本发明实施例中,S260建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系,包括:

通过将该目标文件的文件页表链入该第二虚拟地址空间对应的进程页表的方式,建立该第二映射关系。

具体地,假设第二虚拟地址空间对应的进程页表为N级页表,而该目标文件的文件页表为M级页表,其中M<=N,并且该文件页表缺少0级到(N-M-1)级的页表。将该目标文件的文件页表链入该第二虚拟地址空间对应的进程页表,具体指的是:将文件页表的最高(N-M)级页表项复制到第二虚拟地址空间对应的进程页表的(N-M)级的页表项中。根据这种方式,就可以实现第二虚拟地址空间与目标文件所在的第二物理地址空间之间的第二映射关系了。上述可知,采用“链入”的方式建立第二映射关系,只需将目标文件的文件页表的最高级页表项复制到第二虚拟地址空间对应的进程页表的对应级别的页表项中,从而目标文件的文件页表的最高级(N-M级)以后的页表项自动会链接到第二虚拟地址空间对应的进程页表中。因此,采用这种“链入”的方式,可以有效减少页表的复制量,从而能够降低软件运行开销。

S270,根据该第二虚拟地址空间以及该第二映射关系,访问该第二物理地址空间中的该目标文件。

具体地,基于目标文件所在的第二物理地址空间与该第二虚拟地址空间之间的第二映射关系,可以通过该连续的第二虚拟地址空间访问到该第二物理地址空间,从而可以实现对目标文件的连续访问。

综上所述,本发明实施例的访问文件的方法,根据用户空间中的第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,可以通过该第一虚拟地址空间确定第一物理地址空间中存储目标文件的第二物理地址空间,为该目标文件分配连续的第二虚拟地址空间,然后建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系,根据该第二虚拟地址和第二映射关系,访问该目标文件,能够实现在避免现有技术中访问文件时存在的频繁系统调用的前提下,在用户空间直接访问文件,从而避免了现有技术在访问文件时存在的频繁的系统调用,能够有效降低访问文件时的软件运行开销,同时能够提高文件访问速率。

在本发明实施例中,根据第二虚拟地址空间实现在用户空间访问目标文件,只要在第二虚拟地址空间中的访问地址不超出目标文件所对应的虚拟地址空间,就不会出现数据缺页中断,也就无需执行系统调用以切换到内核空间请求访问资源,即本发明实施例提供的访问文件的方法相对于现有技术,可以有效降低软件运行开销,同时也能提高文件访问速率。

上文提到的“目标文件所对应的虚拟地址空间”具体地指的是目标文件所在的第二物理地址空间映射到第二虚拟地址空间中的映射空间,换句话说,“目标文件所对应的虚拟地址空间”为第二虚拟地址空间中的一部分,且该“目标文件所对应的虚拟地址空间”中的每个虚拟地址都与特定的物理地址(目标文件的数据页的物理地址)具有映射关系。因此,通过访问该“目标文件所对应的虚拟地址空间”,就能访问到目标文件所在的第二物理地址空间了。在S270中根据该第二虚拟地址空间以及该第二映射关系,访问该第二物理地址空间中的该目标文件,也可以表述为:根据第二虚拟地址空间中的“目标文件所对应的虚拟地址空间”以及该第二映射关系,访问该第二物理地址空间中的该目标文件。

可选地,在本发明实施例中,为该目标文件分配第二虚拟地址空间等于或者大于该“目标文件所对应的虚拟地址空间”。换句话说,为目标文件分配的该第二虚拟地址空间可以等于或者大于目标文件所在的第二物理地址空间。

上文提到的“数据缺页中断”指的是当发生如下状况时,中断当前的访问操作:在第二虚拟地址空间对应的进程页表中未记录当前访问地址Address与特定物理地址之间的映射关系,换句话说,第二虚拟地址空间对应的进程页表缺少表示Address与特定物理地址之间的映射关系的表项,因此通过Address无法访问到物理地址,中断目标文件的本次访问。

具体地,1)在第二虚拟地址空间等于“目标文件所对应的虚拟地址空间”的情况下,通过第二虚拟地址空间访问目标文件时,由于访问地址必然不会超出“目标文件所对应的虚拟地址空间”,而“目标文件所对应的虚拟地址空间”中的每个虚拟地址都与特定的物理地址(目标文件的数据页的物理地址)具有映射关系,因此在上述情况下,不会发生上述“数据缺页中断”。2)在第二虚拟地址空间大于“目标文件所对应的虚拟地址空间”的情况下,通过第二虚拟地址空间访问目标文件时,当访问地址超出“目标文件所对应的虚拟地址空间”,则会发生上述“数据缺页中断”。

在第二虚拟地址空间大于“目标文件所对应的虚拟地址空间”的情况下,通过该第二虚拟地址对目标文件进行读和/或写操作时,可能会发生越界。为了减少读操作越界,导致读错误的情况,在本发明实施例中,在第二虚拟地址空间大于第二物理地址空间的情况下,S270根据该第二虚拟地址空间以及该第二映射关系,访问该第二物理地址空间中的该目标文件,可以包括:

根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行读操作;

当该读操作待读取的数据所对应的虚拟地址超出该目标文件所对应的虚拟地址空间时,结束该读操作。

应理解,本实施例中的“目标文件所对应的虚拟地址空间”即为上文提到的目标文件所在的第二物理地址空间映射到第二虚拟地址空间中的映射空间,为第二虚拟地址空间中的一部分。

具体地,接收来自该进程的用于请求读取该目标文件的文件数据的文件读指令;基于该第二映射关系,通过该第二虚拟地址空间访问该第二物理地址空间,以执行该目标文件的读操作;当该读操作待读取的数据所对应的虚拟地址超出该目标文件所对应的虚拟地址空间时,结束该读操作,具体地,当在该第二虚拟地址空间中的起始读地址偏移预定读字节长度后所得的结束读地址超出该“目标文件所对应的虚拟地址空间时”,结束该目标文件的读操作。

可选地,在本发明实施例中,还可以在第一物理地址空间160的第二物理内存区162(如图1-b所示)中创建该目标文件的文件描述符fd和该目标文件的文件对象file,并且创建文件描述符fd与该目标文件的文件对象file之间的关联关系,其中该文件对象file用于记录第二虚拟地址空间的大小、目标文件的第二物理地址空间映射到该第二虚拟地址空间的首地址、该目标文件的文件大小等信息。当接收到目标文件的读操作请求,可以通过目标文件的文件描述符fd在第一虚拟地址空间的第二区域142(如图1-b所示)所对应的虚拟地址(即第二物理内存区162中存储文件描述符fd的物理地址在第二区域142中的映射地址),访问第二物理内存区142中的该目标文件的文件描述符fd,从而获取到为目标文件分配的第二虚拟地址空间的空间大小、目标文件的第二物理地址空间映射到该第二虚拟地址空间的首地址以及该目标文件的文件大小等信息,进而可以通过该第二虚拟地址空间,执行目标文件的读操作。本发明实施例的访问文件的方法,能够解决读操作越界的问题,能够有效保证访问的安全性。

为了减少写操作越界,导致写错误的情况,在本发明实施例中,在第二虚拟地址空间大于第二物理地址空间的情况下,S270根据该第二虚拟地址空间以及该第二映射关系,访问该第二物理地址空间中的该目标文件,包括:

根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行写操作;

当该写操作待写入的数据对应的虚拟地址超出该第二虚拟地址空间时,结束该写操作。

具体地,接收来自该进程的请求对该目标文件执行写操作的文件写入请求;基于该第二映射关系,通过该第二虚拟地址空间访问该第二物理地址空间,以执行该目标文件的写操作;当该写操作待写入的数据对应的虚拟地址超出该第二虚拟地址空间时,结束该写操作,具体地,当在该第二虚拟地址空间中的起始写地址偏移预定写字节长度后所得的结束写地址超出该第二虚拟地址空间时,结束该目标文件的写操作。

可选地,在本发明实施例中,还可以在第一物理地址空间160的第二物理内存区162(如图1-b所示)中创建该目标文件的文件描述符fd和该目标文件的文件对象file,并且创建文件描述符fd与该目标文件的文件对象file之间的关联关系,其中该文件对象file用于记录第二虚拟地址空间的大小、目标文件的第二物理地址空间映射到该第二虚拟地址空间的首地址、该目标文件的文件大小等信息。当接收到目标文件的写操作请求,可以通过目标文件的文件描述符fd在第一虚拟地址空间的第二区域142(如图1-b所示)所对应的虚拟地址(即第二物理内存区162中存储文件描述符fd的物理地址在第二区域142中的映射地址),访问第二物理内存区142中的该目标文件的文件描述符fd,从而获取到为目标文件分配的第二虚拟地址空间的空间大小、目标文件的第二物理地址空间映射到该第二虚拟地址空间的首地址以及该目标文件的文件大小等信息,进而可以通过该第二虚拟地址空间,执行目标文件的写操作。

可选地,在本发明实施例中,在根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行写操作的过程中:

当确定该第二虚拟地址空间对应的进程页表中缺少记录当前写地址在该第一物理地址空间中的映射物理地址的表项时,中断该目标文件的写操作,该当前写地址超出目标文件所对应的虚拟地址空间;

在该第一物理地址空间中为该目标文件分配第三物理地址,并在该第二虚拟地址空间对应的进程页表中增加用于记录该当前写地址与该第三物理地址之间的映射关系的表项;

基于该第二虚拟地址空间对应的进程页表中上述增加的表项所记录的映射关系,通过该当前写地址访问该第三物理地址,继续执行该目标文件的写操作。

本发明实施例的访问文件的方法,能够增加文件写操作的范围,同时也能够解决访问越界的问题,能够有效保证访问的安全性。

在本发明实施例中,由于第二虚拟地址空间为连续的一段地址空间,有利于实现从要访问的目标文件所对应的虚拟地址的起始地址开始,一次性访问所需访问长度之内的物理内存页,而无需在软件层面多次查找不同物理内存页的对应虚拟地址,这样可以实现对文件的顺序访问,提高文件访问速度。进一步地,借助存储器管理单元(Memory Management Unit,简称为“MMU”)可透明地完成目标文件的虚拟地址和物理地址之间的转换,这有利于提高文件访问速度,还可以降低软件运行开销。应理解,还可以借助中央处理器(Central Processing Unit,简称为CPU)的读/写(Load/Store)指令,通过该第二虚拟地址空间,实现对目标文件的连续访问。

在本发明实施例中,通过将目标文件映射到用户空间中的一段连续的虚拟地址空间中,一方面可以实现在降低系统调用次数的前提下,在用户空间访问文件;另一方面能够有效提高文件访问速率和效率。

本发明实施例的访问文件的方法,根据用户空间中的第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,可以通过该第一虚拟地址空间确定第一物理地址空间中存储目标文件的第二物理地址空间,为该目标文件分配连续的第二虚拟地址空间,然后建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系,根据该第二虚拟地址和第二映射关系,访问该目标文件,能够实现在避免现有技术中访问文件时存在的频繁系统调用的前提下,在用户空间直接访问文件,从而避免了现有技术在访问文件时存在的频繁的系统调用,能够有效降低访问文件时的软件运行开销,同时能够提高文件访问速率。

下面,结合图4描述根据本发明另一实施例提供的访问文件的方法3000,需要说明的是,图4是以一个进程的文件访问请求为例来描述的。可以理解的是,该方法3000可以应用于任意的进程请求访问文件的场景中。如图4所示,方法3000包括:

S3001,在内核空间,建立预设的第一虚拟地址空间与第一物理地址空间之间的第一映射关系,并将该第一映射关系对应的映射页表存储在内核空间对应的进程页表中,该第一虚拟地址空间为操作系统的用户空间的一部分,该第一物理地址空间为内存空间的一部分。

具体地,在系统初始化时,建立该第一虚拟地址空间与该第一物理地址空间之间的该第一映射关系(如图1-a和图1-b所示),并将该第一映射关系对应的映射页表存储在内核空间对应的进程页表中。例如,将该第一映射关系对应的映射页表存储在内核空间的公用页全局目录中。

应理解,在S3001在内核空间建立该第一虚拟地址空间与该第一物理地址空间之间的该第一映射关系之前,需要初始化该第一物理地址空间。具体地,在系统启动后,如果该第一物理地址空间已经过预定义,则校验预定义的这片物理地址空间的头部位置存储的数据是否符合文件系统的物理结构组织方式,如果符合,则无需初始化;如果不符合,对其进行初始化。如果这段物理地址空间为空白的内存区域,则根据文件系统的物理结构组织方式,初始化这片空白的内存区域,例如根据该第一物理地址空间的大小、文件系统的数据组织结构等因素格式化这片物理内存区域,例如建立超级块、索引节点等数据结构来组织和管理这片物理内存区域(即该第一物理地址空间)。

S3002,接收来自进程的文件访问请求,该文件访问请求包括文件标识,该文件标识用于指示要访问的目标文件。S3002与图2中所示的S210相同,为了简洁,这里不再赘述。

S3003,确定该第一虚拟地址空间对应的进程页表中未记录有该第一映射关系。

具体地,在接收到来自进程的文件访问请求后,在用户空间访问第一虚拟地址空间时,确定该第一虚拟地址空间对应的进程页表缺少记录该第一映射关系的表项。

S3004,将存储在内核空间的该第一映射关系对应的映射页表链入该第一虚拟地址空间对应的进程页表中。

具体地,由用户空间切换到内核空间,将存储在内核空间的该第一映射关系对应的映射页表链入该第一虚拟地址空间对应的进程页表中,以便于后续根据第一虚拟地址空间以及该第一映射关系,实现在用户空间中访问文件。

S3005,根据该第一虚拟地址空间和该第一映射关系,访问该第一物理地址空间。S3005与图2中所示的S220相同,这里不再赘述。

S3006,根据该目标文件的文件标识,在该第一物理地址空间中获取该目标文件的索引节点,该索引节点中包含有该目标文件的文件页表的信息。S3006与图2中所示的S230相同,这里不再赘述。

S3008,根据该索引节点中包含的该目标文件的文件页表的信息,获取该目标文件的文件页表,该文件页表中记录有在第一物理地址空间中存储的该目标文件的数据页的第二物理地址空间,该目标文件的数据页用于存储文件数据。S3008与图2中所示的S240相同,这里不再赘述。

S3009,为该目标文件分配第二虚拟地址空间,该第二虚拟地址空间为操作系统的用户空间中为所有进程分配的共享空间的一部分,该第二虚拟地址空间为连续的地址空间。S3009与图2中所述的S250相同,这里不再赘述。

S3010,建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系。S3010与图2中所述的S260相同,这里不再赘述。

S3011,根据该第二虚拟地址空间以及该第二映射关系,访问该第二物理地址空间中的该目标文件。S3011与图2中所述的S270相同,这里不再赘述。

本发明实施例的访问文件的方法,在确定该第一虚拟地址空间对应的进程页表中未记录有该第一映射关系的情况下,需要执行一次缺页中断,即由用户空间切换到内核空间,将该第一映射关系对应的映射页表链入该第一虚拟地址空间对应的进程页表中。在确定该第一虚拟地址空间对应的进程页表中记录有该第一映射关系的情况下,根据该第一映射关系和该第一虚拟地址空间,访问存储文件系统的第一物理地址空间,进而访问该文件系统中的文件。需要说明的是,在本发明实施例中,该第一虚拟地址空间为用户空间中为所有进程所共享的空间。对于所有进程的文件访问请求,都可以实现在用户空间直接访问所请求的目标文件。

应理解,在本发明实施例中,将第一虚拟地址空间与第一物理地址空间之间的第一映射关系链入第一虚拟地址空间中之后,在系统不关闭的情况下,该第一虚拟地址空间对应的进程页表永久保存记录有该第一映射关系的表项,后续任何进程都可以基于该第一虚拟地址空间,实现在用户空间访问文件了。

本发明实施例的访问文件的方法,相对于现有技术,可以在较大程度地降低系统调用次数的前提下,实现在用户空间访问文件,能够有效降低访问文件时的软件运行开销,同时能够有效提高文件访问的速率和效率。

应理解,本发明实施例提供的技术方案,可以应用于Linux操作系统,也可以应用于其他的各个进程拥有自己专属空间的操作系统。

还应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

上文中结合图1至图4,详细描述了根据本发明实施例的访问文件的方法,下面将结合图5和图6,详细描述根据本发明实施例的访问文件的装置。

图5示出了根据本发明实施例的访问文件的装置400的示意性框图,该装置400包括:

接收模块410,用于接收来自进程的文件访问请求,该文件访问请求包括文件标识,该文件标识用于指示要访问的目标文件;

第一访问模块420,用于根据预设的第一虚拟地址空间和该第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,访问该第一物理地址空间,其中,该第一虚拟地址空间为操作系统的用户空间的一部分,该第一物理地址空间为内存空间的一部分;

获取模块430,用于根据该接收模块接收的该目标文件的文件标识,在该第一物理地址空间中获取该目标文件的索引节点,该索引节点中包含有该目标文件的文件页表的信息;

该获取模块430还用于,根据该索引节点中包含的该目标文件的文件页表的信息,获取该目标文件的文件页表,该文件页表中记录有在该第一物理地址空间中存储的该目标文件的数据页的第二物理地址空间,该目标文件的数据页用于存储文件数据;

分配模块440,用于为该目标文件分配第二虚拟地址空间,该第二虚拟地址空间为操作系统的用户空间中为所有进程分配的共享空间的一部分,该第二虚拟地址空间为连续的地址空间;

第一建立模块450,用于建立该第二物理地址空间与该分配模块分配的该第二虚拟地址空间之间的第二映射关系;

第二访问模块460,用于根据该分配模块分配的该第二虚拟地址空间以及该第一建立模块450建立的该第二映射关系,访问该第二物理地址空间中的该目标文件。

本发明实施例的访问文件的装置,根据用户空间中的第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,可以通过该第一虚拟地址空间确定第一物理地址空间中存储目标文件的第二物理地址空间,为该目标文件分配连续的第二虚拟地址空间,然后建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系,根据该第二虚拟地址和第二映射关系,访问该目标文件,能够实现在避免现有技术中访问文件时存在的频繁系统调用的前提下,在用户空间直接访问文件,从而避免了现有技术在访问文件时存在的频繁的系统调用,能够有效降低访问文件时的软件运行开销,同时能够提高文件访问速率。

可选地,作为一个实施例,该第一建立模块450具体用于,通过将该目标文件的文件页表链入该第二虚拟地址空间对应的进程页表的方式,建立该第二映射关系。

可选地,作为一个实施例,该分配模块440分配的该第二虚拟地址空间大于该第二物理地址空间;

该第二访问模块460,具体用于:

根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行读操作;

当该读操作待读取的数据所对应的虚拟地址超出该目标文件所对应的虚拟地址空间时,结束该读操作。

可选地,作为一个实施例,该分配模块440分配的该第二虚拟地址空间大于该第二物理地址空间;

该第二访问模块460具体用于:

根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行写操作;

当该写操作待写入的数据对应的虚拟地址超出该第二虚拟地址空间时,结束该写操作。

如图6所示,可选地,作为一个实施例,该装置400包括:

第二建立模块470,用于在内核空间,建立该第一虚拟地址空间与该第一物理地址空间之间的该第一映射关系,并将该第一映射关系对应的映射页表存储在内核空间对应的进程页表中。

接收模块410,用于接收来自进程的文件访问请求,该文件访问请求包括文件标识,该文件标识用于指示要访问的目标文件。

确定模块480,用于在该接收模块410接收到来自该进程的该文件访问请求后,确定该第一虚拟地址空间对应的进程页表中未记录有该第一映射关系。

链入模块490,用于将存储在内核空间的该第二建立模块建立的该第一映射关系对应的映射页表链入该第一虚拟地址空间对应的进程页表中。

第一访问模块420,用于根据预设的第一虚拟地址空间和该第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,访问该第一物理地址空间,其中,该第一虚拟地址空间为操作系统的用户空间的一部分,该第一物理地址空间为内存空间的一部分。

获取模块430,用于根据该接收模块接收的该目标文件的文件标识,在该第一物理地址空间中获取该目标文件的索引节点,该索引节点中包含有该目标文件的文件页表的信息。

该获取模块430还用于,根据该索引节点中包含的该目标文件的文件页表的信息,获取该目标文件的文件页表,该文件页表中记录有在该第一物理地址空间中存储的该目标文件的数据页的第二物理地址空间,该目标文件的数据页用于存储文件数据。

分配模块440,用于为该目标文件分配第二虚拟地址空间,该第二虚拟地址空间为操作系统的用户空间中为所有进程分配的共享空间的一部分,该第二虚拟地址空间为连续的地址空间。

第一建立模块450,用于建立该第二物理地址空间与该分配模块分配的该第二虚拟地址空间之间的第二映射关系。

第二访问模块460,用于根据该分配模块分配的该第二虚拟地址空间以及该第一建立模块建立的该第二映射关系,访问该第二物理地址空间中的该目标文件。

应理解,第二建立模块470是在接收模块410接收文件访问请求之前,就在内核空间,建立该第一映射关系了。还应理解,第一访问模块420是在链入模块490将存储在内核空间的该第一映射关系对应的映射页表链入该第一虚拟地址空间对应的进程页表中的情况下,根据该第一虚拟地址空间和该第一映射关系,访问该第一物理地址空间的。

应理解,根据本发明实施例的访问文件的装置400中的各个模块的上述和其它操作和/或功能分别为了实现图2和图4中的各个方法的相应流程,为了简洁,在此不再赘述。

本发明实施例的访问文件的装置,根据用户空间中的第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,可以通过该第一虚拟地址空间确定第一物理地址空间中存储目标文件的第二物理地址空间,为该目标文件分配连续的第二虚拟地址空间,然后建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系,根据该第二虚拟地址和第二映射关系,访问该目标文件,能够实现在避免现有技术中访问文件时存在的频繁系统调用的前提下,在用户空间直接访问文件,从而避免了现有技术在访问文件时存在的频繁的系统调用,能够有效降低访问文件时的软件运行开销,同时能够提高文件访问速率。

如图7所示,本发明实施例还提供了一种存储系统500,该存储系统500包括处理器510、存储器520和总线系统530。其中,处理器510和存储器520通过总线系统530相连,该存储器520用于存储文件和程序。该处理器510用于执行该存储器520存储的程序。处理器510通过总线系统530调用存储器520中存储的代码以用于:接收来自进程的文件访问请求,该文件访问请求包括文件标识,该文件标识用于指示要访问的目标文件;根据预设的第一虚拟地址空间和该第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,访问该第一物理地址空间,其中,该第一虚拟地址空间为操作系统的用户空间的一部分,该第一物理地址空间为内存空间的一部分;根据该目标文件的文件标识,在该第一物理地址空间中获取该目标文件的索引节点,该索引节点中包含有该目标文件的文件页表的信息;根据该索引节点中包含的该目标文件的文件页表的信息,获取该目标文件的文件页表,该文件页表中记录有在该第一物理地址空间中存储的该目标文件的数据页的第二物理地址空间,该目标文件的数据页用于存储文件数据;为该目标文件分配第二虚拟地址空间,该第二虚拟地址空间为操作系统的用户空间中为所有进程分配的共享空间的一部分,该第二虚拟地址空间为连续的地址空间;建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系;根据该第二虚拟地址空间以及该第二映射关系,访问该第二物理地址空间中的该目标文件。

本发明实施例的存储系统,根据用户空间中的第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,可以通过该第一虚拟地址空间确定第一物理地址空间中存储目标文件的第二物理地址空间,为该目标文件分配连续的第二虚拟地址空间,然后建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系,根据该第二虚拟地址和第二映射关系,访问该目标文件,能够实现在避免现有技术中访问文件时存在的频繁系统调用的前提下,在用户空间直接访问文件,从而避免了现有技术在访问文件时存在的频繁的系统调用,能够有效降低访问文件时的软件运行开销,同时能够提高文件访问速率。

可选地,该处理器510具体用于:通过将该目标文件的文件页表链入该第二虚拟地址空间对应的进程页表的方式,建立该第二映射关系。

可选地,该第二虚拟地址空间大于该第二物理地址空间;该处理器510具体用于:根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行读操作;当该读操作待读取的数据所对应的虚拟地址超出该目标文件所对应的虚拟地址空间时,结束该读操作。

可选地,该第二虚拟地址空间大于该第二物理地址空间;该处理器510具体用于:根据该第二虚拟地址空间以及该第二映射关系,对该第二物理地址空间中的该目标文件进行写操作;当该写操作待写入的数据对应的虚拟地址超出该第二虚拟地址空间时,结束该写操作。

可选地,该处理器510还用于:在内核空间,建立该第一虚拟地址空间与该第一物理地址空间之间的该第一映射关系,并将该第一映射关系对应的映射页表存储在内核空间对应的进程页表中;在接收到来自该进程的该文件访问请求后,确定该第一虚拟地址空间对应的进程页表中未记录有该第一映射关系;将存储在内核空间的该第一映射关系对应的映射页表链入该第一虚拟地址空间对应的进程页表中。

应理解,在本发明实施例中,该处理器510可以是中央处理单元(Central Processing Unit,简称为“CPU”),该处理器510还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、晶体管逻辑器件或硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

该存储器520可以包括只读存储器和随机存取存储器,并向处理器510提供指令和数据。存储器520的一部分还可以包括非易失性随机存取存储器。例如,存储器520还可以存储设备类型等信息。

该总线系统530除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统530。

在实现过程中,上述方法的各步骤可以通过处理器510中的硬件的集成逻辑电路或者软件形式的指令完成。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器520,处理器510读取存储器520中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。

应理解,根据本发明实施例的存储系统500可对应于本发明实施例的访问文件的装置400,并且存储系统500可以实现图2和图4中的方法,为了简洁,在此不再赘述。

因此,本发明实施例的存储系统,根据用户空间中的第一虚拟地址空间与存储文件系统的第一物理地址空间之间的第一映射关系,可以通过该第一虚拟地址空间确定第一物理地址空间中存储目标文件的第二物理地址空间,为该目标文件分配连续的第二虚拟地址空间,然后建立该第二物理地址空间与该第二虚拟地址空间之间的第二映射关系,根据该第二虚拟地址和第二映射关系,访问该目标文件,能够实现在避免现有技术中访问文件时存在的频繁系统调用的前提下,在用户空间直接访问文件,从而避免了现有技术在访问文件时存在的频繁的系统调用,能够有效降低访问文件时的软件运行开销,同时能够提高文件访问速率。

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

应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

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

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

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本发明实施例、权利要求以及附图中揭示的特征可以独立存在也可以组合存在。在本发明实施例中以硬件形式描述的特征可以通过软件来执行,反之亦然。在此不做限定。

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