一种基于非易失性介质的页缓存方法、系统及设备与流程

文档序号:18214090发布日期:2019-07-19 22:30阅读:179来源:国知局
一种基于非易失性介质的页缓存方法、系统及设备与流程

本申请涉及缓存领域,特别涉及一种基于非易失性介质的页缓存方法、系统、设备及计算机可读存储介质。



背景技术:

众所周知,在现有的系统中为了提高计算机性能,其中使用了大量的缓存,有用于关联普通文件的页缓存,也有关联到交换分区的交换分区。其中关联的普通文件的页缓存包含了大量用户数据,这些数据可能还未与底层设备进行同步。

关于缓存数据处理,现在也有相关的解决方法,即在系统断电时,会使用内嵌在系统中的电容进行供电,以便将缓存数据进行保存。然而,若内存的掉电保护相关措施出现故障,在内存掉电时,可能会丢失数据。

因此,如何避免内存掉电时缓存数据丢失是本领域技术人员目前需要解决的技术问题。



技术实现要素:

本申请的目的是提供一种基于非易失性介质的页缓存方法、系统、设备及计算机可读存储介质,用于避免内存掉电时缓存数据丢失。

为解决上述技术问题,本申请提供一种基于非易失性介质的页缓存方法,该方法包括:

划分非易失性介质作为后端设备的缓存;

当接收到数据修改命令时,在所述非易失性介质上执行所述数据修改命令将待修改页面数据置脏,并记录脏页数据的刷写状态;

当系统关机或相关程序退出时,根据所述刷写状态判断所述脏页数据是否需要进行脏页刷写;

若否,则清除所述脏页数据;

若是,则对所述脏页数据进行所述脏页刷写,并在所述脏页刷写完成时,将所述脏页数据的刷写状态由需要更改为不需要。

可选的,该方法还包括:

当所述系统重新启动时,检测所述非易失性介质中是否具有需要进行所述脏页刷写的脏页数据;

若具有,则发出提示信息。

可选的,所述记录脏页数据的刷写状态,包括:

在所述非易失性介质中创建管理数据结构;

利用所述管理数据结构中的file_name函数记录所述脏页数据所在文件的路径及文件名称;

利用所述管理数据结构中的基数树page_tree记录所述脏页数据的刷写状态。

可选的,所述清除所述脏页数据,包括:

清除所述脏页数据及所述管理数据结构。

可选的,当所述系统重新启动时,检测所述非易失性介质中是否具有需要进行所述脏页刷写的脏页数据,包括:

当所述系统重新启动时,检测所述非易失性介质中是否具有所述管理数据结构;

若否,则确认所述非易失性介质中不具有所述需要进行所述脏页刷写的脏页数据;

若是,则根据所述管理数据结构中的刷写状态判断所述非易失性介质中是否具有所述需要进行所述脏页刷写的脏页数据。

本申请还提供一种基于非易失性介质的缓存系统,该系统包括:

划分模块,用于划分非易失性介质作为后端设备的缓存;

置脏模块,用于当接收到数据修改命令时,在所述非易失性介质上执行所述数据修改命令将待修改页面数据置脏,并记录脏页数据的刷写状态;

判断模块,用于当系统关机或者相关程序退出时,根据所述刷写状态判断所述脏页数据是否需要进行脏页刷写;

清除模块,用于当所述脏页数据不需要进行所述脏页刷写时,清除所述脏页数据;

脏页刷写模块,用于当所述脏页数据需要进行所述脏页刷写时,对所述脏页数据进行所述脏页刷写,并在所述脏页刷写完成时,将所述脏页数据的刷写状态由需要更改为不需要。

可选的,所述系统还包括:

检测模块,用于当所述系统重新启动时,检测所述非易失性介质中是否具有需要进行所述脏页刷写的脏页数据;

提示模块,用于当所述非易失性介质中具有需要进行所述脏页刷写的脏页数据时,发出提示信息。

可选的,所述置脏模块包括:

创建子模块,用于在所述非易失性介质中创建管理数据结构;

第一记录子模块,用于利用所述管理数据结构中的file_name函数记录所述脏页数据所在文件的路径及文件名称;

第二记录子模块,用于利用所述管理数据结构中的基数树page_tree记录所述脏页数据的刷写状态。

本申请还提供一种基于非易失性介质的缓存设备,该基于非易失性介质的缓存设备包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述任一项所述基于非易失性介质的页缓存方法的步骤。

本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述基于非易失性介质的页缓存方法的步骤。

