重启数据不丢失方法及保留内存管理模块的制作方法

文档序号:6427121阅读:167来源:国知局
专利名称:重启数据不丢失方法及保留内存管理模块的制作方法
技术领域
本发明涉及数据存储技术领域,具体涉及重启数据不丢失方法及保留内存管理模块。
背景技术
伴随着高可靠性要求的提高,上层软件会要求系统在重启前能存储一些数据,在重新启动后能够读出这些数据,以实现运行数据的快速恢复,从而减少系统的停工时间。在常见的计算机系统中,会使用磁盘、数据卡等非易失性存储设备完成上述功能。 但是,在嵌入式系统中,不一定具备磁盘、数据卡等器件。且磁盘、数据卡的访问速率较低, 对于一些可靠性要求很高且数据量较大的场景,若使用磁盘、数据卡完成上述功能,会较大地延长系统停工时间。在常见的嵌入式系统中,会使用保留内存来完成上述功能。保留内存常见于嵌入式设备,是设备出于某些目的而保留的内存。在系统初始化阶段,保留内存不会被纳入内存管理系统。保留内存具备重启数据不丢失的特性,可以用于保存一些重启前希望保留、供下一次启动时读取的数据,如重启信息等。相对于磁盘、数据卡,内存的访问速度要快许多。但是对于数据量较大的场景,要求较多的保留内存,很可能导致系统内存的30% 40%要作为保留内存。内存一旦成为保留内存,平时就不能用于存储普通的数据。这就导致一旦要支持快速恢复,系统的规格就要大幅下降,或者要增加额外的内存。

发明内容
本发明提供重启数据不丢失方法及保留内存管理模块,以提高内存利用率。本发明的技术方案是这样实现的一种重启数据不丢失方法,应用于计算机系统,该方法包括在系统重启前,将来自应用模块的保留数据写入普通内存,根据保留数据的总长度,申请一块用于保存上述保留数据的高端内存;将普通内存中的保留数据搬迁到该高端内存中,该高端内存成为保留内存,并在保留内存中维护保留页表,所述保留页表用于记录保留数据在原普通内存中的地址以及在保留内存中的地址,将保留内存的首物理地址、保留内存总长度记录到非易失设备上;在系统重启过程中,从非易失设备上读取保留内存的首物理地址、保留内存总长度;根据所述保留页表,将保留内存中的保留数据搬迁到普通内存中,以使得各应用模块从普通内存中读取保留数据。所述高端内存是连续的。所述将保留内存中的保留数据搬迁到普通内存中为根据保留页表,将保留数据搬迁到原普通内存中。所述将保留内存中的保留数据搬迁到普通内存中之后进一步包括
系统重启完成,释放保留内存。所述根据保留数据的总长度,申请一块高端内存之前进一步包括根据存储所有应用模块的保留数据的普通内存地址,计算保留数据的总长度。一种保留内存管理模块,位于计算机系统中,包括保留数据写入模块在系统重启前,当发现所有应用模块的保留数据都已被写入普通内存时,根据保留数据的总长度,申请一块高端内存,将普通内存中的保留数据搬迁到该高端内存中,该高端内存成为保留内存,同时在保留内存中维护保留页表,所述保留页表用于记录保留数据在原普通内存中的地址以及在保留内存中的地址,将保留内存的首物理地址、保留内存总长度记录到非易失设备上;保留数据读取模块在系统重启过程中,从非易失设备上读取保留内存的首物理地址、保留内存总长度;根据保留内存中的保留页表,将保留内存中的保留数据搬迁到普通内存中,以使得各应用模块从普通内存中读取保留数据。所述保留数据写入模块申请的高端内存是连续的。所述保留数据读取模块根据保留页表,将保留数据搬迁到原普通内存中。所述保留数据读取模块进一步用于,系统重启完成,释放保留内存。所述保留数据写入模块进一步用于,接收各应用模块发来的存储有保留数据的普通内存地址,根据所有应用模块发来的存储有保留数据的普通内存地址,计算得到所述保留数据的总长度。与现有技术相比,本发明只在需要存储保留数据时,才按照保留数据的长度申请高端内存,无需提前预留固定长度的保留内存,提高了内存利用率;且,对应用模块的改动很小,只需增加将存储有保留数据的普通内存地址通知保留内存管理模块的功能即可。


