文件数据访问方法和计算机系统转让专利

申请号 : CN201580001269.4

文献号 : CN107209715B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 于群徐君王元钢

申请人 : 华为技术有限公司

摘要 :

本发明实施例公开了一种文件数据访问方法和计算机系统。在获取到进程对第一文件数据进行访问的访问信息时,通过页全局目录空间访问进程的页全局目录;基于对所述页全局目录的访问,根据所述第一文件数据在所述文件系统空间中的第一虚拟地址确定所述页全局目录中的第一页全局目录项,并将所述进程的文件页表的基地址链接到所述第一页全局目录项,所述文件页表指向所述文件数据的物理地址,以便所述处理器根据所述第一虚拟地址并通过所述页全局目录和所述文件页表索引得到所述第一文件数据在所述内存中的第一物理地址,以及根据所述第一物理地址对所述第一文件数据进行访问,实现在用户态下对第一文件数据的安全访问。

权利要求 :

1.一种文件数据访问方法,所述方法应用于计算机系统,所述计算机系统包括处理器和内存,所述内存为非易失性存储器,所述处理器上运行操作系统,所述操作系统采用文件系统管理所述内存中的文件数据;其特征在于,所述操作系统上运行的进程在初始化时被分配有用户空间和内核空间,所述进程的用户空间包括文件系统空间和页全局目录空间,所述页全局目录空间为页全局目录的虚拟地址空间,用于映射到所述页全局目录在所述内存中的物理地址空间,所述文件系统空间为所述文件数据的虚拟地址空间,用于映射到所述文件数据在所述内存中的物理空间;

所述方法包括:

在获取到所述进程对第一文件数据进行访问的访问信息时,通过所述页全局目录空间访问所述页全局目录,其中,所述访问信息表示对所述第一文件数据的访问状态;

基于对所述页全局目录的访问,根据所述第一文件数据在所述文件系统空间中的第一虚拟地址确定所述页全局目录中的第一页全局目录项,并将所述进程的文件页表的基地址链接到所述第一页全局目录项,所述文件页表指向所述文件数据的物理地址,以便所述处理器根据所述第一虚拟地址并通过所述页全局目录和所述文件页表索引得到所述第一文件数据在所述内存中的第一物理地址,以及根据所述第一物理地址对所述第一文件数据进行访问。

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:

在对所述第一文件数据的访问结束时,断开所述所述文件页表的基地址与所述页全局目录中的第一页全局目录项之间的链接。

3.根据权利要求1或2所述的方法,其特征在于,所述内存中还记录有页全局目录页表,所述页全局目录页表指向所述页全局目录的基地址;

所述通过所述页全局目录空间访问所述页全局目录,包括:

获取所述页全局目录空间中的预设地址,根据所述预设地址索引到所述页全局目录中的第二页全局目录项;

根据所述第二页全局目录项查询所述页全局目录页表,并根据所述页全局目录页表指示的所述页全局目录页的基地址访问所述页全局目录。

4.根据权利要求1或2任一项所述的方法,其特征在于,所述方法还包括:

在所述进程访问所述第一文件数据的过程中发生进程中断时,获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;

在所述进程中断结束时,操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。

5.根据权利要求1或2任一项所述的方法,其特征在于,所述方法还包括:

在线程调度器将所述进程中访问所述第一文件数据的线程调度至其他线程时,获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;

在所述线程调度器将其他线程调度至所述进程中访问所述第一文件数据的线程时,操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。

6.根据权利要求1或2任一项所述的方法,其特征在于,所述方法还包括:

在断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接时,清除转译旁观缓冲器TLB表中与所述文件页表对应的TLB项。

7.一种计算机系统,包括处理器和内存,所述内存为非易失性存储器,所述处理器上运行操作系统,所述操作系统采用文件系统管理所述内存中的文件数据;其特征在于,所述操作系统上运行的进程在初始化时被分配有用户空间和内核空间,所述进程的用户空间包括文件系统空间和页全局目录空间,所述页全局目录空间为页全局目录的虚拟地址空间,用于映射到所述页全局目录在所述内存中的物理地址空间,所述文件系统空间为所述文件数据的虚拟地址空间,用于映射到所述文件数据在所述内存中的物理空间;

所述操作系统包括访问单元和链接单元;

所述访问单元,用于在获取到所述进程对第一文件数据进行访问的访问信息时,通过所述页全局目录空间访问所述页全局目录,其中,所述访问信息表示对所述第一文件数据的访问状态;

所述链接单元,用于基于对所述页全局目录的访问,根据所述第一文件数据在所述文件系统空间中的第一虚拟地址确定所述页全局目录中的第一页全局目录项,并将所述进程的文件页表的基地址链接到所述第一页全局目录项,所述文件页表指向所述文件数据的物理地址,以便所述处理器根据所述第一虚拟地址并通过所述页全局目录和所述文件页表索引得到所述第一文件数据在所述内存中的第一物理地址,以及根据所述第一物理地址对所述第一文件数据进行访问。

8.根据权利要求7所述的计算机系统,其特征在于,

在对所述第一文件数据的访问结束时,所述链接单元用于:断开所述所述文件页表的基地址与所述页全局目录中的第一页全局目录项之间的链接。

9.根据权利要求7或8所述的计算机系统,其特征在于,所述内存中还记录有页全局目录页表,所述页全局目录页表指向所述页全局目录的基地址;

所述访问单元,用于通过所述页全局目录空间访问所述页全局目录,具体为:

所述访问单元,用于获取所述页全局目录空间中的预设地址,根据所述预设地址索引到所述页全局目录中的第二页全局目录项,根据所述第二页全局目录项查询所述页全局目录页表,并根据所述页全局目录页表指示的所述页全局目录页的基地址访问所述页全局目录。

10.根据权利要求7或8任一项所述的计算机系统,其特征在于,所述操作系统包括还包括中断处理单元;

在在所述进程访问所述第一文件数据的过程中发生进程中断时,所述中断处理单元,用于获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;

在所述进程中断结束时,所述中断处理单元,用于操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。

11.根据权利要求7或8任一项所述的计算机系统,其特征在于,所述操作系统包括还包括线程调度器;

在将所述进程中访问所述第一文件数据的线程调度至其他线程时,所述线程调度器,用于获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;

在将其他线程调度至所述进程中访问所述第一文件数据的线程时,所述线程调度器,用于操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。

12.根据权利要求7或8任一项所述的计算机系统,其特征在于,所述操作系统包括还包括缓存清除单元;

在所述链接单元断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接时,所述缓存清除单元,用于清除转译旁观缓冲器TLB表中与所述文件页表对应的TLB项。

13.一种计算机系统,所述计算机系统包括处理器和内存,所述处理器和所述内存通过内存总线连接,所述内存为非易失性存储器,所述处理器上运行操作系统,所述操作系统采用文件系统管理所述内存中的文件数据;其特征在于,所述操作系统上运行的进程在初始化时被分配有用户空间和内核空间,所述进程的用户空间包括文件系统空间和页全局目录空间,所述页全局目录空间为页全局目录的虚拟地址空间,用于映射到所述页全局目录在所述内存中的物理地址空间,所述文件系统空间为所述文件数据的虚拟地址空间,用于映射到所述文件数据在所述内存中的物理空间;