本申请所提供基于非易失性介质的页缓存方法,包括:划分非易失性介质作为后端设备的缓存;当接收到数据修改命令时,在非易失性介质上执行数据修改命令将待修改页面数据置脏,并记录脏页数据的刷写状态;当系统关机或相关程序退出时,根据刷写状态判断脏页数据是否需要进行脏页刷写;若否,则清除脏页数据;若是,则对脏页数据进行脏页刷写,并在脏页刷写完成时,将脏页数据的刷写状态由需要更改为不需要。

本申请所提供的技术方案,通过将非易失性介质划分为后端设备的缓存,使得当接收到数据修改命令时,在该非易失性介质上执行数据修改命令将待修改页面数据置脏,由于非易失性介质具有在掉电以后数据不丢失的特性,因此不需要设置内存掉电保护相关措施,而且能够避免内存掉电时缓存数据丢失,提高了计算机系统数据的安全性;同时,在该非易失性介质中记录脏页数据的刷写状态,并在系统关机或相关程序退出时根据该刷写状态,对该脏页数据进行对应处理,进一步避免了缓存数据丢失。本申请同时还提供了一种基于非易失性介质的缓存系统、设备及计算机可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

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

图1为本申请实施例所提供的一种基于非易失性介质的页缓存方法的流程图;

图2为本申请实施例所提供的另一种基于非易失性介质的页缓存方法的流程图;

图3为图1所提供的一种基于非易失性介质的页缓存方法中s102的一种实际表现方式的流程图;

图4为图2所提供的另一种基于非易失性介质的页缓存方法中s201的一种实际表现方式的流程图;

图5为本申请实施例所提供的一种基于非易失性介质的缓存系统的结构图;

图6为本申请实施例所提供的另一种基于非易失性介质的缓存系统的结构图;

图7为本申请实施例所提供的一种基于非易失性介质的缓存设备的结构图。

具体实施方式

本申请的核心是提供一种基于非易失性介质的页缓存方法、系统、设备及计算机可读存储介质,用于避免内存掉电时缓存数据丢失。

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

请参考图1及图2,图1为本申请实施例所提供的一种基于非易失性介质的页缓存方法的流程图;图2为本申请实施例所提供的另一种基于非易失性介质的页缓存方法的流程图。

其具体包括如下步骤:

s101:划分非易失性介质作为后端设备的缓存;

基于现有技术中,关于缓存数据处理的方法,主要依赖于系统中的电容供电将缓存数据进行保存,然后系统再将缓存中的数据刷写到磁盘中。然而,若内存的掉电保护相关措施也出现故障,则在内存掉电时会丢失数据,故本申请提供了一种基于非易失性介质的页缓存方法,用于解决上述问题;

内存域介质包含rom,ram,非易失性介质(如flash闪存),其中:

rom中一般保存一些机器启动时需要的相关代码和数据;

ram中一般保存系统运行时需要加载的相关代码和数据,比如用户程序;

而非易失性介质的性能暂时相对ram有差距,但是具有掉电后数据不丢失的特性;

而所有这些内存域的相关介质,cpu可以直接寻址,本申请直接将非易失性介质划分为后端设备的缓存,利用非易失性介质掉电不丢失数据的特性来保存文件的页缓存数据;

可选的,这里提到的,划分非易失性介质作为后端设备的缓存,其具体可以为:

在内核内存布局相关代码嵌入非易失性起始和结束地址,以便于和当前linux相关内存管理方法进行对接;

在内存分配掩码中添加内存分配的相关项(比如__gfp_nonvolatile),用于指示内核内存分配器在分配相关物理内存时使用相关内存;

在分配物理内存时,使用现有的linux内核内存分配相关函数,指定分配区域。

s102:当接收到数据修改命令时,在非易失性介质上执行数据修改命令将待修改页面数据置脏,并记录脏页数据的刷写状态;

当接收到数据修改命令时,从后端设备读取数据,数据直接进入常规内存,然后对从后端设备读取的数据进行修改,也就是使页面变脏,这是进行写时复制操作时,需要将页复制到非易失性存储介质上,系统在对相应的页修改时,直接对非易失性介质上的页进行修改,并记录脏页数据的刷写状态;

这里提到的刷写状态可以包括两种状态,一种是已经刷写,即已经与后端设备进行了同步;另一种是页面是脏页,需要刷写,未与后端设备进行同步。

s103:当系统关机或相关程序退出时,根据刷写状态判断脏页数据是否需要进行脏页刷写;

若否,则进入步骤s104;若是,则进入步骤s105;