图1为本发明实施例提供的重启数据不丢失方法流程图;图2为本发明实施例提供的保留内存管理模块的组成示意图。
具体实施例方式下面结合附图及具体实施例对本发明再作进一步详细的说明。为描述方便,将应用模块待写入保留内存的数据称为保留数据。图1为本发明实施例提供的重启数据不丢失方法流程图,如图1所示,其具体步骤如下步骤101 任一应用模块发现系统即将重启,将本模块的保留数据保存到普通内存,记录该存储了本模块的保留数据的普通内存地址,并将该普通内存地址通知保留内存管理模块;保留内存管理模块记录存储了所有应用模块的保留数据的普通内存地址。保留数据可能被保存到连续内存中,也可能被保存到不连续的内存页面中。应用模块将本模块的保留数据保存到普通内存,并将该普通内存地址通知保留内存管理模块可通过如下伪码实现ρ = kmalloc (size, flag);memcpy (ρ, data, size);
setpreservememory (p, size);上述伪码中的kmalloc、memcpy等只是示例性描述,不同系统、不同环境下,接口的名称和参数可能不同。其中,P = kmalloc (size, flag)用于申请大小为size的普通内存;memcpy (p,data, size)用于将保留数据data写入申请到的普通内存,ρ为普通内存地址;setpreservememory (p,size)用于将存储有保留数据的普通内存地址ρ和大小size通知保留内存管理模块。步骤102 保留内存管理模块发现所有应用模块都已将保留数据写入普通内存, 则根据记录的存储了所有应用模块的保留数据的普通内存地址,计算保留数据的总长度 Ien,向高端内存管理模块申请一块连续的长度为Ien的高端内存,将普通内存中的所有保留数据搬迁到申请到的高端内存中,该高端内存成为保留内存,同时在保留内存中写入保留页表。当高端内存写入保留数据后,就成为了保留内存。保留页表用于记录保留数据在原普通内存中的地址、以及保留数据在保留内存中的地址。这样,保留内存由两部分组成,一部分是保留页表;另一部分是保留数据。高端内存与普通内存的区别在于系统初始化时,对普通内存中的数据进行初始化,而不对高端内存中的数据进行初始化。步骤103 保留内存管理模块将保留内存的首物理地址、保留数据总长度、保留内存总长度记录到高速非易失设备上。高速非易失设备例如非易失性随机访问存储器(NVRAM,Non-Volatile Random Access Memory)。步骤104 :系统重启,保留内存管理模块从高速非易失设备上读取保留内存的首物理地址、保留数据总长度、保留内存总长度。步骤105 保留内存管理模块根据保留内存的首物理地址、保留内存总长度,确定保留内存的范围,不对保留内存作清零处理,并在保留内存上作保留标记。在保留内存上作保留标记,这样保留内存内的数据就不会被修改。步骤106 保留内存管理模块根据保留页表,将保留内存中的保留数据搬迁到普通内存中。步骤107 各应用模块根据记录的存储了本模块的保留数据的普通内存地址,从普通内存中读取保留数据。步骤108 系统重启完成,保留内存管理模块释放保留内存。图2为本发明实施例提供的保留内存管理模块的组成示意图,如图2所示,其主要包括保留数据写入模块21和保留数据读取模块22,其中保留数据写入模块21 系统即将重启,当发现所有应用模块都已将保留数据写入普通内存时,根据各应用模块发来的存储有保留数据的普通内存地址,计算保留数据的总长度,申请一块长度为保留数据总长度的连续高端内存,将普通内存中的保留数据搬迁到该高端内存中,高端内存成为保留内存,同时在保留内存中维护保留页表,用于记录保留数据在原普通内存中的地址以及在保留内存中的地址,将保留内存的首物理地址、保留数据总长度、保留内存总长度记录到高速非易失设备上。保留数据读取模块22 系统重启,从高速非易失设备上读取保留内存的首物理地址、保留数据总长度、保留内存总长度,确定保留内存的范围,不对保留内存作清零处理,并在保留内存上作保留标记;根据保留内存中的保留页表,将保留内存中的保留数据搬迁到普通内存中,以使得各应用模块从普通内存中读取保留数据;当系统重启完成时,释放保留内存。本发明实施例应用于计算机系统中。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种重启数据不丢失方法,应用于计算机系统,其特征在于,该方法包括在系统重启前,将来自应用模块的保留数据写入普通内存,根据保留数据的总长度,申请一块用于保存上述保留数据的高端内存;将普通内存中的保留数据搬迁到该高端内存中,该高端内存成为保留内存,并在保留内存中维护保留页表,所述保留页表用于记录保留数据在原普通内存中的地址以及在保留内存中的地址,将保留内存的首物理地址、保留内存总长度记录到非易失设备上;在系统重启过程中,从非易失设备上读取保留内存的首物理地址、保留内存总长度;根据所述保留页表,将保留内存中的保留数据搬迁到普通内存中,以使得各应用模块从普通内存中读取保留数据。
2.根据权利要求1所述的方法,其特征在于,所述高端内存是连续的。
3.根据权利要求1或2所述的方法,其特征在于,所述将保留内存中的保留数据搬迁到普通内存中为根据保留页表,将保留数据搬迁到原普通内存中。
4.根据权利要求1或2所述的方法,其特征在于,所述将保留内存中的保留数据搬迁到普通内存中之后进一步包括系统重启完成,释放保留内存。
5.根据权利要求1或2所述的方法,其特征在于,所述根据保留数据的总长度,申请一块高端内存之前进一步包括根据存储所有应用模块的保留数据的普通内存地址,计算保留数据的总长度。
6.一种保留内存管理模块,位于计算机系统中,其特征在于,包括保留数据写入模块在系统重启前,当发现所有应用模块的保留数据都已被写入普通内存时,根据保留数据的总长度,申请一块高端内存,将普通内存中的保留数据搬迁到该高端内存中,该高端内存成为保留内存,同时在保留内存中维护保留页表,所述保留页表用于记录保留数据在原普通内存中的地址以及在保留内存中的地址,将保留内存的首物理地址、保留内存总长度记录到非易失设备上;保留数据读取模块在系统重启过程中,从非易失设备上读取保留内存的首物理地址、 保留内存总长度;根据保留内存中的保留页表,将保留内存中的保留数据搬迁到普通内存中,以使得各应用模块从普通内存中读取保留数据。
7.根据权利要求6所述的保留内存管理模块,其特征在于,所述保留数据写入模块申请的高端内存是连续的。
8.根据权利要求6或7所述的保留内存管理模块,其特征在于,所述保留数据读取模块根据保留页表,将保留数据搬迁到原普通内存中。
9.根据权利要求6或7所述的保留内存管理模块,其特征在于,所述保留数据读取模块进一步用于,系统重启完成,释放保留内存。
10.根据权利要求6或7所述的保留内存管理模块,其特征在于,所述保留数据写入模块进一步用于,接收各应用模块发来的存储有保留数据的普通内存地址,根据所有应用模块发来的存储有保留数据的普通内存地址,计算得到所述保留数据的总长度。
全文摘要
本发明公开了重启数据不丢失方法及保留内存管理模块。本发明应用于计算机系统中。方法包括在系统重启前,将来自应用模块的保留数据写入普通内存,根据保留数据的总长度,申请一块用于保存上述保留数据的高端内存;将普通内存中的保留数据搬迁到该高端内存中,该高端内存成为保留内存,并在保留内存中维护保留页表,所述保留页表用于记录保留数据在原普通内存中的地址以及在保留内存中的地址,将保留内存的首物理地址、保留内存总长度记录到非易失设备上;在系统重启过程中,从非易失设备上读取保留内存的首物理地址、保留内存总长度;根据所述保留页表,将保留内存中的保留数据搬迁到普通内存中,以使得各应用模块从普通内存中读取保留数据。本发明提高了内存利用率。
文档编号G06F12/02GK102193847SQ201110174449
公开日2011年9月21日 申请日期2011年6月24日 优先权日2011年6月24日
发明者胡小龙 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1