CN103793337B - 一种防掉电的数据保护方法 - Google Patents
一种防掉电的数据保护方法 Download PDFInfo
- Publication number
- CN103793337B CN103793337B CN201310561659.XA CN201310561659A CN103793337B CN 103793337 B CN103793337 B CN 103793337B CN 201310561659 A CN201310561659 A CN 201310561659A CN 103793337 B CN103793337 B CN 103793337B
- Authority
- CN
- China
- Prior art keywords
- page
- data
- virtual machine
- purpose memory
- java card
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 25
- 230000004048 modification Effects 0.000 claims abstract description 11
- 238000012986 modification Methods 0.000 claims abstract description 11
- 238000011084 recovery Methods 0.000 claims abstract description 10
- 230000009471 action Effects 0.000 claims abstract description 8
- 238000002372 labelling Methods 0.000 claims description 31
- 239000003550 marker Substances 0.000 claims description 4
- 230000006870 function Effects 0.000 description 7
- 230000003111 delayed effect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000005611 electricity Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种防掉电的数据保护方法,属于信息安全领域。所述方法包括,A:java卡虚拟机上电,判断是否需要上电恢复数据,是则将备份页数据写入目的存储区中,执行B,否则直接执行B;B:当检测到向目的存储区写数据的触发操作时,根据待写数据的地址计算得到当前目的存储页页号;C:判断缓存中是否有当前目的存储页页号,是则用待写数据修改缓存数据,执行D,否则将目的存储页数据先写入备份页中,再写入缓存中,用待写数据修改缓存,执行D;D:当待写数据处理完成时,将缓存数据写入目的存储区中,并置上电不需要恢复数据。采用本发明的技术方案,在未知情况下发生掉电时,能够将原存储区数据还原,保证了原数据的安全性。
Description
技术领域
本发明涉及信息安全领域,尤其涉及一种防掉电的数据保护方法。
背景技术
随着科学技术的发展,智能卡的市场不断扩大,而在使用智能卡的过程中,会出现未知情况下由于非正常情况(断电、失电或电的质量达不到需求)而引起智能卡不能正常工作,如果智能卡正处于对目的存储区进行擦写的操作时,由于突然掉电会导致目的存储区中原有数据的丢失,从而降低了智能卡的安全性。
发明内容
本发明为了解决现有技术中存在的不足,提供了一种防掉电的数据保护方法。
本发明采用的技术方案是:一种防掉电的数据保护方法,包括:
步骤101:java卡虚拟机上电,进行初始化;
步骤102:所述java卡虚拟机获取当前标记页,根据当前标记页中的标记判断是否需要上电恢复数据,如果是,则执行步骤103,否则执行步骤104;
步骤103:所述java卡虚拟机根据当前标记页中包含的备份页的信息,将备份页中的数据写入目的存储区中,将当前标记页的下一标记页作为当前标记页,更新当前标记页的信息,执行步骤104;
步骤104:当检测到向目的存储区中写数据的触发操作时,所述java卡虚拟机获取待写数据的地址、待写数据和待写数据的长度;
步骤105:所述java卡虚拟机根据所述待写数据的地址,计算与所述待写数据对应的目的存储页页号及所述待写数据在目的存储区中的偏移,将所述与待写数据对应的目的存储页页号作为当前目的存储页页号;
步骤106:所述java卡虚拟机判断所述当前目的存储页页号是否在缓存区中,如果是,则执行步骤108,否则从所述目的存储区中获取与所述当前目的存储页页号对应的目的存储页中的数据,将所述目的存储页中的数据保存在对应的备份页中,执行步骤107;
步骤107:所述java卡虚拟机将当前标记页中的标记设置为上电需要恢复数据,将缓存区中的数据写入目的存储区与其对应的目的存储页中,判断是否写入成功,是则将所述目的存储页中的数据写入缓存区中,执行步骤108,否则报错;
步骤108:所述java卡虚拟机用当前处理的待写数据修改所述缓存区中的数据;
步骤109:所述java卡虚拟机更新待写数据的长度和当前处理的待写数据,根据待写数据长度判断所有的待写数据是否已处理完成,是则执行步骤110,否则根据所述待写数据在目的存储区中的偏移,更新当前目的存储页页号,返回执行步骤106;
步骤110:所述java卡虚拟机将所述缓存区中的全部数据写入当前目的存储区中,判断是否能够写入成功,是则将当前标记页中的标记置为上电不需要恢复数据,否则报错。
所述步骤101中,所述java卡虚拟机进行初始化,具体为:
步骤A:所述java卡虚拟机遍历标记页,判断是否存在校验码正确的标记页,如果是,则执行步骤B,否则执行步骤C;
步骤B:所述java卡虚拟机从校验码正确的所有标记页中获取计数值最大的标记页,将所述计数值最大的标记页作为当前标记页,执行步骤102;
步骤C:所述java卡虚拟机对备份区和标记区进行初始化,将第一页标记页作为当前标记页,执行步骤102。
所述步骤103中,所述根据当前标记页中包含的备份页的信息,将备份页中的数据写入目的存储区中,具体为:获取当前标记页中的备份页页号数组,根据当前标记页中的备份页页号获取对应备份页中的数据,并将获取到的数据写入目的存储区中。
所述步骤103中,所述更新当前标记页信息,具体为:将当前标记页中的备份页页号数组设置为第一数值,将计数值加第二数值,将当前标记页中的标记设置为上电不需要恢复数据,将已使用备份页的页号设置为第一数值,计算校验码写入当前标记页中。
所述步骤106、107和108具体为:
步骤S1:所述java卡虚拟机遍历所述缓存区,判断所述缓存区中是否有所述当前目的存储页页号,如果是,则用当前处理的待写数据修改所述缓存页中的数据,更新使用次数,执行步骤109,否则执行步骤S2;
步骤S2:所述java卡虚拟机判断备份区剩余的备份页数是否等于缓存区剩余的缓存页数,如果是,则将所有缓存页对应的目的存储页中的数据全部备份到备份页中,执行步骤110,否则查找并获取缓存区中使用次数最少的缓存页对应的目的存储页页号,从目的存储区中找到对应的目的存储页,将所述目的存储页中的数据备份到备份页中,执行步骤S3;
步骤S3:所述java卡虚拟机在当前标记页中的备份页号数组中写入所述目的存储页页号,更新当前标记页信息,将当前标记页的下一标记页作为当前标记页;
步骤S4:所述java卡虚拟机将使用次数最少的缓存页中的数据写入对应的目的存储页中;
步骤S5:所述java卡虚拟机将所述对应的目的存储页中的数据写入使用次数最少的缓存页中,并用当前处理的待写数据修改使用次数最少的缓存页中的数据,并更新使用次数,执行步骤109。
所述步骤106、107和108具体为:
步骤S11:所述java卡虚拟机遍历一级缓存区,判断一级缓存区中是否包含当前目的存储页页号,如果是,则将当前处理的待写数据写入包含当前目的存储页页号的一级缓存页中,执行步骤109,否则执行步骤S12;
步骤S12:所述java卡虚拟机查找一级缓存区中使用次数最少的一级缓存页的页号;
步骤S13:所述java卡虚拟机遍历二级缓存区,判断二级缓存页中是否有当前目的存储页页号,如果是,则执行步骤S14,否则执行步骤S18;
步骤S14:所述java卡虚拟机获取一级缓存区中使用次数最少的一级缓存页对应的目的存储页页号,从所述目的存储区中找到对应的目的存储页,将所述目的存储页中的数据备份到对应的备份页中;
步骤S15:所述java卡虚拟机在当前标记页中的备份页号数组中写入所述目的存储页页号,更新当前标记页信息;
步骤S16:所述java卡虚拟机判断备份区剩余的备份页数是否等于缓存区剩余的缓存页数,如果是,则将所有缓存页对应的目的存储页中的数据全部备份到备份页中,执行步骤110,否则所述java卡虚拟机根据所述使用次数最少的缓存页对应的目的存储页页号,将所述使用次数最少的一级缓存页中的数据写入对应的目的存储区中,执行步骤S17;
步骤S17:所述java卡虚拟机将有当前目的存储页页号的二级缓存页中的数据写入使用次数最少的一级缓存页中,执行步骤109;
步骤S18:所述java卡虚拟机查找所述使用次数最少的二级缓存页的页号;
步骤S19:所述java卡虚拟机判断使用次数最少的一级缓存页的使用次数是否大于使用次数最少的二级缓存页的使用次数,如果是,则执行步骤S20,否则执行步骤S21;
步骤S20:所述java卡虚拟机将所述使用次数最少的二级缓存页替换为所述使用次数最少的一级缓存页,将所述使用次数最少的一级缓存页对应的目的存储页页号设置为所述当前目的存储页页号,设置使用次数;
步骤S21:所述java卡虚拟机将当前处理的待写数据写入所述一级缓存区中包含所述当前目的存储页页号的一级缓存页中;
所述步骤110具体为:java卡虚拟机将一级缓存页中的所有数据写入到目的存储区中,判断是否能够写入成功,如果是,则将当前标记页中的标记置为上电不需要恢复数据,否则报错。
所述步骤S16中,所述将所有缓存页对应的目的存储页中的数据全部备份到备份页中,具体为:
步骤A:java卡虚拟机读取当前标记页的信息,获取备份页页号数组、已使用的备份页的页号和未使用的备份页的页号;
步骤B:java卡虚拟机判断缓存区中的数据与所述缓存区对应的目的存储区中的数据是否一致,如果是,则执行步骤110,否则执行步骤C;
步骤C:java卡虚拟机判断目的存储区是否是新申请的数据区,如果是,则执行步骤G,否则执行步骤D;
步骤D:java卡虚拟机判断当前标记页中的标记是否为上电需要恢复,是则执行步骤E,否则执行步骤F;
步骤E:java卡虚拟机遍历备份区,查找与所述缓存页对应的目的存储页是否已经备份,是则执行步骤F,否则将与所述缓存页对应的目的存储页中的数据写入备份页中,执行步骤F;
步骤F:java卡虚拟机更新当前标记页信息,将标记页设为上电需要恢复数据,更新已使用备份页页号和未使用备份页的起始页号,计算当前标记页的校验码写入当前标记页中;
步骤G:java卡虚拟机将所述缓存区中的数据写入对应的目的存储区中,更新使用次数。
所述步骤106、107和108具体为:
步骤S21:所述java卡虚拟机遍历所述缓存区中状态为有效的记录,查找缓存中是否存在包含当前目的存储页页号的记录,如果是,则执行步骤S22,否则执行步骤S25;
步骤S22:所述java卡虚拟机统计所述缓存区中的目的存储页页号包含当前目的存储页页号的有效状态的所有记录,遍历所述统计的所有记录,查找是否有包含所述待写数据的地址的记录,如果是,则用当前处理的待写数据更新所述缓存区中包含待写数据的地址的记录中的数据和数据长度,执行步骤109,否则执行步骤S23;
步骤S23:所述java卡虚拟机统计所述缓存区中与当前目的存储页页号相同的目的存储页页号、且与所述待写数据的地址相交的有效记录偏移;
步骤S24:所述java卡虚拟机将所述当前处理的待写数据的长度与所有缓存中相交的有效记录中的数据长度合并,得到数据块的长度;
步骤S25:所述java卡虚拟机判断是否满足缓存中有效缓存页的总数等于备份页中剩余的页数,或者缓存中的最后一条记录是有效的条件,如果是,则执行步骤S29,否则执行步骤S26;
步骤S26:所述java卡虚拟机判断最后一条无效的记录中的数据长度是否小于合并后的数据块的长度,如果是,则执行步骤S29,否则执行步骤S27;
步骤S27:所述java卡虚拟机将所述缓存中与所述待写数据的地址相交的有效记录中的数据和所述待写数据合并,作为新修改数据,将所述缓存中与所述待写数据的地址相交的有效记录设置为无效;
步骤S28:所述java卡虚拟机在最后一条无效记录中分配空间作为所述新修改数据的记录,更新所述缓存中最后一条记录的信息,执行步骤109;
步骤S29:所述java卡虚拟机遍历所述缓存中的状态,查找所述缓存中状态为有效的一条缓存记录作为当前缓存记录;
步骤S30:所述java卡虚拟机获取与所述当前缓存记录对应的目的存储页页号;
步骤S31:所述java卡虚拟机遍历所述缓存区中所有有效记录的目的存储页页号,获取缓存区中所有与所述当前目的存储页页号对应的缓存记录;
步骤S32:所述java卡虚拟机获取所有与所述当前目的存储页页号对应的缓存记录中,所记录的目的存储区中的偏移,根据所述记录的目的存储区中的偏移将所有与当前目的存储页页号对应的缓存记录写入对应的目的存储区中,并将所有与当前目的存储页页号对应的缓存记录中的状态均记为无效状态;
步骤S33:所述java卡虚拟机判断所述缓存区中是否还有状态为有效的缓存记录,如果是,则返回执行步骤S29,否则执行步骤S34;
步骤S34:所述java卡虚拟机向所述缓存区的起始位置分配一条记录,将当前处理的待写数据写入,并在其后创建一条记录,作为最后一条记录,执行步骤109。
本发明取得的有益效果是:采用本发明的技术方案,能够实现在未知情况下发生掉电时,能够将目的存储区中的数据还原,保证了原有数据的安全性。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例1提供的一种防掉电的数据保护方法流程图;
图2是本发明实施例2提供的一种防掉电的数据保护方法流程图;
图3和图4是本发明实施例3提供的一种防掉电的数据保护方法流程图;
图5和图6是本发明实施例4提供的一种防掉电的数据保护方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本方法的实施例中,目的存储区(非易失性存储区,包括E2PROM、FLASH等)中包含一个或多个目的存储页,标记区中包含一个或多个标记页,备份区中包含一个或多个备份页,缓存区中包含一个或多个缓存页;
实施例1
本发明实施例1提供了一种防掉电的数据保护方法,如图1所示,包括:java卡虚拟机预先设置标记页、备份页和缓存页,本实施例以缓存中只有一页为例;
步骤101:java卡虚拟机上电,进行初始化;
步骤102:所述java卡虚拟机获取当前标记页,根据当前标记页中的标记判断是否需要上电恢复数据,如果是,则执行步骤103,否则执行步骤104;
步骤103:所述java卡虚拟机根据当前标记页中包含的备份页的信息,将备份页中的数据写入目的存储区中,将当前标记页的下一标记页作为当前标记页,更新当前标记页的信息,执行步骤104;
步骤104:当检测到向目的存储区中写数据的触发操作时,所述java卡虚拟机获取待写数据的地址、待写数据和待写数据的长度;
步骤105:所述java卡虚拟机根据所述待写数据的地址,计算与所述待写数据对应的目的存储页页号及所述待写数据在目的存储区中的偏移,将所述与待写数据对应的目的存储页页号作为当前目的存储页页号;
步骤106:所述java卡虚拟机判断所述当前目的存储页页号是否在缓存区中,如果是,则执行步骤108,否则从所述目的存储区中获取与所述当前目的存储页页号对应的目的存储页中的数据,将所述目的存储页中的数据保存在对应的备份页中,执行步骤107;
步骤107:所述java卡虚拟机将当前标记页中的标记设置为上电需要恢复数据,将缓存区中的数据写入目的存储区与其对应的目的存储页中,判断是否写入成功,是则执行步骤108,否则报错;
步骤108:所述java卡虚拟机将所述目的存储页中的数据写入缓存区中,用当前处理的待写数据修改所述缓存区中的数据;
步骤109:所述java卡虚拟机更新待写数据的长度和当前处理的待写数据,根据待写数据长度判断所有的待写数据是否已处理完成,是则执行步骤110,否则根据所述待写数据在目的存储区中的偏移,更新当前目的存储页页号,返回执行步骤106;
优选的,所述根据更新后的待写数据长度判断待写数据是否已处理完成,具体为:判断更新后的待写数据长度是否为0,是则处理完成,否则未处理完成;
步骤110:所述java卡虚拟机将所述缓存区中的全部数据写入当前目的存储区中,判断是否能够写入成功,是则将当前标记页中的标记置为上电不需要恢复数据,否则报错。
实施例2
本发明实施例2提供了一种防掉电的数据保护方法,具体的,以8个标记页、24个备份页、3个缓存页,且每页为64个字节为例来说明,如图2所示,该方法包括:
标记页结构如表1所示:备份页页号的数组占48字节、计数值占4字节、标记占2字节、已使用的备份页的号占1字节、未使用的备份页的起始页号占1字节、校验码占2字节,其余6字节为填充值;备份页与缓存页的结构是由目的存储页的结构决定的;
表1
步骤201:java卡虚拟机上电;
步骤202:java卡虚拟机遍历标记区,判断是否存在校验码正确的标记页,如果是,则执行步骤203,否则执行步骤204;
步骤203:java卡虚拟机从校验码正确的所有标记页中获取计数值最大的标记页,将计数值最大的标记页作为当前标记页,执行步骤205;
具体为,如果存在校验码正确的标记页,则说明java卡虚拟机的防掉电功能已经被设置过;如果所有的标记页的校验码都不正确,则说明java卡虚拟机的防掉电功能还没有被设置过;
步骤204:java卡虚拟机对备份区和标记区进行初始化,将第一页标记页作为当前标记页,执行步骤205;
优选的,将第一页标记页初始化为:备份页页号数据全为0xFF,计数值为0x01,标记为0x0000,即不需恢复,已使用的备份页号为0xFF,未使用的备份页的起始页号为0x00,计算该标记页的校验码,其余标记页初始化为0xFF;将所有的备份页均初始化为0x00;
本实施例中,如表1所示,将备份区初始化为:
表2
0x00 | …… | 0x00 |
本实施例中,如表3所示,将标记区初始化为:
表3
步骤205:java卡虚拟机检查当前标记页中的标记,根据该标记的值判断是否需要上电恢复数据,如果是,则执行步骤206,否则执行步骤207;
本实施例中,优选的,当标记页中的标记的值为0xAAAA时,表示需要上电恢复数据,则需要对目的存储区进行恢复,当标记页中的标记的值不为0xAAAA时,表示不需要上电恢复数据,则无需对目的存储区进行恢复;
步骤206:java卡虚拟机获取当前标记页中的备份页页号的数组,根据标记页中的备份页页号将备份页中的数据按页写入目的存储区中,将下一标记页作为当前标记页,更新当前标记页信息,执行步骤207;
本实施例中,更新标记页信息,具体为:将标记页中的备份页页号数组全部设置为第一数值,将计数值加第二数值,将标记设置为上电不需要恢复数据,将已使用备份页的页号设置为第一数值,未使用的备份页的起始页号不变,计算该标记页的校验码写入标记页中;
优选的,第一数值为0xff,第二数值为0x01,
步骤207:当检测到向目的存储区中写数据的触发操作时,java卡虚拟机获取待写数据的地址、待写数据和待写数据的长度;
例如,本实施例中,待写数据为0x22;
步骤208:java卡虚拟机根据所述待写数据的地址,计算与待写数据对应的目的存储页页号及该待写数据在目的存储区中的偏移,将与待写数据对应的目的存储页页号作为当前目的存储页页号;
例如,本实施例中,根据所述待写数据的地址,计算待写数据的页号为45;
步骤209:java卡虚拟机遍历缓存区,判断缓存区中是否有当前目的存储页页号,如果是,则执行步骤215,否则执行步骤210;
步骤210:java卡虚拟机查找使用次数最少的缓存页的页号;
如果java卡虚拟机第一次上电,则缓存页全空,使用次数最少的缓存页的使用次数均为0,则可取使用次数最少的缓存页的页号为1:
如果java卡虚拟机不是第一次上电,且缓存中没有待写数据的页号,例如,缓存页第一页是目的存储区中第52页的数据0x30,第二页为目的存储区中第23页的数据0x32,第三页为目的存储区中第67页的数据0x35,且使用次数均为1,则可取使用次数最少的缓存页的页号为1;如表4所示,当前缓存页为;
表4
步骤211:java卡虚拟机判断备份区剩余的备份页数是否等于缓存区剩余的缓存页数,如果是,则将所有缓存页对应的目的存储页中的数据全部备份到备份区中,执行步骤219,否则java卡虚拟机获取缓存中使用次数最少的缓存页对应的目的存储页页号,从目的存储区中找到对应的目的存储页,将该目的存储页中的数据备份到备份页中,执行步骤212;
本实施例中,所述步骤210与所述步骤211还可以先判断剩余的备份页数是否等于缓存页数,如果否,则查找使用次数最少的缓存页的页号;
本实施例中,目的存储页中原数据为0x11,将0x11保存在备份页的第一页,如表5所示,当前备份页为:
表5
步骤212:java卡虚拟机在当前标记页中的备份页号数组中写入该目的存储页页号,更新当前标记页信息,将当前标记页的下一标记页作为当前标记页;
所述更新当前标记页信息,具体为:将计数值加0x01,将标记置为0xAAAA,将已使用的备份页号置为0x00,将未使用的备份页号置为0x01,计算校验码,
本实施例中,如表6所示,标记页为:
表6
步骤213:java卡虚拟机将使用次数最少的缓存页中的数据写入对应的目的存储页中;
本实施例中,将缓存页中的第一页0x30写入目的存储区中;
步骤214:java卡虚拟机将所述对应的目的存储页中的数据写入使用次数最少的缓存页中,并用当前处理的待写数据修改使用次数最少的缓存页中的数据,并更新使用次数,执行步骤216;
优选的,更新使用次数具体为,将使用次数加第二数值1;
本实施例中,如表7所示,如果缓存中使用次数最少的页的使用次数为0,则直接将待写数据写入该缓存页中:
表7
本实施例中,如果缓存页中使用次数最少的页的使用次数为1,将待写数据0x22写入使用次数最少的缓存页中,将使用次数置为2,如表8所示:
表8
步骤215:java卡虚拟机用当前处理的待写数据修改缓存页中的数据,更新使用次数;
优选的,更新使用次数具体为,将使用次数加第二数值0x01;
步骤216:java卡虚拟机将待写数据长度更新为待写数据长度减去已写入缓存区的长度;
步骤217:java卡虚拟机判断更新后的待写数据长度是否等于0,如果是,则执行步骤218,否则根据待写数据在目的存储区中的偏移,更新当前目的存储页页号,返回执行步骤209;
本实施例中,根据该数据在目的存储区中的偏移,更新当前目的存储页页号,具体为:假设待写数据为90个字节,即0x5A个字节,待写数据的地址为0x20,对应的目的存储页页号为0x00,即待写数据在0x00号页的第0x20个字节的位置开始写起,一页为64个字节,即0x40个字节,从0x20至0x40共写入0x20个字节,则剩余0x5A减去0x20等于0x3A个字节,则写入目的存储区的下一页,即将当前目的存储区的页号加1,即将页号为0x01的目的存储页作为当前目的存储页页号;
步骤218:java卡虚拟机将缓存区中的所有数据写入目的存储区中,判断是否能够写入成功,如果是,则执行步骤219,否则报错;
本实施例中,将0x22写入目的存储区中页号为45的位置,将0x32写入目的存储区中页号为23的位置,0x35写入目的存储区中页号为67的位置;
步骤219:java卡虚拟机将标记页中的标记置为上电不需要恢复数据;
本实施例中,还包括:将当前标记页的下一标记页中的备份页页号数组全部设置为0xff,计数值加0x01,将已使用备份页的页号设置为0xff,计算该标记页的校验码写入当前标记页的下一标记页中;
本实施例中,如果在以上的某个步骤中发生掉电,则在下一次上电时,继续执行步骤201,使得在发生掉电的情况时,重新上电仍然可以还原原有数据,实现了防掉电的功能。
实施例3
本发明实施例3提供了一种防掉电的数据保护方法,如图3和图4所示,包括:本实施例中,java卡虚拟机预先设置标记页、备份页和缓存页,其中,缓存区设置有一级缓存区和二级缓存区,一级缓存区中包含一个或多个一级缓存页,二级缓存区中包含一个或多个二级缓存页;
本实施例中,以8个标记页、24个备份页、3个一级缓存页和6个二级缓存页,且每页为64个字节为例来说明:
标记页结构为:备份页页号的数组占48字节、计数值占4字节、标记占2字节、已使用的备份页的号占1字节、未使用的备份页的起始页号占1字节、校验码占2字节,其余6字节为填充值;备份页与缓存页的结构是由目的存储页的结构决定的;
步骤301:java卡虚拟机上电;
步骤302:java卡虚拟机遍历标记页,判断是否存在校验码正确的标记页,如果是,则执行步骤303,否则执行步骤304;
步骤303:java卡虚拟机从校验码正确的所有标记页中获取计数值最大的标记页,将计数值最大的标记页作为当前标记页,执行步骤305;
具体为,如果存在校验码正确的标记页,则说明java卡虚拟机的防掉电功能已经被设置过;
步骤304:java卡虚拟机对备份区和标记区进行初始化,将第一页标记页作为当前标记页,执行步骤305;
具体为,如果所有的标记页的校验码都不正确,则说明java卡虚拟机的防掉电功能还没有被设置过,因此将第一页标记页初始化为:备份页页号数据全为0xff,计数值为0x01,标记为不需要上电恢复数据,已使用的备份号为0xff,未使用的备份页的起始页号为0x00,计算该标记页的校验码,其余标记页初始化为0xff;将所有的备份页均初始化为0x00;
步骤305:java卡虚拟机检查当前标记页中的标记,根据该标记判断是否需要恢复数据,如果是,则执行步骤306,否则执行步骤307;
本实施例中,当标记页中的标记为上电需要恢复数据,则表示需要对目的存储区页中的数据进行恢复;
步骤306:java卡虚拟机获取当前标记页中的备份页页号的数组,根据标记页中的备份页页号,将备份页中的数据按页写入目的存储区中,将下一标记页作为当前标记页,更新当前标记页信息;
本实施例中,更新当前标记页信息,具体为:将标记页中的备份页页号数组全部设置为0xff,计数值加1,将标记设置为不需要恢复,将已使用备份页的页号设置为0xff,未使用的备份页的起始页号不变,计算当前标记页的校验码写入当前标记页中;
步骤307:当检测到向目的存储区中写数据的触发操作时,java卡虚拟机获取待写数据的地址、待写数据和待写数据的长度;
例如,本实施例中,待写数据为0x22;
本实施例中,向目的存储区中写数据的触发操作,包括下载包操作、创建对象操作、写操作指令操作、垃圾回收搬移对象操作等;
步骤308:java卡虚拟机根据所述待写数据的地址,计算与待写数据对应的目的存储页页号及该待写数据在目的存储区中的偏移,将与待写数据对应的目的存储页页号作为当前目的存储页页号;
例如,本实施例中,根据所述待写数据的地址,计算待写数据的页号为45;
步骤309:所述java卡虚拟机遍历一级缓存区,判断一级缓存区中是否包含当前目的存储页页号,如果是,则将当前处理的待写数据写入包含当前目的存储页页号的一级缓存页中,执行步骤321,否则执行步骤310;
步骤310:java卡虚拟机查找一级缓存区中使用次数最少的一级缓存页的页号;
本实施例中,如果java卡虚拟机第一次上电,则缓存页全空,使用次数最少的缓存页的使用次数均为0,则可取使用次数最少的一级缓存页的页号为1:
如果java卡虚拟机不是第一次上电,且缓存中没有待写数据的页号,例如,缓存页第一页是目的存储区中第52页的数据0x30,第二页为目的存储区中第23页的数据0x32,第三页为目的存储区中第67页的数据0x35,且使用次数均为3,则可取使用次数最少的一级缓存页的页号为3;如表9所示,当前缓存页为:
表9
步骤311:java卡虚拟机遍历二级缓存区,判断二级缓存区中是否有当前目的存储页页号,如果是,则执行步骤312,否则执行步骤316;
本实施例中,例如,二级缓存区中第一页是目的存储区中第18页的数据0x21,使用次数为5、第二页为目的存储区中第27页的数据0x28,使用次数为3,第三页为目的存储区中第36页的数据0x39,使用次数为2、第四页为目的存储区中第45页的数据0x42,使用次数为4、第五页为目的存储区中第54页的数据0x55,使用次数为6、第六页为目的存储区中第62页的数据0x68,使用次数为8,当前二级缓存中存在目的存储区中第45页的数据,如表10所示,当前二级缓存为:
表10
步骤312:java卡虚拟机获取一级缓存区中使用次数最少的缓存页对应的目的存储页页号,从该目的存储区中找到对应的目的存储页,将该目的存储页中的数据备份到对应的备份页中;
例如,该目的存储页中的数据为0x11,将0x11保存在备份页中,如表11所示,保存后的备份页为:
表11
步骤313:java卡虚拟机在当前标记页中的备份页号数组中写入该目的存储区页页号,更新当前标记页信息;
优选的,更新当前标记页信息,具体为:将计数值加0x01,将标记置为0xAAAA,将已使用的备份页号置为0x00,将未使用的备份页号置为0x01,计算校验码写入当前标记页中;
本实施例中,如表12所示,当前标记页为:
表12
步骤314:java卡虚拟机判断备份区剩余的备份页数是否等于缓存区剩余的缓存页数,是则将所有缓存页对应的目的存储页中的数据全部备份到备份页中,执行步骤324,否则java卡虚拟机根据一级缓存中使用次数最少的缓存页对应的目的存储页页号,将一级缓存中使用次数最少的缓存页中的数据写入对应目的存储区中,执行步骤315;
本实施例中,一级缓存区中使用次数最少的页的数据为0x30,将0x30写入目的存储区中0x11所在的位置;
本实施例中,将所有缓存页对应的目的存储页中的数据全部备份到备份页中,具体为:
步骤A:java卡虚拟机读取当前标记页的信息,获取备份页页号数组、已使用的备份页的页号和未使用的备份页的页号;
步骤B:java卡虚拟机判断缓存区中的数据与所述缓存区对应的目的存储区中的数据是否一致,如果是,则执行步骤110,否则执行步骤C;
步骤C:java卡虚拟机判断目的存储区是否是新申请的数据区,如果是,则执行步骤G,否则执行步骤D;
步骤D:java卡虚拟机判断当前标记页中的标记是否为上电需要恢复,是则执行步骤E,否则执行步骤F;
步骤E:java卡虚拟机遍历备份区,查找与所述缓存页对应的目的存储页是否已经备份,是则执行步骤F,否则将与所述缓存页对应的目的存储页中的数据写入备份页中,执行步骤F;
步骤F:java卡虚拟机更新当前标记页信息,将标记页设为上电需要恢复数据,更新已使用备份页页号和未使用备份页的起始页号,计算当前标记页的校验码写入当前标记页中;
步骤G:java卡虚拟机将所述缓存区中的数据写入对应的目的存储区中,更新使用次数。
步骤315:java卡虚拟机将有当前目的存储页页号的二级缓存页中的数据写入一级缓存区中使用次数最少的一级缓存页中,执行步骤321;
本实施例中,将有当前目的存储页页号的二级缓存页0x42写入一级缓存区中使用次数最少的一级缓存页中,如表13所示,当前一级缓存区为:
表13
步骤316:java卡虚拟机查找二级缓存区中使用次数最少的二级缓存页的页号;
本实施例中,如果当前的二级缓存区中第一页是目的存储区中第18页的数据0x21、第二页为目的存储区中第27页的数据0x28,使用次数为3,第三页为目的存储区中第36页的数据0x39,使用次数为2、第四页为目的存储区中第46页的数据0x48,使用次数为4、第五页为目的存储区中第54页的数据0x55,使用次数为6、第六页为目的存储区中第62页的数据0x68,使用次数为8,当前二级缓存中没有目的存储区中第45页的数据,如表14所示,当前二级缓存区为:
表14
查找到二级缓存区中使用次数最少的二级缓存页为:使用次数为2的第三页二级缓存页0x39;
步骤317:java卡虚拟机判断一级缓存区中使用次数最少的一级缓存页的使用次数是否大于二级缓存区中使用次数最少的二级缓存页的使用次数,如果是,则执行步骤318,否则执行步骤319;
本实施例中,一级缓存区中使用次数最少的一级缓存页的使用次数为3,二级缓存区中使用次数最少的二级缓存页的使用次数为2;
步骤318:java卡虚拟机将使用次数最少的二级缓存页替换为使用次数最少的一级缓存页,将使用次数最少的一级缓存页的页号设置为当前目的存储页页号,将使用次数设置为0x01;
本实施例中,将二级缓存区中使用次数最少的二级缓存页,即第三页0x39替换为一级缓存区中使用次数最少的一级缓存页0x30;然后将一级缓存区中使用次数最少的一级缓存页的页号设置为当前目的存储页页号45;
如表15所示,当前二级缓存区为:
表15
步骤319:java卡虚拟机当前处理的待写数据写入一级缓存区中包括当前目的存储页页号的一级缓存页中;
将待写数据写入一级缓存区中包括当前目的存储页页号的一级缓存页中后,如表16所示,当前一级缓存区为:
表16
步骤320:java卡虚拟机将该一级缓存页设置为已被写入数据;
步骤321:java卡虚拟机将待写数据长度更新为待写数据长度减去已写入缓存区的长度;
步骤322:java卡虚拟机判断待写数据长度是否等于0,如果是,则执行步骤323,否则根据待写数据在目的存储区中的偏移,更新当前目的存储页页号,返回执行步骤309;
本实施例中,根据该数据在目的存储页中的偏移,更新当前目的存储区页,具体为:假设待写数据为90个字节,即0x5A个字节,待写数据的地址为0x20,对应的目的存储区的页号为0x00,即待写数据在0x00号页的第0x20个字节的位置开始写起,一页为64个字节,即0x40个字节,从0x20至0x40共写入0x20个字节,则剩余0x5A减去0x20等于0x3A个字节,则写入目的存储区的下一页,即将当前目的存储区的页号加1,即将页号为0x01的目的存储页作为当前目的存储区页;
步骤323:java卡虚拟机将一级缓存页中的所有数据写入到目的存储区中,判断是否能够写入成功,如果是,则执行步骤324,否则报错;
步骤324:java卡虚拟机将标记页中的标记置为上电不需要恢复数据;
本实施例中,如果在以上的某个步骤中发生掉电,则在下一次上电时,继续执行步骤301,实现了防掉电的功能,使得在发生掉电的情况时,重新上电仍然可以还原原有数据,实现了防掉电的功能。
实施例4
本发明实施例4提供了一种防掉电的数据保护方法,如图5和图6所示,包括:本实施例中,java卡虚拟机预设设置标记页、备份页和缓存页;
标记页结构为:备份页页号的数组占48字节、计数值占4字节、标记占2字节、已使用的备份页的号占1字节、未使用的备份页的起始页号占1字节、校验码占2字节,其余6字节为填充值;备份页与缓存页的结构是由待存储的目的存储区页的结构决定的;如表17所示,标记页结构为:
表17
如表18所示,缓存页的结构为:
表18
步骤401:java卡虚拟机上电;
具体的,java卡虚拟机上电后,将缓存区初始化为:状态为无效、目的存储页页号为随机数、目的存储区偏移为随机数,数据长度为整个缓存区的长度;以缓存区长度为192字节为例说明,如表19所示:
表19
无效 | xx | xx | 0xC0 | xx |
步骤402:java卡虚拟机遍历标记页,判断是否存在校验码正确的标记页,如果是,则执行步骤403,否则执行步骤404;
步骤403:java卡虚拟机从校验码正确的所有标记页中获取计数值最大的标记页,将计数值最大的标记页作为当前标记页,执行步骤405;
具体为,如果存在校验码正确的标记页,则说明java卡虚拟机的防掉电功能已经被设置过;
步骤404:java卡虚拟机对备份区和标记区进行初始化,将第一页标记页作为当前标记页,执行步骤405;
具体为,如果所有的标记页的校验码都不正确,则说明java卡虚拟机的防掉电功能还没有被设置过,因此将第一页标记页初始化为:备份页页号数据全为0xFF,计数值为0x01,标记为0x0000,即不需恢复,已使用的备份页号为0xFF,未使用的备份页的起始页号为0x00,计算该标记页的校验码,其余标记页初始化为0xFF;将所有的备份区均初始化为0x00;
本实施例中,如表20所示,将备份区初始化为:
表20
本实施例中,如表21所示,将标记区初始化为:
表21
步骤405:java卡虚拟机检查当前标记页中的标记,根据该标记的值判断是否需要上电恢复数据,如果是,则执行步骤406,否则执行步骤407;
本实施例中,当标记页中的标记的值为0xAAAA时,表示需要上电恢复数据,则需要对目的存储区页进行恢复,当标记页中的标记的值不为0xAAAA时,表示上电不需要恢复数据,则无需对目的存储区页进行恢复;
步骤406:java卡虚拟机获取当前标记页中的备份页页号的数组,根据当前标记页中的备份页页号、已使用备份页的页号和未使用的备份页的起始页号,将备份页中的数据按页写入目的存储区中,将下一标记页作为当前标记页,更新当前标记页信息,执行步骤407;
本实施例中,更新当前标记页信息,具体为:将标记页中的备份页页号数组全部设置为0xff,计数值加1,将标记设置为不需要恢复,将已使用备份页的页号设置为0xff,未使用的备份页的起始页号不变,计算当前标记页的校验码写入当前标记页中;
步骤407:当检测到向目的存储区中写数据的触发操作时,java卡虚拟机获取待写数据的地址、待写数据和待写数据的长度;
步骤408:java卡虚拟机根据所述待写数据的地址,计算与待写数据对应的目的存储页页号及该数据在目的存储区中的偏移,将与待写数据对应的目的存储页页号作为当前目的存储页页号;
例如,待写数据的页号为0x05、偏移为0x03、数据长度0x08,数据为0x1122334455667788
步骤409:java卡虚拟机遍历缓存区中状态为有效的记录,查找缓存区中是否存在包含当前目的存储页页号的记录,如果是,则执行步骤410,否则执行步骤413;
本实施例中,当前目的存储页页号中的数据与缓存区中已存在的记录的关系为包含、相交和不相交;
其中,待写数据的地址范围在缓存中记录中的数据的地址之内时,两者关系为包含,例如,待写数据的地址为0x10到0x30,缓存中记录的数据的地址为0x00到0x40,则两者关系为包含;
其中,待写数据的地址范围的一部分包含在缓存中的某一条记录的数据的地址中,则两者关系为相交,例如,待写数据的地址为0x10到0x30,缓存中记录的数据的地址为0x20到0x40,则两者关系为相交;
其中,待写数据的地址范围全部都不包含在缓存中的某一条记录的数据的地址中,则两者关系为不相交,例如,待写数据的地址为0x10到0x20,缓存中记录的数据的地址为0x30到0x40,则两者关系为不相交;
本实施例中,如表22所示,缓存区结构为:
表22
有效 | 0x5 | 0x6 | 0x10 | 0x0607... |
有效 | 0x3 | 0x08 | 0x10 | 0x0607... |
无效 | xx | xx | 0x08 | xx |
有效 | 0x05 | 0x24 | 0x08 | 0x0607... |
无效 | xx | xx | 0x08 | xx |
本实施例中,缓存区中包含待写数据的页号的记录;
步骤410:java卡虚拟机统计缓存区中的目的存储页页号包含当前目的存储页页号的有效状态的所有记录,遍历统计的所有记录,查找是否有包含所述待写数据的地址的记录,如果是,则用待写数据更新缓存区中包含待写数据的地址的记录中的数据和数据长度,执行步骤423,否则执行步骤411;
本实施例中,从缓存区中统计得到与当前目的存储页页号相同的有效状态的所有记录为2条,如表23所示;
表23
有效 | 0x05 | 0x060x1 | 0 | 0x0607... |
有效 | 0x05 | 0x24 | 0x08 | 0x0607 |
步骤411:java卡虚拟机统计缓存区中与当前目的存储页页号相同的目的存储页页号、且与所述待写数据的地址相交的有效记录偏移;
步骤412:java卡虚拟机计算待写数据的长度与所有缓存区中相交的有效记录的数据长度合并后的得到的数据块的长度;
本实施例中,待写数据的长度为0x08,与缓存中相交的有效记录的数据长度为0x10,合并后的数据块的长度为0x18;
步骤413:java卡虚拟机判断是否满足缓存区中有效缓存页的总数等于备份页中剩余的页数,或者缓存区中的最后一条记录是有效的条件,如果是,则执行步骤417,否则执行步骤414;
本实施例中,缓存区中的最后一条记录为无效,执行步骤414;
步骤414:java卡虚拟机判断最后一条无效的记录中的数据长度是否小于合并后的数据块的长度,如果是,则执行步骤417,否则执行步骤415;
本实施例中,最后一条无效的记录中的数据长度为8,小于合并后的数据块的长度18;
步骤415:将缓存区中与所述待写数据的地址相交的有效记录中的数据和所述待写数据合并,作为新修改数据,将缓存区中与所述待写数据的地址相交的有效记录设置为无效;
如果本实施例中最后一条无效记录的数据长度大于18,则将待写数据与缓存区中相交的有效数据即缓存中的第二条记录的数据合并,并将第二条记录的状态置为无效;
本实施例中,如表24所示,此时缓存结构为:
表24
无效 | 0x5 | 0x06 | 0x10 | 0x0607... |
有效 | 0x3 | 0x08 | 0x10 | 0x0607... |
无效 | xx | xx | 0x08 | xx |
有效 | 0x05 | 0x24 | 0x08 | 0x0607... |
无效 | xx | xx | 0x08 | xx |
步骤416:在最后一条无效记录中分配空间作为所述新修改数据的记录,更新所述缓存中最后一条记录的信息,执行步骤423;
本实施例中,如表25所示,此时缓存结构为:
表25
无效 | 0x05 | 0x06 | 0x10 | 0x0607... |
有效 | 0x03 | 0x08 | 0x10 | 0x0607... |
无效 | xx | xx | 0x08 | xx |
有效 | 0x05 | 0x24 | 0x08 | 0x0607... |
无效 | xx | xx | 0x08 | xx |
有效 | 0x05 | 0x03 | 0x18 | 0x1122... |
步骤417:java卡虚拟机遍历缓存区中的状态,查找缓存区中状态为有效的一条缓存记录作为当前缓存记录;
本实施例中,从缓存中找出状态为有效的缓存记录,如表26所示:
表26
有效 | 0x03 | 0x08 | 0x10 | 0x0607... |
有效 | 0x05 | 0x24 | 0x08 | 0x0607... |
有效 | 0x05 | 0x03 | 0x18 | 0x1122... |
将获取到的以下有效记录作为当前缓存记录,如表27所示:
表27
有效 | 0x03 | 0x08 | 0x10 | 0x0607... |
步骤418:java卡虚拟机获取与所述当前缓存记录对应的目的存储页页号;
本实施例中,从当前缓存记录中获取到目的存储区页号为0x03;
步骤419:java卡虚拟机遍历缓存区中所有有效记录的目的存储页页号,获取缓存区中所有与该目的存储页页号对应的缓存记录;
步骤420:java卡虚拟机获取所有与该目的存储页页号对应的缓存记录中,所记录的目的存储区中的偏移,根据记录的目的存储区中的偏移将所有与当前目的存储页页号对应的缓存记录写入对应的目的存储区中,并将所有与当前目的存储区页号对应的缓存记录中的状态均记为无效状态;
本实施例中,将所有与所述目的存储区页号对应的缓存记录中的状态均记为无效状态,如表28所示,:
表28
无效 | 0x05 | 0x06 | 0x10 | 0x0607... |
无效 | 0x03 | 0x08 | 0x10 | 0x0607... |
无效 | xx | xx | 0x08 | xx |
有效 | 0x05 | 0x24 | 0x08 | 0x0607... |
无效 | xx | xx | 0x08 | xx |
步骤421:java卡虚拟机判断缓存区中是否还有状态为有效的缓存记录,如果是,则返回执行步骤417,否则执行步骤422;
本实施例中,如表29所示,还存在状态为有效的缓存记录,返回执行417;
表29
有效 | 0x05 | 0x24 | 0x08 | 0x0607... |
有效 | 0x05 | 0x03 | 0x18 | 0x1122... |
步骤422:向缓存区的起始位置分配一条记录,将当前处理的待写数据写入,并在其后创建一条记录,作为最后一条记录;
具体的,最后一条记录的状态为无效,长度为缓存大小减去包含待写数据的记录的大小;
本实施例中,根据待写数据建立一条记录,如表30所示:
表30
有效 | 0x05 | 0x03 | 0x18 | 0x1122... |
将该记录写入缓存中,并更新最后一条记录信息,如表31所示:
表31
有效 | 0x05 | 0x03 | 0x18 | 0x1122... |
无效 | xx | xx | 0xA8 | xx |
步骤423:将待写数据长度更新为待写数据长度减去已写入缓存区的长度,将待写数据的地址更新为待写数据的地址加上已写入缓存区的地址;
步骤424:判断更新后的待写数据长度是否等于0,如果是,则执行步骤425,否则根据所述待写数据在目的存储区中的偏移,更新当前目的存储页页号,返回执行步骤409;
步骤425:java卡虚拟机将缓存区中的所有数据写入目的存储区中,判断是否能够写入成功,如果是,则执行步骤426,否则报错;
步骤426:java卡虚拟机将标记页中的标记置为上电不需要恢复数据。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利待求的保护范围为准。
Claims (8)
1.一种防掉电的数据保护方法,其特征在于,包括:
步骤101:java卡虚拟机上电,进行初始化;
步骤102:所述java卡虚拟机获取当前标记页,根据当前标记页中的标记判断是否需要上电恢复数据,如果是,则执行步骤103,否则执行步骤104;
步骤103:所述java卡虚拟机根据当前标记页中包含的备份页的信息,将备份页中的数据写入目的存储区中,将当前标记页的下一标记页作为当前标记页,更新当前标记页的信息,执行步骤104;
步骤104:当检测到向目的存储区中写数据的触发操作时,所述java卡虚拟机获取待写数据的地址、待写数据和待写数据的长度;
步骤105:所述java卡虚拟机根据所述待写数据的地址,计算与所述待写数据对应的目的存储页页号及所述待写数据在目的存储区中的偏移,将与所述待写数据对应的目的存储页页号作为当前目的存储页页号;
步骤106:所述java卡虚拟机判断所述当前目的存储页页号是否在缓存区中,如果是,则执行步骤108,否则从所述目的存储区中获取与所述当前目的存储页页号对应的目的存储页中的数据,将所述目的存储页中的数据保存在对应的备份页中,执行步骤107;
步骤107:所述java卡虚拟机将当前标记页中的标记设置为上电需要恢复数据,将缓存区中的数据写入目的存储区与其对应的目的存储页中,判断是否写入成功,是则将所述目的存储页中的数据写入缓存区中,执行步骤108,否则报错;
步骤108:所述java卡虚拟机用当前处理的待写数据修改所述缓存区中的数据;
步骤109:所述java卡虚拟机更新待写数据的长度和当前处理的待写数据,根据待写数据长度判断所有的待写数据是否已处理完成,是则执行步骤110,否则根据所述待写数据在目的存储区中的偏移,更新当前目的存储页页号,返回执行步骤106;
步骤110:所述java卡虚拟机将所述缓存区中的全部数据写入当前目的存储区中,判断是否能够写入成功,是则将当前标记页中的标记置为上电不需要恢复数据,否则报错。
2.根据权利要求1所述的方法,其特征在于,所述步骤101中,所述java卡虚拟机进行初始化,具体为:
步骤A:所述java卡虚拟机遍历标记页,判断是否存在校验码正确的标记页,如果是,则执行步骤B,否则执行步骤C;
步骤B:所述java卡虚拟机从校验码正确的所有标记页中获取计数值最大的标记页,将所述计数值最大的标记页作为当前标记页,执行步骤102;
步骤C:所述java卡虚拟机对备份区和标记区进行初始化,将第一页标记页作为当前标记页,执行步骤102。
3.根据权利要求1所述的方法,其特征在于,所述步骤103中,所述根据当前标记页中包含的备份页的信息,将备份页中的数据写入目的存储区中,具体为:获取当前标记页中的备份页页号数组,根据当前标记页中的备份页页号获取对应备份页中的数据,并将获取到的数据写入目的存储区中。
4.根据权利要求3所述的方法,其特征在于,所述步骤103中,所述更新当前标记页信息,具体为:将当前标记页中的备份页页号数组设置为第一数值,将计数值加第二数值,将当前标记页中的标记设置为上电不需要恢复数据,将已使用备份页的页号设置为第一数值,计算校验码写入当前标记页中。
5.根据权利要求1所述的方法,其特征在于,所述步骤106、107和108具体为:
步骤S1:所述java卡虚拟机遍历所述缓存区,判断所述缓存区中是否有所述当前目的存储页页号,如果是,则用当前处理的待写数据修改所述缓存区中的数据,更新使用次数,执行步骤109,否则执行步骤S2;
步骤S2:所述java卡虚拟机判断备份区剩余的备份页数是否等于缓存区剩余的缓存页数,如果是,则将所有缓存页对应的目的存储页中的数据全部备份到备份页中,执行步骤110,否则查找并获取缓存区中使用次数最少的缓存页对应的目的存储页页号,从目的存储区中找到对应的目的存储页,将所述目的存储页中的数据备份到备份页中,执行步骤S3;
步骤S3:所述java卡虚拟机在当前标记页中的备份页号数组中写入所述目的存储页页号,更新当前标记页信息,将当前标记页的下一标记页作为当前标记页;
步骤S4:所述java卡虚拟机将使用次数最少的缓存页中的数据写入对应的目的存储页中;
步骤S5:所述java卡虚拟机将所述对应的目的存储页中的数据写入使用次数最少的缓存页中,并用当前处理的待写数据修改使用次数最少的缓存页中的数据,并更新使用次数,执行步骤109。
6.根据权利要求1所述的方法,其特征在于,所述步骤106、107和108具体为:
步骤S11:所述java卡虚拟机遍历一级缓存区,判断一级缓存区中是否包含当前目的存储页页号,如果是,则将当前处理的待写数据写入包含当前目的存储页页号的一级缓存页中,执行步骤109,否则执行步骤S12;
步骤S12:所述java卡虚拟机查找一级缓存区中使用次数最少的一级缓存页的页号;
步骤S13:所述java卡虚拟机遍历二级缓存区,判断二级缓存页中是否有当前目的存储页页号,如果是,则执行步骤S14,否则执行步骤S18;
步骤S14:所述java卡虚拟机获取一级缓存区中使用次数最少的一级缓存页对应的目的存储页页号,从所述目的存储区中找到对应的目的存储页,将所述目的存储页中的数据备份到对应的备份页中;
步骤S15:所述java卡虚拟机在当前标记页中的备份页号数组中写入所述目的存储页页号,更新当前标记页信息;
步骤S16:所述java卡虚拟机判断备份区剩余的备份页数是否等于缓存区剩余的缓存页数,如果是,则将所有缓存页对应的目的存储页中的数据全部备份到备份页中,执行步骤110,否则所述java卡虚拟机根据所述使用次数最少的一级缓存页对应的目的存储页页号,将所述使用次数最少的一级缓存页中的数据写入对应的目的存储区中,执行步骤S17;
步骤S17:所述java卡虚拟机将有当前目的存储页页号的二级缓存页中的数据写入使用次数最少的一级缓存页中,执行步骤109;
步骤S18:所述java卡虚拟机查找所述二级缓存区中使用次数最少的二级缓存页的页号;
步骤S19:所述java卡虚拟机判断使用次数最少的一级缓存页的使用次数是否大于使用次数最少的二级缓存页的使用次数,如果是,则执行步骤S20,否则执行步骤S21;
步骤S20:所述java卡虚拟机将所述使用次数最少的二级缓存页替换为所述使用次数最少的一级缓存页,将所述使用次数最少的一级缓存页对应的目的存储页页号设置为所述当前目的存储页页号,设置使用次数;
步骤S21:所述java卡虚拟机将当前处理的待写数据写入所述一级缓存区中包含所述当前目的存储页页号的一级缓存页中;
所述步骤110具体为:java卡虚拟机将一级缓存页中的所有数据写入到目的存储区中,判断是否能够写入成功,如果是,则将当前标记页中的标记置为上电不需要恢复数据,否则报错。
7.根据权利要求6所述的方法,其特征在于,所述步骤S16中,所述将所有缓存页对应的目的存储页中的数据全部备份到备份页中,具体为:
步骤A:java卡虚拟机读取当前标记页的信息,获取备份页页号数组、已使用的备份页的页号和未使用的备份页的页号;
步骤B:java卡虚拟机判断缓存区中的数据与所述缓存区对应的目的存储区中的数据是否一致,如果是,则执行步骤110,否则执行步骤C;
步骤C:java卡虚拟机判断目的存储区是否是新申请的数据区,如果是,则执行步骤G,否则执行步骤D;
步骤D:java卡虚拟机判断当前标记页中的标记是否为上电需要恢复,是则执行步骤E,否则执行步骤F;
步骤E:java卡虚拟机遍历备份区,查找与所述缓存页对应的目的存储页是否已经备份,是则执行步骤F,否则将与所述缓存页对应的目的存储页中的数据写入备份页中,执行步骤F;
步骤F:java卡虚拟机更新当前标记页信息,将标记页设为上电需要恢复数据,更新已使用备份页页号和未使用备份页的起始页号,计算当前标记页的校验码写入当前标记页中;
步骤G:java卡虚拟机将所述缓存区中的数据写入对应的目的存储区中,更新使用次数。
8.根据权利要求1所述的方法,其特征在于,所述步骤106、107和108具体为:
步骤S21:所述java卡虚拟机遍历所述缓存区中状态为有效的记录,查找缓存中是否存在包含当前目的存储页页号的记录,如果是,则执行步骤S22,否则执行步骤S25;
步骤S22:所述java卡虚拟机统计所述缓存区中的目的存储页页号包含当前目的存储页页号的有效状态的所有记录,遍历所述统计的所有记录,查找是否有包含所述待写数据的地址的记录,如果是,则用当前处理的待写数据更新所述缓存区中包含待写数据的地址的记录中的数据和数据长度,执行步骤109,否则执行步骤S23;
步骤S23:所述java卡虚拟机统计所述缓存区中与当前目的存储页页号相同的目的存储页页号、且与所述待写数据的地址相交的有效记录偏移;
步骤S24:所述java卡虚拟机将所述当前处理的待写数据的长度与所有缓存中相交的有效记录中的数据长度合并,得到数据块的长度;
步骤S25:所述java卡虚拟机判断是否满足缓存中有效缓存页的总数等于备份页中剩余的页数,或者缓存中的最后一条记录是有效的条件,如果是,则执行步骤S29,否则执行步骤S26;
步骤S26:所述java卡虚拟机判断最后一条无效的记录中的数据长度是否小于合并后的数据块的长度,如果是,则执行步骤S29,否则执行步骤S27;
步骤S27:所述java卡虚拟机将所述缓存中与所述待写数据的地址相交的有效记录中的数据和所述待写数据合并,作为新修改数据,将所述缓存中与所述待写数据的地址相交的有效记录设置为无效;
步骤S28:所述java卡虚拟机在最后一条无效记录中分配空间作为所述新修改数据的记录,更新所述缓存中最后一条记录的信息,执行步骤109;
步骤S29:所述java卡虚拟机遍历所述缓存中的状态,查找所述缓存中状态为有效的一条缓存记录作为当前缓存记录;
步骤S30:所述java卡虚拟机获取与所述当前缓存记录对应的目的存储页页号;
步骤S31:所述java卡虚拟机遍历所述缓存区中所有有效记录的目的存储页页号,获取缓存区中所有与所述当前目的存储页页号对应的缓存记录;
步骤S32:所述java卡虚拟机获取所有与所述当前目的存储页页号对应的缓存记录中,所记录的目的存储区中的偏移,根据所述记录的目的存储区中的偏移将所有与当前目的存储页页号对应的缓存记录写入对应的目的存储区中,并将所有与当前目的存储页页号对应的缓存记录中的状态均记为无效状态;
步骤S33:所述java卡虚拟机判断所述缓存区中是否还有状态为有效的缓存记录,如果是,则返回执行步骤S29,否则执行步骤S34;
步骤S34:所述java卡虚拟机向所述缓存区的起始位置分配一条记录,将当前处理的待写数据写入,并在其后创建一条记录,作为最后一条记录,执行步骤109。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310561659.XA CN103793337B (zh) | 2013-11-12 | 2013-11-12 | 一种防掉电的数据保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310561659.XA CN103793337B (zh) | 2013-11-12 | 2013-11-12 | 一种防掉电的数据保护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103793337A CN103793337A (zh) | 2014-05-14 |
CN103793337B true CN103793337B (zh) | 2016-08-24 |
Family
ID=50669034
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310561659.XA Expired - Fee Related CN103793337B (zh) | 2013-11-12 | 2013-11-12 | 一种防掉电的数据保护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103793337B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104536847B (zh) * | 2014-12-18 | 2017-10-31 | 飞天诚信科技股份有限公司 | 一种提高数据写入完整性的方法 |
CN106354669B (zh) * | 2015-07-13 | 2021-03-26 | 国民技术股份有限公司 | 一种具有分级结构的存储器 |
CN107957921B (zh) * | 2017-12-08 | 2022-04-26 | 武汉瑞纳捷半导体有限公司 | 一种均衡磨损的智能卡掉电数据保护方法 |
CN108108271B (zh) * | 2017-12-25 | 2020-11-03 | 飞天诚信科技股份有限公司 | 一种实现事务与掉电保护统一管理的方法及装置 |
WO2022126470A1 (zh) * | 2020-12-17 | 2022-06-23 | 深圳杰睿联科技有限公司 | Flash数据掉电保护方法及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661565A (zh) * | 2009-09-24 | 2010-03-03 | 北京握奇数据系统有限公司 | 具有Mifare仿真功能的智能卡的断电保护方法、装置及系统 |
CN102495754A (zh) * | 2011-10-27 | 2012-06-13 | 飞天诚信科技股份有限公司 | 基于缓存的java卡事务处理方法 |
CN102591748A (zh) * | 2011-12-29 | 2012-07-18 | 记忆科技(深圳)有限公司 | 固态硬盘及其掉电保护方法、系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009048585A (ja) * | 2007-08-23 | 2009-03-05 | Sony Corp | 情報処理装置、および情報処理方法、並びにコンピュータ・プログラム |
-
2013
- 2013-11-12 CN CN201310561659.XA patent/CN103793337B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661565A (zh) * | 2009-09-24 | 2010-03-03 | 北京握奇数据系统有限公司 | 具有Mifare仿真功能的智能卡的断电保护方法、装置及系统 |
CN102495754A (zh) * | 2011-10-27 | 2012-06-13 | 飞天诚信科技股份有限公司 | 基于缓存的java卡事务处理方法 |
CN102591748A (zh) * | 2011-12-29 | 2012-07-18 | 记忆科技(深圳)有限公司 | 固态硬盘及其掉电保护方法、系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103793337A (zh) | 2014-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103793337B (zh) | 一种防掉电的数据保护方法 | |
CN103699341B (zh) | 一种向存储设备中写数据的方法 | |
CN102521145B (zh) | Java卡系统及其空间分配处理方法 | |
CN101650972B (zh) | 智能卡的非易失性存储器数据更新方法 | |
CN104090730B (zh) | 一种对存储设备进行数据读写的方法及装置 | |
CN106484319A (zh) | 用于非易失性存储器的支持无效命令 | |
CN102135942B (zh) | 一种存储设备中实现损耗均衡的方法及存储设备 | |
CN102576333B (zh) | 非易失性存储器中的数据高速缓存 | |
CN101169751B (zh) | 具有闪存设备的系统及其数据恢复方法 | |
CN102508788B (zh) | Ssd及ssd垃圾回收方法和装置 | |
CN106569748A (zh) | Flash文件系统的数据处理方法和装置 | |
CN104268094A (zh) | 一种优化的闪存地址映射方法 | |
CN103150258B (zh) | 一种固态存储系统的写入、读取及垃圾收集方法 | |
CN101241472B (zh) | 映射管理方法及系统 | |
CN100501868C (zh) | 基于NAND Flash存储器文件系统的实现方法 | |
CN101526927B (zh) | Flash文件系统的数据处理方法及数据处理装置 | |
CN106681934A (zh) | 一种固态硬盘垃圾回收的方法、系统和固态硬盘控制器 | |
CN103996412A (zh) | 一种用于智能卡非易失性存储器的掉电保护方法 | |
CN104536847B (zh) | 一种提高数据写入完整性的方法 | |
CN103279366A (zh) | 固态硬盘及掉电后基于固态硬盘快速开机的方法 | |
CN105045850B (zh) | 云存储日志文件系统中垃圾数据回收方法 | |
CN106227680A (zh) | 一种数据处理及防掉电数据保护方法 | |
CN105938447A (zh) | 数据备份装置及方法 | |
CN104317671A (zh) | 一种提升非易失存储使用寿命的掉电数据保存恢复算法 | |
CN106020735A (zh) | 一种数据存储方法及数据存储装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160824 |
|
CF01 | Termination of patent right due to non-payment of annual fee |