当系统关机或相关程序退出时,需要检查相关打开的文件是否有脏页需要与后端设备进行同步(即检查刷写状态),如果有对脏页数据进行脏页刷写,并在脏页刷写完成时,将脏页数据的刷写状态由需要更改为不需要;如果没有则清除相关脏面数据。

s104:清除脏页数据;

s105:对脏页数据进行脏页刷写,并在脏页刷写完成时,将脏页数据的刷写状态由需要更改为不需要。

可选的,如图2所示,在步骤s105之后,该方法还可以包括:

s201:当系统重新启动时,检测非易失性介质中是否具有需要进行脏页刷写的脏页数据;

若是,则进入步骤s202。

s202:发出提示信息。

当非易失性介质中具有需要进行脏页刷写的脏页数据时,发出提示信息以提示用户或者触发相关刷写线程进行刷写,避免出现缓存数据丢失的情况。

基于上述技术方案,本申请所提供的一种基于非易失性介质的页缓存方法,通过将非易失性介质划分为后端设备的缓存,使得当接收到数据修改命令时,在该非易失性介质上执行数据修改命令将待修改页面数据置脏,由于非易失性介质具有在掉电以后数据不丢失的特性,因此不需要设置内存掉电保护相关措施,而且能够避免内存掉电时缓存数据丢失,提高了计算机系统数据的安全性;同时,在该非易失性介质中记录脏页数据的刷写状态,并在系统关机或相关程序退出时根据该刷写状态,对该脏页数据进行对应处理,进一步避免了缓存数据丢失。

针对于上一实施例的步骤s102,其中所描述的结合预设密钥将该密文解密为明文,其具体也可以根据当前设备的设备级别选择对应秘钥,下面结合图3进行说明。

请参考图3,图3为图1所提供的一种基于非易失性介质的页缓存方法中s102的一种实际表现方式的流程图。

其具体包括以下步骤:

s301:在非易失性介质中创建管理数据结构;

s302:利用管理数据结构中的file_name函数记录脏页数据所在文件的路径及文件名称;

s303:利用管理数据结构中的基数树page_tree记录脏页数据的刷写状态。

例如,该管理数据结构定义具体可以为如下所示的代码:

其中:file_name包含数据所在文件的路径及文件名称;page_tree是文件脏页的基数树,基数树节点中需要设置元素保存内存物理地址和是否刷写标志,物理地址使用长整型形式表示,标志使用0和1表示,标志0表示已经刷写,即已经与后端设备进行了同步,标志1表示页面是脏页,需要刷写,未进行同步。文件的脏页(保存在非易失性介质中)通过基数树形式组织;对于基数树中的叶子节点,保存物理地址的元素指向实际脏页的物理地址,而非叶子节点,其保存物理地址的元素置空,但是其标志位需要根据其子树中的叶子节点是否有刷写要求来定,也就是如果其子树中的叶子节点中有标志为1的,该节点的标志也为1,如果子树中的所有叶子节点中的标志都为0,则该节点的标志也未0;

backing_dev_info表示后端设备相关信息,根据backing_dev_info需要唯一确定后端设备,这个设备不仅仅是指磁盘,也可以是raid等其他相关设备;

该结构本身及该结构成员所指向的所有实例都保存在非易失性介质上面。

在上述实施例的基础上,步骤s104中所描述的清除脏页数据,其具体可以为清除脏页数据及管理数据结构,基于此,上述实施例中所描述的当系统重新启动时,检测非易失性介质中是否具有需要进行脏页刷写的脏页数据,其具体也可以为如图4所示的步骤,下面结合图4进行说明。

请参考图4,图4为图2所提供的另一种基于非易失性介质的页缓存方法中s201的一种实际表现方式的流程图。

其具体包括以下步骤:

s401:当系统重新启动时,检测非易失性介质中是否具有管理数据结构;

s402:确认非易失性介质中不具有需要进行脏页刷写的脏页数据;

s403:根据管理数据结构中的刷写状态判断非易失性介质中是否具有需要进行脏页刷写的脏页数据。

非易失性介质内存本质上仍然是内存,其访问方式还是和普通内存一样。但是非易失性介质还具有一个相对长期保持数据的功能,也就是系统重启,其中数据不会丢失,但是其中的数据组织依赖管理数据结构,该管理数据结构的实例需要通过在非易失性介质一个固定区域进行访问,该区域中保存着非易失性介质内存的相关元数据(用于保存总共有多少文件在非易失性介质中,以及是否有相关文件的数据没有和后端设备进行同步,有多少个等)及该该管理数据结构实例的指针。该固定区域不一定是连续区域,可能是有多个页面链接而成的,在每个固定区域页的最后8个字节(假如为64位系统),用于指向下一个页面的起始地址;