所述非易失性存储器用于存储计算机执行指令,当所述计算机系统运行时,所述处理器读取所述非易失性存储器存储的所述计算机执行指令,以使所述计算机系统执行权利要求1至6任一项所述的文件数据访问方法。

说明书 :

文件数据访问方法和计算机系统

技术领域

[0001] 本发明实施例涉及计算机系统领域,尤其涉及文件数据访问方法和计算机系统。

背景技术

[0002] 文件系统,是一种存储和组织计算机数据的方法,采用文件形式来组织存储器中存储的数据,并定义文件的访问策略;严格地说,文件系统是一套实现了数据的存储、分级组织、存取等操作的数据管理软件。
[0003] 传统的文件系统工作在内核态,而用户进程运行在用户态,若用户态运行的进程需要访问存储器中的文件,如对文件进行读/写操作,需要执行文件系统接口函数,执行文件系统接口函数属于系统调用,会从用户态切换到内核态,再在内核态下执行文件系统接口函数实现对存储器中文件的访问,完成文件访问后再从内核态切换回用户态,继续运行进程;两次用户态与内核态之间的切换占用资源,占用时间。

发明内容

[0004] 有鉴于此,本发明实施例提供了一种文件数据访问方法和计算机系统;实现在用户态安全访问文件数据。
[0005] 第一方面,本发明实施例提供了一种文件数据访问方法,所述方法应用于计算机系统,所述计算机系统包括处理器和内存,所述内存为非易失性存储器,所述处理器上运行操作系统,所述操作系统采用文件系统管理所述内存中的文件数据;
[0006] 所述操作系统上运行的进程在初始化时被分配有用户空间和内核空间,所述进程的用户空间包括文件系统空间和页全局目录空间,所述页全局目录空间为页全局目录的虚拟地址空间,用于映射到所述页全局目录在所述内存中的物理地址空间,所述文件系统空间为所述文件数据的虚拟地址空间,用于映射到所述文件数据在所述内存中的物理空间;
[0007] 所述方法包括:
[0008] 在获取到所述进程对第一文件数据进行访问的访问信息时,通过所述页全局目录空间访问所述页全局目录;
[0009] 基于对所述页全局目录的访问,根据所述第一文件数据在所述文件系统空间中的第一虚拟地址确定所述页全局目录中的第一页全局目录项,并将所述进程的文件页表的基地址链接到所述第一页全局目录项,所述文件页表指向所述文件数据的物理地址,以便所述处理器根据所述第一虚拟地址并通过所述页全局目录和所述文件页表索引得到所述第一文件数据在所述内存中的第一物理地址,以及根据所述第一物理地址对所述第一文件数据进行访问。
[0010] 结合第一方面,在第一方面的第一种可能的实现方式中,所述方法还包括:
[0011] 在对所述第一文件数据的访问结束时,断开所述所述文件页表的基地址与所述页全局目录中的第一页全局目录项之间的链接。
[0012] 结合第一方面或者第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述内存中还记录有页全局目录页表,所述页全局目录页表指向所述页全局目录的基地址;
[0013] 所述通过所述页全局目录空间访问所述页全局目录,包括:
[0014] 获取所述页全局目录空间中的预设地址,根据所述预设地址索引到所述页全局目录中的第二页全局目录项;
[0015] 根据所述第二页全局目录项查询所述页全局目录页表,并根据所述页全局目录页表指示的所述页全局目录页的基地址访问所述页全局目录。
[0016] 结合第一方面或者第一方面的第一种可能的实现方式或者第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述方法还包括:
[0017] 在所述进程访问所述第一文件数据的过程中发生进程中断时,获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;
[0018] 在所述进程中断结束时,操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。
[0019] 结合第一方面或者第一方面的第一种可能的实现方式或者第一方面的第二种可能的实现方式或者第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述方法还包括:
[0020] 在线程调度器将所述进程中访问所述第一文件数据的线程调度至其他线程时,获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;
[0021] 在所述线程调度器将其他线程调度至所述进程中访问所述第一文件数据的线程时,操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。
[0022] 结合第一方面或者第一方面的第一种可能的实现方式或者第一方面的第二种可能的实现方式或者第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述方法还包括:
[0023] 在断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接时,清除转译旁观缓冲器TLB表中与所述文件页表对应的TLB项。
[0024] 第二方面,本发明实施例提供了一种计算机系统,包括处理器和内存,所述内存为非易失性存储器,所述处理器上运行操作系统,所述操作系统采用文件系统管理所述内存中的文件数据;
[0025] 所述操作系统上运行的进程在初始化时被分配有用户空间和内核空间,所述进程的用户空间包括文件系统空间和页全局目录空间,所述页全局目录空间为页全局目录的虚拟地址空间,用于映射到所述页全局目录在所述内存中的物理地址空间,所述文件系统空间为所述文件数据的虚拟地址空间,用于映射到所述文件数据在所述内存中的物理空间;
[0026] 所述操作系统包括访问单元和链接单元;
[0027] 所述访问单元,用于在获取到所述进程对第一文件数据进行访问的访问信息时,通过所述页全局目录空间访问所述页全局目录;
[0028] 所述链接单元,用于基于对所述页全局目录的访问,根据所述第一文件数据在所述文件系统空间中的第一虚拟地址确定所述页全局目录中的第一页全局目录项,并将所述进程的文件页表的基地址链接到所述第一页全局目录项,所述文件页表指向所述文件数据的物理地址,以便所述处理器根据所述第一虚拟地址并通过所述页全局目录和所述文件页表索引得到所述第一文件数据在所述内存中的第一物理地址,以及根据所述第一物理地址对所述第一文件数据进行访问。
[0029] 结合第二方面,在第二方面的第一种可能的实现方式中,在对所述第一文件数据的访问结束时,所述链接单元用于:断开所述所述文件页表的基地址与所述页全局目录中的第一页全局目录项之间的链接。
[0030] 结合第二方面或者第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述内存中还记录有页全局目录页表,所述页全局目录页表指向所述页全局目录的基地址;
[0031] 所述访问单元,用于通过所述页全局目录空间访问所述页全局目录,具体为:
[0032] 所述访问单元,用于获取所述页全局目录空间中的预设地址,根据所述预设地址索引到所述页全局目录中的第二页全局目录项,根据所述第二页全局目录项查询所述页全局目录页表,并根据所述页全局目录页表指示的所述页全局目录页的基地址访问所述页全局目录。
[0033] 结合第二方面或者第二方面的第一种可能的实现方式或者第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述操作系统包括还包括中断处理单元;
[0034] 在在所述进程访问所述第一文件数据的过程中发生进程中断时,所述中断处理单元,用于获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;
[0035] 在所述进程中断结束时,所述中断处理单元,用于操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。
[0036] 结合第一方面或者第一方面的第一种可能的实现方式或者第一方面的第二种可能的实现方式或者第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述操作系统包括还包括线程调度器;
[0037] 在将所述进程中访问所述第一文件数据的线程调度至其他线程时,所述线程调度器,用于获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;
[0038] 在将其他线程调度至所述进程中访问所述第一文件数据的线程时,所述线程调度器,用于操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。
[0039] 结合第一方面或者第一方面的第一种可能的实现方式或者第一方面的第二种可能的实现方式或者第一方面的第三种可能的实现方式或者第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述操作系统包括还包括缓存清除单元;
[0040] 在所述链接单元断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接时,所述缓存清除单元,用于清除转译旁观缓冲器TLB表中与所述文件页表对应的TLB项。
[0041] 第三方面,本发明实施例提供了一种计算机系统,所述计算机系统包括处理器和内存,所述处理器和所述内存通过内存总线连接,所述内存为非易失性存储器,所述处理器上运行操作系统,所述操作系统采用文件系统管理所述内存中的文件数据;
[0042] 所述操作系统上运行的进程在初始化时被分配有用户空间和内核空间,所述进程的用户空间包括文件系统空间和页全局目录空间,所述页全局目录空间为页全局目录的虚拟地址空间,用于映射到所述页全局目录在所述内存中的物理地址空间,所述文件系统空间为所述文件数据的虚拟地址空间,用于映射到所述文件数据在所述内存中的物理空间;
[0043] 所述非易失性存储器用于存储计算机执行指令,当所述计算机系统运行时,所述处理器读取所述非易失性存储器存储的所述计算机执行指令,以使所述计算机系统执行权利要求1至6任一项所述的文件数据访问方法。
[0044] 通过上述方案,在需要访问第一文件数据时,才将文件页表的基地址链接到所述第一页全局目录项上,以便在用户态下访问NVM中的第一文件数据,实现在用户态下对第一文件数据的安全访问。