当系统启动时需要扫描该固定区域,并引导用户对该区域中没有与后端同步的的数据进行处理(可能同步也可能丢弃)。

请参考图5,图5为本申请实施例所提供的一种基于非易失性介质的缓存系统的结构图。

该系统可以包括:

划分模块100,用于划分非易失性介质作为后端设备的缓存;

置脏模块200,用于当接收到数据修改命令时,在非易失性介质上执行数据修改命令将待修改页面数据置脏,并记录脏页数据的刷写状态;

判断模块300,用于当系统关机或者相关程序退出时,根据刷写状态判断脏页数据是否需要进行脏页刷写;

清除模块400,用于当脏页数据不需要进行脏页刷写时,清除脏页数据;

脏页刷写模块500,用于当脏页数据需要进行脏页刷写时,对脏页数据进行脏页刷写,并在脏页刷写完成时,将脏页数据的刷写状态由需要更改为不需要。

请参考图6,图6为本申请实施例所提供的另一种基于非易失性介质的缓存系统的结构图。

该系统还可以包括:

检测模块,用于当系统重新启动时,检测非易失性介质中是否具有需要进行脏页刷写的脏页数据;

提示模块,用于当非易失性介质中具有需要进行脏页刷写的脏页数据时,发出提示信息。

该置脏模块200可以包括:

创建子模块,用于在非易失性介质中创建管理数据结构;

第一记录子模块,用于利用管理数据结构中的file_name函数记录脏页数据所在文件的路径及文件名称;

第二记录子模块,用于利用管理数据结构中的基数树page_tree记录脏页数据的刷写状态。

该清除模块400可以包括:

清除子模块,用于清除脏页数据及管理数据结构。

该检测模块可以包括:

检测子模块,用于当系统重新启动时,检测非易失性介质中是否具有管理数据结构;

确认子模块,用于当非易失性介质中不具有管理数据结构时,确认非易失性介质中不具有需要进行脏页刷写的脏页数据;当非易失性介质中具有管理数据结构时,根据管理数据结构中的刷写状态判断非易失性介质中是否具有需要进行脏页刷写的脏页数据。

以上系统中的各个组成部分可实际应用于以下的实施例中:

划分模块划分非易失性介质作为后端设备的缓存;创建子模块在非易失性介质中创建管理数据结构;第一记录子模块利用管理数据结构中的file_name函数记录脏页数据所在文件的路径及文件名称;第二记录子模块利用管理数据结构中的基数树page_tree记录脏页数据的刷写状态。

当系统关机或者相关程序退出时,判断模块根据刷写状态判断脏页数据是否需要进行脏页刷写;当脏页数据不需要进行脏页刷写时,清除模块清除脏页数据;当脏页数据需要进行脏页刷写时,脏页刷写模块对脏页数据进行脏页刷写,并在脏页刷写完成时,将脏页数据的刷写状态由需要更改为不需要;

当系统重新启动时,检测子模块检测非易失性介质中是否具有管理数据结构;当非易失性介质中不具有管理数据结构时,确认子模块确认非易失性介质中不具有需要进行脏页刷写的脏页数据;当非易失性介质中具有管理数据结构时,确认子模块根据管理数据结构中的刷写状态判断非易失性介质中是否具有需要进行脏页刷写的脏页数据;当非易失性介质中具有需要进行脏页刷写的脏页数据时,提示模块发出提示信息。

请参考图7,图7为本申请实施例所提供的一种基于非易失性介质的缓存设备的结构图。

该基于非易失性介质的缓存设备700可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessingunits,cpu)722(例如,一个或一个以上处理器)和存储器732,一个或一个以上存储应用程序742或数据744的存储介质730(例如一个或一个以上海量存储设备)。其中,存储器732和存储介质730可以是短暂存储或持久存储。存储在存储介质730的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对装置中的一系列指令操作。更进一步地,中央处理器722可以设置为与存储介质730通信,在基于非易失性介质的缓存设备700上执行存储介质730中的一系列指令操作。

基于非易失性介质的缓存设备700还可以包括一个或一个以上电源727,一个或一个以上有线或无线网络接口750,一个或一个以上输入输出接口758,和/或,一个或一个以上操作系统741,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。

上述图1至图4所描述的基于非易失性介质的页缓存方法中的步骤由基于非易失性介质的缓存设备基于该图7所示的结构实现。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

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

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

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

集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,功能调用装置,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上对本申请所提供的一种基于非易失性介质的页缓存方法、系统、设备及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

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