附图说明

[0045] 图1为文件数据访问方法的应用场景的系统硬件结构示意图;
[0046] 图2为进程的用户空间及其对应页表的一种示意图;
[0047] 图3为文件数据访问方法的一种示范性基本流程图;
[0048] 图4为对图3中步骤S301的一种可选细化流程图;
[0049] 图5为对图3提供的文件数据访问方法的一种可选细化流程图;
[0050] 图6为文件数据访问方法针对中断处理提供的一种可选示范性流程图;
[0051] 图7为操作系统600的逻辑实现示意图。

具体实施方式

[0052] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0053] 本发明实施例适用的系统场景,如图1所示,计算机系统100包括处理器101、非易失存储器(Non Volatile Memory,简称NVM)102和内存总线103,处理器101可通过内存总线103访问非易失存储器102,非易失存储器102可以是相变存储器(Phase Change Memory,PCM)、阻变存储器(Resistive Random Access Memory,RRAM)、磁性随机存储器(Magnetic Random Access Memory,MRAM)或者铁电式随机存储器(Ferroelectric Random Access Memory,FRAM)等,本发明实施例对非易失存储器102具体为哪种存储介质构成不做限定。
[0054] 本发明实施例中,非易失存储器102作为内存使用,包括用于实现保存处理器101的临时数据、保存存放处理器101运行时的运算数据(包括计算机指令)、以及暂存与外部存储器(如硬盘、磁盘等)等交换的数据等内存功能。相对于传统内存,例如动态随机存储器(Dynamic Random Access Memory,DRAM),在掉电时会丢失数据,非易失存储器102当做内存使用的优点是:非易失存储器102具有在掉电时数据不丢失的特性,掉电恢复后,使用非易失存储器102中的数据能够及时恢复掉电前的运行场景,继续掉电前的任务。
[0055] 本发明实施例中,处理器101可以是中央处理器(CPU,Central Processing Unit),该CPU作为计算机设备的控制核心,解释并执行计算机指令,处理计算机中软件的数据和/或硬件的数据;当然,处理器101也可以是其他可编程逻辑单元。
[0056] 处理器101上运行操作系统,可在该操作系统的调度下运行其他软件程序。本领域人员应知,操作系统可采用虚拟内存(Virtual Memory)来运行软件程序,并且在通常情况下,虚拟内存的虚拟地址范围大于内存的物理地址范围,便于使用虚拟内存实现一个完成程序的运行。例如,若一个计算机只有4M内存,当该计算机需要运行一个16MB的程序时,操作系统可以操作虚拟地址选择将哪些程序片段缓存在4M内存中运行,并在需要时在内存和外部磁盘之间交换程序片段,这样就可以在一个只具有4M内存的计算机上运行16M的程序了。
[0057] 处理器101具有内存管理单元(Memory Management Unit,简称MMU),MMU用于将操作系统的虚拟地址转换为物理内存的物理地址。本发明实施例中,MMU负责将虚拟内存的虚拟地址映射为非易失存储器102(内存)的物理地址,以及提供硬件机制的内存访问授权。MMU如果是采用多级页表实现虚拟地址到内存的物理地址的地址转换,MMU每完成一次虚拟地址到物理地址的转换,都需要访问内存N+1次(N为页表级数),可见,每次地址转换的开销均不小。为提高MMU将虚拟地址转换为物理地址的转换速度,使用(Translation Lookaside Buffer,简称TLB)表作为MMU的缓存,在TLB表中缓存MMU近期查找出的地址映射关系,具体是在该TLB表中记录反应该地址映射关系的TLB项,通常是依据MMU近期访问的每个页表项(英文全称:page table entry,简称:PTE)项生成TLB项并使用新生成的TLB项更新TLB表。
后续处理器101访问内存时,先查找TLB表缓存的TLB项是否记录本次访问内存所使用的虚拟地址,如果查找到,直接根据查找到的TLB项所记录的物理地址从缓存或者内存读取数据,如果没有查找到,才使用MMU根据上述的多级页表进行虚拟地址到物理地址的转换,并通常会将本次转换所使用的TLB项缓存在TLB表中。
[0058] 操作系统将其使用的虚拟内存所具有的虚拟地址空间划分为用户空间和内核空间。操作系统的内核初始化进程时,为每个进程分配其各自专用的用户空间以及用于寻址的页目录,为便于与其他页目录区分和理解,下面采用页全局目录(英文全称:page global directory,简称:PGD)作为为进程分配来寻址的页目录进行描述。另外,内核空间对操作系统内的所有进程是共享的,每个进程都可以通过系统调用进入内核,触发内核使用内核空间执行内核代码。
[0059] 本领域人员知道,内核态,也称作特权态,是指操作系统的内核使用内核空间执行内核代码的模式。内核在内核态下运行内核代码,可以使用内核空间无限制地对系统存储、外部设备进行访问,并且所占有的处理资源是不允许被抢占的。相对应地,用户态,也称作非特权态,只能使用用户空间有限制地对系统存储、外部设备进行访问,其所占有的处理资源是可被抢占的;通常,进程在用户态下执行用户代码。另外,一个处于用户态下运行的进程,通过系统调用、中断和异常处理等方式而陷入内核代码中执行,称进程从用户态切换到内核态;相对地,完成在内核态执行内核代码后,可以将进程从内核态切换回用户态。
[0060] 在本发明实施例中,由于非易失存储器具有掉电不丢失数据的特性,操作系统可使用文件系统管理非易失存储器中的数据;具体地,该文件系统将非易失存储器中的数据以文件形式组织成文件数据,对应生成描述文件数据的属性的元数据,并将该元数据存储至非易失存储器中。
[0061] 为实现操作系统对非易失存储器中的文件数据的访问,从虚拟内存的虚拟地址空间中划分了文件系统空间;并在非易失存储器中存储文件页表,该文件页表记录文件系统空间中的虚拟地址与非易失存储器中的物理地址的映射关系,该文件页表可以是一级或多级页表,通常根据根据虚拟内存的大小而定。若访问非易失存储器(内存),处理器的MMU使用该文件页表进行虚拟地址到物理地址的转换,并使用转换得到的物理地址实现对非易失存储器中文件数据的访问。
[0062] 现有技术中,文件系统空间是从虚拟内存的内核空间划分出来的;进程访问文件系统管理的文件数据属于系统调用,进程通过系统调用访问文件数据需要两次在用户态与内核态之间的切换,无疑会造成系统资源损耗以及时间损耗。
[0063] 鉴于现有技术在用户态与内核态之间的切换所带来的资源损耗,本发明实施例选择在进程独自使用的用户空间中划分出一部分虚拟地址范围作为文件系统空间使用;因此,所述文件系统空间,为在进程的用户空间中文件数据的虚拟地址空间,用于映射到所述文件数据在所述内存中的物理空间。在文件页表中记录该文件系统空间与NVM的物理地址空间的地址映射关系;并且,记录该地址映射关系的文件页表可以是一个或多个,对应地需要在进程的全局页目录中确定一个或多个第一页全局目录项,每个第一页全局目录项用于对应链接一个文件页表,链接的对应关系根据该地址映射关系或者文件系统空间的虚拟地址而定。进程使用用户空间执行用户代码的期间,将文件页表的基地址拷贝到对应第一页全局目录项上,即建立起该第一全局目录项与文件页表的基地址的链接,便可通过该第一页全局目录项索引到对应的文件页表。假如在进程的整个运行期间,文件页表一直链接在该第一页全局目录项上,进程在任何时间都可以操作文件系统空间,直接访问到NVM中的文件数据,减少了系统调用所带来的系统资源损耗和时间损耗;但是在整个进程运行期间,本进程的其他非法指针也可以操作文件系统空间并访问到文件数据,非法指针的访问无疑会给NVM中的文件数据带来安全隐患。
[0064] 鉴于上述的安全隐患,由于在整个进程运行期间中不一定都需要访问非易失存储器上的文件数据,为实现在用户态下安全访问NVM中的文件数据,本发明实施例做了第一个改进。
[0065] 第一个改进,进程访问NVM中的文件数据,才建立第一全局目录项与文件页表的基地址的链接,不需访问NVM中的文件数据,断开该第一全局目录项与该文件页表的基地址的链接。
[0066] 第一个改进结合到访问文件数据的整个过程的具体实现是,若进程识别到访问非易失存储器上的文件数据的指令或者进程执行其它访问文件数据的操作,便对应确定进程对文件数据进行访问的访问信息;操作系统获取到所述访问信息,才将文件页表的基地址链接到第一页全局目录项上,使得MMU在进行地址转换时能够从该第一页全局目录项索引到文件页表;待完成对非易失存储器上的文件数据访问,删除第一页全局目录项上记录的文件页表的基地址,断开第一页全局目录项与文件页表的链接关系,使得MMU不能够从该第一页全局目录项索引到文件页表。因此第一个改进可避免:在不需要访问文件系统的其他时间段内,MMU非法在第一页全局目录项上索引到文件页表来进行地址转换。
[0067] 作为第一个改进的一种实现方式,文件系统接口函数属于文件系统的接口,执行文件系统接口函数可完成对NVM中文件数据的整个访问;本实现方式中,若进程执行文件系统接口函数,操作系统便会获取到所述进程对文件数据进行访问的访问信息。因此,本实现方式对文件系统接口函数进行修改,修改包括:1,在文件系统接口函数中的起始处添加了代码,该代码用于向第一页全局目录项写入所述文件页表的基地址;2,还在文件系统接口函数中的末尾处添加了代码,该代码用于清除在第一页全局目录项中存储的所述文件页表的基地址,清除包括修改或删除,例如执行该代码来向第一页全局目录项写入其他数据(与所述文件页表的基地址不同)来实现清除,再例如执行该代码来对第一页全局目录项中的数据进行删除操作。本实现方式中,进程未执行文件系统接口函数的其它时间,第一页全局目录项中没有存储文件页表的基地址,MMU无法在第一页全局目录项上索引到文件页表,进而处理器无法实现对文件数据的访问;进程执行到文件系统接口函数,首先向第一页全局目录项中写入文件页表的基地址,MMU能够在第一页全局目录项上索引到文件页表,从而处理器可操作文件系统空间来访问文件数据,最后在结束文件数据访问时,清除在第一页全局目录项中存储的文件页表的基地址,MMU无法在第一页全局目录项上索引到文件页表,处理器无法实现对文件数据的访问。
[0068] 本领域人员应知,文件系统管理存储器中的文件所使用的函数(例如文件系统接口函数),统属于文件系统库函数。现有技术中,执行文件系统库函数中的函数属于系统调用,继而需要在内核态下实现文件数据的管理。本实施例修改了文件系统库函数的执行权限,修改权限后在用户态下即可执行文件系统库函数中的函数(包括文件系统接口函数),在用户态下便可对NVM中的文件数据进行管理。
[0069] 对第一个改进的上述实现方式提供一个可选的优化实现方式,在文件系统接口函数中的末尾处,不但添加了用于实现清除在第一页全局目录项中清除所述文件页表的基地址的代码,还添加了用于实现清除TLB表中与文件页表对应的TLB项的代码。进程执行该文件系统接口函数访问文件数据结束,不但清除在第一页全局目录项中记录的所述文件页表的基地址,还清除TLB表中与文件页表对应的TLB项。这样,即使非法指针操作文件系统空间,在TLB表中缓存的TLB项找不到与文件系统空间对应的TLB项来进行地址转换,MMU不能在第一页全局目录项上索引到文件页表来进行地址转换,非法指针无法访问NVM中的文件数据。
[0070] 如果期望在用户态下实现第一个改进,本发明实施例做了第二个改进。
[0071] 第二个改进,从用户空间划分出不同于文件系统空间的页全局目录空间;所述页全局目录空间,为页全局目录的虚拟地址空间,用于映射到所述页全局目录在所述内存中的物理地址空间;本发明实施例在该页全局目录页表中记录进程的页全局目录所占用的物理地址与页全局目录空间中的虚拟地址的映射关系,并将页全局目录页表存储在内存中。因页全局目录空间与文件系统空间不同,相应地,第二页全局目录项与用于链接文件页表的第一页全局目录项也不同。若将该页全局目录页表链接到进程的页全局目录的第二页全局目录项上,MMU便可从第二页全局目录项索引到页全局目录页表,使用全局目录页表进行虚拟地址到物理地址的转换。这样,进程在用户态下操作页全局目录空间时,即可对进程的页全局目录中每个页全局目录项进行数据修改,例如将文件页表的基地址拷贝到第一页全局目录项上。
[0072] 作为第二个改进的一种实现方式,参见图2,图2中的页全局目录(英文全称:page global directory,简称:PGD)页为进程的页目录;第二PGD项为用于链接页全局目录页表的第二页全局目录项;第一PGD项为用于链接文件页表的第一页全局目录项,第一PGD项可以是一个或多个,不同第一PGD项链接不同的文件页表,图2仅示意性地提供了一个第一PGD项与一个文件页表文件页表的链接关系。图2中,页全局目录页表为三级页表,包括页上级目录(英文全称:Page Upper Directory,简称:PUD)页、页中级目录(英文全称:Page Middle Directory,简称:PMD)页和页表项(英文全称:page table entry,简称:PTE)页,PUD页、PMD页以及PTE页依次链接。如图2所示,从进程的用户空间中划分出三个空间,包括进程私有空间、PGD映射空间和文件系统空间,其中,本实现方式使用程私有空间来运行进程,其中,将PGD映射空间作为页全局目录空间。根据该PGD映射空间中的虚拟地址即可确定PGD页中哪个PGD项为与PGD映射空间对应的第二PGD项,本实现方式中,该PGD页的第二PGD项存储页全局目录页表的基地址,该页全局目录页表的基地址即为页全局目录页表中的PUD页的基地址,根据该PGD映射空间与该PGD页的地址映射关系在页全局目录页表的PTE页中确定一个PTE项,该个PTE项用于存储PGD页的首个物理地址。这样,根据第二PGD项链接的页全局目录页表,可将PGD映射空间中的虚拟地址转换为PGD页的物理地址。进而,进程在用户态下操作PGD映射空间中第一PGD项的虚拟地址,即可更改第一PGD项中记录的数据,例如操作第一PGD项的虚拟地址来将文件页表的基地址写入第一PGD项,再例如操作第一PGD项的虚拟地址来删除或者更改第一PGD项中记录的数据。
[0073] 进程在用户态下访问NVM中的文件数据的过程中,可能会发生进程中断,该进程中断的类型可以是硬件中断和软件中断,此处不做限定;触发进程中断的触发条件可以多种多样,也可以是现有触发中断的条件,在此也不做限定。为避免在进程中断期间,非法指针操作文件系统空间来访问文件数据,本发明实施例做了第三个改进,在第三个改进主要是针对处理中断的中断函数进行了修改。
[0074] 本领域人员应知,在操作系统的内核空间中已确定了部分虚拟地址,这部分虚拟地址与进程的页全局目录的物理地址映射;即这部分虚拟地址为进程的页全局目录在内核空间中的虚拟地址,供内核操作进程的页全局目录使用。基于此部分虚拟地址,本发明实施例在第三个改进中对处理进程中断的中断函数做了如下修改:
[0075] 一,在该中断函数的起始处添加了代码,执行该代码可操作这部分虚拟地址来清除第一页全局目录项中记录的文件页表的基地址,断开第一页全局目录项与文件页表的基地址的链接;
[0076] 二,在该中断函数的末尾处也添加了代码,执行该代码可操作这部分虚拟地址,来实现将文件页表的基地址写入第一页全局目录项,在第一页全局目录项上链接文件页表的基地址。
[0077] 基于第三个改进,进程陷入进程中断之后,内核在内核态下执行中断函数,首先操作这部分虚拟地址断开该进程文件页表与第一页全局目录项的链接;继而进行中断处理,中断处理可以是执行中断程序等现有处理方式;完成中断处理后,操作这部分虚拟地址重新将该文件页表的基地址链接到与第一页全局目录项。这样,中断处理的时间段内,非法指针即使操作文件系统空间,也无法使用文件页表访问到文件数据,保证了中断处理对NVM中文件数据的保护。
[0078] 本发明实施例可对中断函数作进一步修改来提高中断处理期间不能访问文件数据的安全系数,对中断函数的进一步修改是,在该中断函数的起始处添加的代码还能实现以下功能:清除TLB表中与文件页表对应的TLB项;其中,与文件页表对应的TLB项,记录有将文件系统空间的虚拟地址转换为文件数据的物理地址的地址转换关系。这样,内核执行中断函数的起始处添加的代码,不但会断开文件页表与第一页全局目录项的链接,还会清除TLB表中与文件页表对应的TLB项,中断处理期间,避免指向文件系统空间的非法指针,能够通过文件页表访问到文件数据,或者通过TLB表中的TLB项访问NVM中的文件数据,引发系统风险,甚至导致异常死机。
[0079] 本领域人员应知,进程可以同时具有一个或多个线程,但对于一个处理器核而言,在任意时刻都只能执行一条机器指令,每个线程只有获得处理器核的使用权才能执行指令。所谓多线程的并发运行,从宏观上看,是指各个线程轮流获得处理器核的使用权,分别执行各自的任务。在运行的线程池中会有多个处于就绪状态的线程在等待处理器核,需要内核运行一段代码来实现线程调度器,该线程调度器负责线程调度,该线程调度是指按照特定机制为多个线程分配处理器核的使用权。
[0080] 进程中各个线程是共享所述进程的用户空间的;因此对于从该进程的用户空间划分出的文件系统空间,该进程中每个线程也是共享的。通常,各个线程执行不同任务,并行的多个线程不一定都需要访问文件数据,为避免并行线程中的非法指针修改文件数据,本发明实施例做了第四个改进。
[0081] 第四个改进是修改线程调度策略,修改的线程调度策略可实现以下两个处理:第一个处理,若处理器中当前运行的线程正在访问文件数据,但线程调度器为本线程分配的时间片已用完,线程调度器在将本线程调度至其它线程的期间,断开文件页表的基地址与第一页全局目录项的链接,优选地,还清除TLB表中与文件页表对应的TLB项,从而,即使其它线程非法操作文件系统空间,也能避免使用文件页表访问到NVM中的文件数据,也查找不到用来访问NVM中的文件数据的TLB项;第二个处理,线程调度器从其它线程调度至访问文件数据的线程的期间,将文件页表的基地址链接到第一页全局目录项,保证调度后的线程能够继续访问NVM中的文件数据。采用改进的线程调度策略,能够避免其他线程的非法指针,在执行该其他线程的时间片非法访问NVM中的文件数据。
[0082] 本发明实施例中可选地,为实现在用户态下清除TLB表中与文件页表对应的TLB项,可采用替换TLB表中TLB项的方式实现,下面针对TLB表的不同结构提供三种替换方式:
[0083] 第一种替换方式,TLB表采用TLB全相联结构实现,如果要实现对TLB表中与所述文件页表对应的TLB项的清除,即使TLB表中仅部分TLB项属于与所述文件页表对应的TLB项,仍需访问不属于文件系统空间的虚拟地址来生成新TLB项,利用新TLB项对TLB表中所有TLB项进行全部替换;
[0084] 第二种替换方式,TLB表采用TLB组相联结构实现,如果要实现对TLB表中与所述文件页表对应的TLB项的清除,首先确定TLB表中哪些TLB组包含有与所述文件页表对应的TLB项,访问不属于文件系统空间的虚拟地址来生成新TLB项,利用新TLB项对确定的TLB组(包含有与所述文件页表对应的TLB项)中所有TLB项进行全部替换;
[0085] 第三种替换方式,TLB表采用TLB直接相联结构实现,如果要实现对TLB表中与所述文件页表对应的TLB项的清除,访问不属于文件系统空间的虚拟地址来生成新TLB项,利用新TLB项一一替换TLB表中与所述文件页表对应的TLB项。
[0086] 本发明的方法实施例
[0087] 基于上述计算机系统提供的硬件环境,结合上述改进,提供了文件数据访问方法的基本实现流程及其可选优化的细化实现流程;该文件数据访问方法的基本实现流程如图3所示,但为便于说明,仅在图3示出与本实施例相关的部分。
[0088] 首先重申下,本发明的方法实施例所提供的文件数据访问方法,应用于计算机系统。所述计算机系统包括处理器和内存,所述内存为非易失性存储器;所述处理器上运行操作系统,所述操作系统采用文件系统管理所述内存中的文件数据。相对于现有技术,为实现本发明,对该计算机系统做了以下改进:
[0089] 所述操作系统上运行的进程在初始化时被分配有用户空间和内核空间,所述进程的用户空间包括文件系统空间和页全局目录空间,所述页全局目录空间为页全局目录的虚拟地址空间,用于映射到所述页全局目录在所述内存中的物理地址空间,所述文件系统空间为所述文件数据的虚拟地址空间,用于映射到所述文件数据在所述内存中的物理空间。
[0090] 基于上述改进后的计算机系统,下面对文件数据访问方法的方法实施例进行适应性详述,为便于描述,以下文件数据访问方法的基本流程或基本流程的可选细化流程均是从单个进程提供的,应知,这些方法流程对于计算机系统中运行的每个进程均是适用的,并在在本发明的精神下,可对流程中的部分步骤或技术特征作删减、等同替换、增加等操作。
[0091] 参见图3,文件数据访问方法的基本流程包括步骤S301和步骤S302。
[0092] 步骤S301、在获取到所述进程对第一文件数据进行访问的访问信息时,通过所述页全局目录空间访问所述页全局目录。
[0093] 须知,第一文件数据属于NVM中存储的文件数据中的部分或全部数据,第一文件数据可能是单独存储在一个文件里,也可能是分散存储在多个文件中。
[0094] 用户使用操作系统中运行的进程来访问NVM中的第一文件数据,或者操作系统中运行的进程自己执行代码来访问NVM中的第一文件数据,都会在计算机系统中记录下该第一文件数据的访问信息,该访问信息表示对第一文件数据的访问状态,因此通过该访问信息能够确定当前进程是否访问第一文件数据。通常是将访问信息记录在寄存器中或者NVM中,但本发明对记录访问信息的记录方式不做限定。
[0095] 可选地,访问第一文件数据时才在计算机系统中记录访问信息,若没有访问第一文件数据,在计算机系统中不会记录有第一文件数据的访问信息,这样可根据第一文件数据的访问信息的生成时间确定当前进程开始访问第一文件数据这一事件。
[0096] 可选地,计算机系统实时记录第一文件数据的访问信息;但访问第一文件数据时该访问信息记录的内容,与没有访问第一文件数据时该访问信息记录的内容,存在不同;本实施例可根据第一文件数据的访问信息所记录的内容,确定当前进程开始访问第一文件数据这一事件。
[0097] 本实施例中,处理器若根据第一文件数据的访问信息确定发生当前进程开始访问第一文件数据这一事件,执行步骤S301通过所述页全局目录空间访问所述页全局目录。
[0098] 须知,页全局目录空间为页全局目录的虚拟地址空间;在MMU能够获知该页全局目录空间与页全局目录在所述内存中的物理地址空间之间的地址转换关系的情况下,操作页全局目录空间的虚拟地址,可实现对页全局目录中对应的页全局目录项进行访问。
[0099] 步骤S302、基于对所述页全局目录的访问,根据所述第一文件数据在所述文件系统空间中的第一虚拟地址确定所述页全局目录中的第一页全局目录项,并将所述进程的文件页表的基地址链接到所述第一页全局目录项,所述文件页表指向所述进程的文件数据的物理地址,以便所述处理器根据所述第一虚拟地址并通过所述页全局目录和所述文件页表索引得到所述第一文件数据在所述内存中的第一物理地址,以及根据所述第一物理地址对所述第一文件数据进行访问。
[0100] 具体地,文件页表记录文件系统空间与NVM的物理地址空间的地址映射关系,文件页表中的PTE页中的PTE项指向文件数据的物理地址。用于记录该文件系统空间与NVM的物理地址空间的地址映射关系的文件页表可能是一个或多个,一个文件页表对应需一个页全局目录项来链接,链接的对应关系根据文件页表可转换的虚拟地址确定。
[0101] 因此,步骤S302根据第一文件数据的第一虚拟地址,能够确定第一页全局目录项,该第一页全局目录项用于链接能够对第一虚拟地址转换地址的文件页表,具体是,在该文件页表的PTE页中存在指向第一文件数据的物理地址的PTE项。
[0102] 处理器在实现对第一虚拟地址转换为第一物理地址时,首先查找TLB表中是否缓存有与所述第一虚拟地址匹配的TLB项,如果查找到,将该TLB项中记录的与所述第一虚拟地址映射的物理地址确定为所述第一物理地址,继而可直接使用该第一物理地址访问到NVM中的所述第一文件数据;本实施例中,使用第一虚拟地址第一次访问第一文件数据,在TLB表中是查找不到该第一虚拟地址匹配的TLB项的。
[0103] 如果处理器在TLB表中没有查找到与所述第一虚拟地址匹配的TLB项,MMU对第一虚拟地址进行地址转换,具体是,MMU首先根据第一虚拟地址的地址大小在所述页全局目录中匹配到对应的第一页全局目录项,并在该第一页全局目录项上索引到文件页表,进一步根据第一虚拟地址在文件页表中按照页的上下级依次索引到PTE页,在该PTE页中查找用于转换第一虚拟地址的PTE项,该PTE项指向第一物理地址。
[0104] 以图2为例举例说明MMU将第一虚拟地址转换为第一物理地址的地址转换过程,首先,根据第一虚拟地址的地址大小在PGD页中确定对应的第一PGD项,再根据第一虚拟地址的地址大小在第一PGD项链接的PUD页中查找到对应的PUD项,再根据第一虚拟地址的地址大小在该PUG项的PMD页中查找到对应的PMD项,最后根据第一虚拟地址的地址大小在该PMG项的PTE页中查找到对应的PTE项,该PTE项指向第一物理地址。
[0105] 处理器在将第一虚拟地址转换为第一物理地址之后,通过内存总线,使用第一物理地址访问到NVM中的第一文件数据。
[0106] 本实施例执行步骤S301和步骤S302,实现在需要访问NVM中的文件数据时,才将文件页表链接到对应第一页目录项上;在访问NVM中的文件数据之前,该文件页表是没有链接到对应第一页目录项上的,这样可避免没访问NVM中的文件数据之前操作文件系统空间非法访问到NVM中的文件数据。
[0107] 作为本方法实施例的一可选细化实现方式,在所述内存中还记录有页全局目录页表,所述页全局目录页表指向所述页全局目录的基地址。参见上述第二个改进中的描述,在该页全局目录页表记录的地址映射关系,具体是指页全局目录空间中的虚拟地址到页全局目录所占用的物理地址的地址转换关系。并且,根据该地址映射关系在所述页全局目录页表的PTE页中确定的PTE项是指向所述页全局目录的基地址的,将所述页全局目录页表的基地址链接到该页全局目录页表中的第二页全局目录项,MMU便可在第二页全局目录项索引到所述页全局目录页表的基地址,使用所述页全局目录页表进行地址转换。
[0108] 为了提高访问页全局目录的安全系数,页全局目录空间足够大,页全局目录空间中仅一部分虚拟地址与该页全局目录页表的物理地址具有一一地址映射关系,本细化实现方式将这部分与该页全局目录页表的物理地址具有地址映射关系的虚拟地址称作预设地址;页全局目录空间中剩余部分虚拟地址(页全局目录空间中除了预设地址以外的虚拟地址)与该页全局目录页表的物理地址不具有地址映射关系,MMU不会将剩余部分虚拟地址地址转换为该页全局目录页表的物理地址。
[0109] 相应地,对步骤S301作一具体细化,参见图4,所述通过所述页全局目录空间访问所述页全局目录,包括步骤S401和步骤S402。
[0110] 步骤S401,获取所述页全局目录空间中的预设地址,根据所述预设地址索引到所述页全局目录中的第二页全局目录项。
[0111] 步骤S402,根据所述第二页全局目录项查询所述页全局目录页表,并根据所述页全局目录页表指示的所述页全局目录页的基地址访问所述页全局目录。
[0112] 本细化实现方式中,根据预设地址的地址大小,能够确定页全局目录中用于索引该预设地址的页全局目录项,确定的页全局目录项即是第二页全局目录项。进一步地,从第二页全局目录项可索引到页全局目录页表,并根据该预设地址能够在页全局目录页表的PTE页中查找到指向所述页全局目录的基地址(所述页全局目录的首个物理地址)的PTE项;在操作页全局目录空间的预设地址时,能够访问到所述页全局目录的。
[0113] 因页全局目录空间是从进程的用户空间中划分出来的,进程在用户态下可访问该页全局目录空间,这样,该进程能够在用户态下访问到页全局目录,在用户态下修改页全局目录项(例如第一页全局目录项)中的数据。
[0114] 作为本方法实施例的一可选细化实现方式,参见图5,所述方法还包括步骤S501。
[0115] 步骤S501,在对所述第一文件数据的访问结束时,断开所述所述文件页表的基地址与所述页全局目录中的第一页全局目录项之间的链接。
[0116] 具体地,进程在用户态下操作文件系统空间对所述第一文件数据的访问结束,进程会操作页全局目录空间再次访问所述页全局目录,具体是访问所述页全局目录中的第一页全局目录项,清除第一页全局目录项中记录的文件页表的基地址,清除该文件页表的基地址的方式可以是删除第一页全局目录项中记录的文件页表的基地址,清除该文件页表的基地址的方式还可以是向第一页全局目录项写入其他数据,这样,MMU无法在第一页全局目录项中索引到文件页表;因此,通过清除第一页全局目录项中记录的文件页表的基地址,便可实现断开所述文件页表的基地址与所述第一页全局目录项之间的链接。
[0117] 本方法是实施例中可采用上述第一个改进的一种实现方式,步骤S302中将所述进程的文件页表的基地址链接到所述第一页全局目录项,和步骤S501,在文件系统接口函数中实现。这样,在执行文件系统接口函数访问NVM中的第一文件数据时,首先将所述进程的文件页表的基地址链接到所述第一页全局目录项,继而操作第一虚拟地址可实现对第一文件数据的访问,访问结束,再断开所述所述文件页表的基地址与所述页全局目录中的第一页全局目录项之间的链接,完成文件系统接口函数的执行。可见,执行文件系统接口函数可实现对NVM中的文件数据的访问,未执行文件系统接口函数访问文件数据的其他时间,无法在第一页全局目录项索引到文件页表,即使操作文件系统空间也无法访问到NVM中的文件数据,提高了访问文件数据的安全系数。
[0118] 作为本方法实施例的一可选细化实现方式,参见图6,所述方法还包括步骤S601和步骤S602。
[0119] 步骤S601,在所述进程访问所述第一文件数据的过程中发生进程中断时,获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;
[0120] 步骤S602,在所述进程中断结束时,操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。
[0121] 本领域人员应知,操作系统初始化进程时,在内核空间分配有页全局目录的虚拟地址。记录该页全局目录在内核空间的虚拟地址到该页全局目录的物理地址之间的地址转换关系的页表,链接在内核的页目录中;内核操作该页全局目录在内核空间的虚拟地址,MMU能够在内核的页目录中索引到该页表(记录该页全局目录在内核空间的虚拟地址到该页全局目录的物理地址之间的地址转换关系)来进行地址转换。因此,内核可操作内核空间中该页全局目录的虚拟地址访问整个页全局目录,包括操作第二虚拟地址访问到第一页全局目录项。本实施方式中可选地,内核空间对于操作系统建立的每个进程是共享的。
[0122] 在本实现方式中,预先设定进程中断可以包括哪些软件中断,以及可以包括哪些硬件中断。所述进程访问所述第一文件数据的过程中,如果发生任一种进程中断,均会陷入到内核态,内核执行该进程中断对应的中断函数。本实现方式采用如上所述的第三个改进,对中断函数做了修改;从而在执行修改的中断函数的开始处,获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,并操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;然后进行中断处理;再在执行修改的中断函数的结束处,操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项;最后结束执行修改的中断函数时执行中断返回。
[0123] 可见,在进行中断处理的期间,不能在所述第一页全局目录项索引到文件页表,即使操作文件系统空间也不能非法访问到NVM中的文件数据。
[0124] 作为本方法实施例的一可选细化实现方式,所述方法还包括:
[0125] 在线程调度器将所述进程中访问所述第一文件数据的线程调度至其他线程时,获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;
[0126] 对应地,在所述线程调度器将其他线程调度至所述进程中访问所述第一文件数据的线程时,操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。
[0127] 本领域人员应知,线程调度器运行在内核中,为进程中每个线程分配的时间片;因此,当前线程的时间片用完,会进行线程之间的调度。
[0128] 本实施方式采用上述第四个改进,对用于线程调度策略做了修改。下面结合修改的线程调度策略解释下本实施方式提供的线程调度过程:
[0129] 为便于理解,假设除了访问所述第一文件数据的线程以外的其他线程,均不需要访问文件数据;当前访问所述第一文件数据的线程的时间片用完,线程调度器采用修改的线程调度策略进行线程调度,具体是在将当前执行的正在访问所述第一文件数据的线程调度至其他线程的调度期间,获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,并操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;
[0130] 执行其他线程的时间片用完,线程调度器采用修改的线程调度策略进行线程调度,具体是在将当前执行的其他线程调度至访问所述第一文件数据的线程的调度期间,操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。
[0131] 可见,在并行运行的多个线程中调度时,线程调度器在调度至不需要访问文件数据的其他线程之前,断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接,确保了其他线程不能非法访问NVM中的文件数据。
[0132] 当然,如果线程调度的前后两个线程都需要访问NVM中的文件数据,两个线程各需访问的文件数据可能相同或者不同,在这两个线程之间调度时,不需要操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接。
[0133] 作为结合本方法实施例或者结合上述实施方式的一可选细化实现方式,所述方法还包括:
[0134] 在断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接时,清除转译旁观缓冲器TLB表中与所述文件页表对应的TLB项。
[0135] 具体地,上述方法实施例或者细化实现方式断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接的目的是为了防止非法访问NVM中的第一文件数据,但在断开之前访问文件数据时可能在TLB表中缓存有记录第一虚拟地址与第一物理地址的地址映射关系的TLB项,如果TLB表缓存有该TLB项,本实施方式进一步清除TLB表中的该TLB项;避免非法操作第一虚拟地址时,根据该TLB项实现第一虚拟地址到第一物理地址的地址转换,非法访问到第一文件数据。例如,进程执行文件系统接口函数来断开在第一页全局目录项与文件页表的基地址的链接时,本实施方式清除TLB表中与所述文件页表对应的TLB项。
[0136] 例如,进程执行中断函数来断开在第一页全局目录项与文件页表的基地址的链接时,本实施方式清除TLB表中与所述文件页表对应的TLB项。
[0137] 例如,线程调度器断开在第一页全局目录项与文件页表的基地址的链接时,本实施方式清除TLB表中与所述文件页表对应的TLB项。
[0138] 本实施方式可选地,为在用户态下实现TLB表中TLB项的清除,操作新的不属于文件系统空间的虚拟地址,使用该虚拟地址的TLB项替换掉TLB表缓存的文件页表对应的TLB项。在具体实现时,针对TLB表的不同结构,采用不同替换方式实现,例如上述针对TLB全相联结构采用第一种替换方式,再例如上述针对TLB组相联结构采用第二种替换方式,再例如上述针对TLB直接相联结构采用第三种替换方式。
[0139] 本发明的系统实施例
[0140] 下面系统实施例及其细化实施方式提供的计算机系统均是针对单个进程进行处理的,当然也同样适用于对操作系统中其他各个进程的分别处理。
[0141] 第一个系统实施例,本系统实施例提供的计算机系统,包括处理器和内存,所述内存为非易失性存储器,所述处理器上运行操作系统,所述操作系统采用文件系统管理所述内存中的文件数据;其特征在于,
[0142] 所述操作系统上运行的进程在初始化时被分配有用户空间和内核空间,所述进程的用户空间包括文件系统空间和页全局目录空间,所述页全局目录空间为页全局目录的虚拟地址空间,用于映射到所述页全局目录在所述内存中的物理地址空间,所述文件系统空间为所述文件数据的虚拟地址空间,用于映射到所述文件数据在所述内存中的物理空间;
[0143] 下面示意性地从软件装置的实现方式提供本系统实施例的操作系统,参见图7,所述操作系统700包括访问单元701和链接单元702;
[0144] 所述访问单元701,用于在获取到所述进程对第一文件数据进行访问的访问信息时,通过所述页全局目录空间访问所述页全局目录;
[0145] 所述链接单元702,用于基于对所述页全局目录的访问,根据所述第一文件数据在所述文件系统空间中的第一虚拟地址确定所述页全局目录中的第一页全局目录项,并将所述进程的文件页表的基地址链接到所述第一页全局目录项,所述文件页表指向所述文件数据的物理地址,以便所述处理器根据所述第一虚拟地址并通过所述页全局目录和所述文件页表索引得到所述第一文件数据在所述内存中的第一物理地址,以及根据所述第一物理地址对所述第一文件数据进行访问。
[0146] 作为系统实施例的一可选细化实施方式,在对所述第一文件数据的访问结束时,所述链接单元702用于:断开所述所述文件页表的基地址与所述页全局目录中的第一页全局目录项之间的链接。
[0147] 作为系统实施例的一可选细化实施方式,所述内存中还记录有页全局目录页表,所述页全局目录页表指向所述页全局目录的基地址;
[0148] 所述访问单元701,用于通过所述页全局目录空间访问所述页全局目录,具体为:
[0149] 所述访问单元701,用于获取所述页全局目录空间中的预设地址,根据所述预设地址索引到所述页全局目录中的第二页全局目录项,根据所述第二页全局目录项查询所述页全局目录页表,并根据所述页全局目录页表指示的所述页全局目录页的基地址访问所述页全局目录。
[0150] 作为系统实施例的一可选细化实施方式,所述操作系统700包括还包括中断处理单元703;
[0151] 在在所述进程访问所述第一文件数据的过程中发生进程中断时,所述中断处理单元703,用于获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;
[0152] 在所述进程中断结束时,所述中断处理单元703,用于操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。
[0153] 作为系统实施例的一可选细化实施方式,所述操作系统700包括还包括线程调度器704;
[0154] 在将所述进程中访问所述第一文件数据的线程调度至其他线程时,所述线程调度器704,用于获取所述第一页全局目录项在所述内核空间中的第二虚拟地址,操作所述第二虚拟地址来断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接;
[0155] 在将其他线程调度至所述进程中访问所述第一文件数据的线程时,所述线程调度器704,用于操作所述第二虚拟地址来将所述进程的文件页表的基地址链接到所述第一页全局目录项。
[0156] 作为结合上述系统实施例或者上述可选细化实现方式的一可选细化实施方式,所述操作系统700包括还包括缓存清除单元705;
[0157] 在所述链接单元702断开所述所述文件页表的基地址与所述第一页全局目录项之间的链接时,所述缓存清除单元705,用于清除转译旁观缓冲器TLB表中与所述文件页表对应的TLB项。
[0158] 第二个系统实施例,下面示意性地从硬件装置的实现方式提供了本系统实施例,参见图1,本系统实施例提供的计算机系统100包括处理器101和内存,所述处理器101和所述内存通过内存总线103连接,所述内存为非易失性存储器102,所述处理器101上运行操作系统,所述操作系统采用文件系统管理所述内存中的文件数据;
[0159] 所述操作系统上运行的进程在初始化时被分配有用户空间和内核空间,所述进程的用户空间包括文件系统空间和页全局目录空间,所述页全局目录空间为页全局目录的虚拟地址空间,用于映射到所述页全局目录在所述内存中的物理地址空间,所述文件系统空间为所述文件数据的虚拟地址空间,用于映射到所述文件数据在所述内存中的物理空间;
[0160] 所述非易失性存储器102用于存储计算机执行指令,当所述计算机系统100运行时,所述处理器101读取所述非易失性存储器102存储的所述计算机执行指令,以使所述计算机系统100执行上述方法实施例或者上述方法实施例的各可选细化实现方式提供的文件数据访问方法。
[0161] 其中,所述非易失性存储器102可能存储有完整的用于实现文件数据访问方法的计算机执行指令;或者,用于实现文件数据访问方法的计算机执行指令是存储在外部存储器中,使用非易失性存储器102缓存处理器101从外部存储器读取的计算机执行指令,即非易失性存储器102仅存储有当前执行所需的部分计算机执行指令。
[0162] 在本申请所提供的几个实施例中,应该理解到,所揭露的处理器,计算机系统和方法,可以通过其它的方式实现。例如,以上所描述的计算机系统实施例仅仅是示意性的,例如,操作系统的单元划分,仅仅为一种逻辑功能划分,实现时可以有另外的划分方式,例如多个模块或单元或组件可以结合或者可以集成到另一个系统或设备,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0163] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0164] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0165] 上述以软件功能单元的形式实现集成的单元,可以存储在一个计算机可读取存储介质中,例如存储在NVM中,或者存储在外部存储器中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储器包括:移动硬盘、只读存储器(英文:Read-Only Memory,简称ROM)、随机存取存储器(英文:Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0166] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的保护范围。