具体实施方式
下面结合附图和具体实施例,对本发明一种智能卡及其恢复数据方法的具体实施方式作进一步详细描述。
本发明提供一种智能卡恢复数据方法,用于智能卡异常断电后进行的数据恢复工作,如图2所示,包括:
步骤201,将所述智能卡闪存内备份区中的备份项一次读入到所述备份区外的预设存储空间中,若所述读入到预设存储空间未能完成,则在智能卡重新上电时重新读入直到完成;
步骤202,所述读入到预设存储空间完成后,在所述预设存储空间中对读出的备份项进行有效性验证,根据验证成功后的有效备份项对智能卡进行数据恢复。
现有的智能卡恢复数据方法中,由于对备份项的有效性验证和数据区数据恢复都需要对智能卡原备份区进行读操作,当备份区中存在包含临界值电荷量的bit(断电发生在智能卡操作备份区时会出现的状况)时,就不能够保证对该bit进行多次读操作得到的数据是前后一致的,也就是所述备份区本身就是不可信的,因此利用这种不可信的备份区进行的数据恢复是不能够保证有效性的。
本方法在智能卡对数据区数据进行恢复之前,先将卡内所有备份区的备份项数据读入预设的存储空间,而后利用该存储空间内的备份项进行有效性验证和数据区数据恢复。由于该过程只对智能卡原备份区进行一次读操作,在之后都以该次读出的备份项为基准,因此在多次读取备份项时都能读出一致的数据,并且由于备份项的有效性验证确保了只利用正确的备份数据进行恢复,从而使得即使在智能卡操作备份区时异常断了电,也能保证智能卡所作出的任何数据恢复都是有效的。
智能卡重新上电后,一般首先验证备份区标志位是否有效,在验证备份区标志位有效的情况下,才进一步执行数据恢复工作。这是由于备份区标志位标识了智能卡中的备份区是否可用。事务执行数据区写操作的过程初始,使用备份区成功备份第一个数据,即在备份区中成功写入第一个备份项时,操作系统即把所述备份区的标志位置位(进行了相应的写操作);在事务成功的执行完全部写操作之后,操作系统才把所述备份区的标志位擦除(置为无效)。因此,当确定所述标志位无效时,说明事务还没有开始对数据区进行写操作或者事务已经成功完成全部写操作,这种情况下,不需要对数据区进行数据恢复。
因此,在应用本发明提供的智能卡恢复数据方法进行数据恢复过程之前,需要验证备份区的标志位是否有效,具体的可以按照现有技术中验证备份区标志位有效的方法。
本发明提供一种智能卡恢复数据方法实施例,用于在事务执行过程中断电后重新上电时智能卡所进行的数据恢复,具体流程如下:
步骤c1,智能卡操作系统扫描闪存内备份区的标志位,判断该标志位是否有效,若有效,则执行后续步骤,否则,结束处理。
步骤c2,操作系统在闪存内查找到各备份区,将所有备份区内的备份项全部一次读入预设的存储空间中,若所述读入操作未能完成,则在智能卡再次上电时重新读入直到完成。
为了避免在多次读取备份项时,得到不一致的读取结果,本发明提供的智能卡恢复数据方法对智能卡闪存内所有备份区内的备份项仅执行一次读取,即对读取过一次的备份项不再执行第二次读取,之后任何需要对备份项进行的操作都以所述预设存储空间中的备份项为依据;考虑到若在将备份区中的备份项读入到预设存储空间的过程中出现再次断电,则不能完成将所有备份区的备份项都读入预设存储空间的情况,本发明方法限定在所述读入操作未能完成时,在智能卡再次上电时重新执行该读入操作直到完成。
步骤c3,扫描所述预设的存储空间中存储的各备份区数据,确定每个备份区中有效备份项的个数,并判断各备份区内有效备份项的个数是否相同,若是,则执行步骤c4,否则,执行步骤c6。
步骤c4,判断各备份区内有效备份项的个数是否都为零,若是,则结束处理,否则,执行步骤c5。
步骤c5,利用所述预设的存储空间中任一备份区内的有效备份项对数据区中相应的数据进行恢复。
步骤c6,利用所述预设的存储空间中具有较多有效备份项的备份区恢复数据区中相应的数据。
智能卡在上电初期执行对数据区数据的恢复,而在上电初期,智能卡的内存空间由于还没有被应用程序分配,是可以随意使用的,优选的,在智能卡上电执行数据恢复之前,使用内存作为所述预设的存储空间,将备份区中的备份项全部读入内存中。
智能卡备份区中备份项的顺序与事务执行对数据区相应数据写操作的顺序一致,优选的,在将所有备份区的备份项写入预设存储空间后,按照所述备份区中备份项的顺序,依次对所述预设存储空间中备份区中的备份项进行有效性验证,当确定备份区中某个备份项数据为无效时,即停止对该备份区中的其余备份项进行验证,并使用所述无效备份项之前的所有有效备份项个数作为该备份区的有效备份项个数。
事务开始执行对数据区的写操作之后,所述备份区的双备份机制使得智能卡中的两个备份区交替被使用。正常情况下,操作系统将组织的新备份项与其中一个备份区中存储的旧备份项一起,存入另一备份区中,这样两个备份区中记录的有效备份项个数应相差一个,则利用具有较多有效备份项的备份区中的备份项数据,将能够恢复更多的数据区数据,并且所述恢复是有效的。
如果在上述写备份区的过程中出现异常断电,就可能会出现两个备份区具有相同的有效备份项个数,这时两个备份区具有的有效备份项个数相同且不为零,利用任一备份区内的有效备份项对数据区中相应的数据进行恢复都是有效的。
智能卡在作数据恢复之前,由于不知道断电的具体时间点以及断电所影响到的具体数据,因此所述智能卡恢复数据方法应保证不论断电出现在事务执行写操作的任意时间点,利用该方法所作的数据恢复都是正确有效的。
假设某一事务需要完成对数据区两个地址addr1和addr2的写操作,写入的长度分别是len1和len2,该事务需要将原来的数据内容data1old和data2old分别写为data1new和data2new。
假设智能卡中包含备份区A和备份区B,并且上电初始使用内存作为预设存储空间,以下说明不论在该事务执行过程的任一时间点出现了断电情况,使用本发明提供的智能卡恢复数据方法都能保证所作出的数据恢复都是有效的,具体过程如下:
1、如图3所示,事务执行写操作之初,在对addr1地址进行写操作之前,先将该地址上的旧数据data1old备份到备份区A中。
若在此过程中出现了异常断电,事务还没有开始对数据区进行任何写操作,则依据所述智能卡恢复数据方法,智能卡上电后,首先扫描闪存内备份区的标志位,由于该标志目前未置位,被判断为无效,所以不需要进行任何数据的恢复。事实上,在该断电的时刻事务还没有开始对数据区进行写操作,因此不需要进行数据恢复工作。
2、如图4所示,备份区中已经成功完成对数据data1old的备份,操作系统将备份区的标志位置位(进行了相应的写操作)。
若在此过程中出现了异常断电,则备份区的标志位可能处于不稳定的状态,依据所述智能卡恢复数据方法,智能卡上电后,首先扫描闪存内备份区的标志位,会有以下两种情况:
1)若通过判断确定该标志位为无效,则不需要进行任何数据的恢复。事实上,这说明断电发生在对该标志位进行置位的过程中,并且事务还没有开始对数据区进行任何写操作,因此不需要数据恢复工作。
2)若通过判断确定该标志为有效(说明断电发生时该备份区的标志位已经成功置位),操作系统随即在闪存内查找到各备份区,将所有备份区中的备份项(此时只有备份区A内的首个备份项)读入内存中,并在内存中判断该备份项的有效性,事实上由于断电前已经成功完成对数据data1old的备份,则该备份项处于稳定状态,读入到内存中的数据与备份区中存储的数据是一致的,所以被判断为有效。随后操作系统利用该备份项对addr1地址的数据进行恢复(虽然此刻事务还没有开始对数据区进行任何写操作,理论上不需要做任何数据恢复,但由于操作系统不知道具体的断电位置,因此按照所述闪存数据恢复的方法,在判断具有有效备份项时,依然进行数据恢复),该恢复是有效的。
3、如图5所示,操作系统成功完成对数据data1old的备份,并且成功完成对所述标志位的置位,开始执行事务对addr1地址的写操作。
若在此过程中出现了异常断电,则数据区addr1地址中的数据可能处于不稳定的状态,按照所述智能卡恢复数据方法,智能卡上电后,首先扫描备份区的标志位,并对其进行判断后确定所述标志位为有效。
操作系统随即在闪存内查找到各备份区,将备份区A内的首个备份项读入内存中,并在内存中判断该备份项的有效性,事实上由于断电前已经成功完成对数据data1old的备份,则该备份项处于稳定状态,读入到内存中的数据与备份区中存储的数据是一致的,所以被判断为有效。随后操作系统利用该备份项对addr1地址的数据进行恢复,该恢复是有效的。
4、如图6所示,操作系统已经成功完成对addr1地址的写操作(此时,addr1地址上的数据已为data1new),开始在内存中将下一步要修改的addr2地址上的旧数据data2old组织成新的备份项,并将其与当前备份区A中的旧备份项(对应data1old)一起备份到备份区B中。
若在此过程中出现了异常断电,则备份区B中的备份项可能处于不稳定的状态,依据所述智能卡恢复数据方法,智能卡上电后,首先扫描备份区的标志位,并对其进行判断后确定所述标志位为有效。
操作系统随即在闪存内查找到各备份区,将备份区A和备份区B中所有的备份项都读入内存中。
操作系统在内存中扫描各备份区,并确定各备份区内的有效备份项个数。事实上由于备份区A中的备份项是成功完成的,可确定其有效备份项个数为1,而备份区B中就可能会出现以下3种情况:
1)备份区B中的第一备份项(对应data1old)为有效,而第二备份项(对应data2old)为不有效,此时统计备份区B的有效备份项个数为1,与备份区A的情况一致,则操作系统利用内存中任一备份区内的有效备份项(对应data1old)对数据区中addr1地址上的数据进行恢复,该恢复一定是有效的。
2)备份区B中的第一备份项为无效,则无论第二备份项是否有效,确定该备份区的有效备份项个数为0,则操作系统利用内存中备份区A内的有效备份项对数据区中addr1地址上的数据进行恢复,该恢复一定是有效的。
3)备份区B中的两个备份项都为有效,则备份区B的有效备份项个数为2,比备份区A具有的有效备份项个数多,则操作系统将备份区B设置为有效备份区,并利用该有效备份区中的两个备份项分别对addr1地址和addr2地址上的数据进行恢复,该恢复一定是有效的。
5、如图7所示,操作系统已成功完成对数据data2old的备份,开始执行事务对addr2地址的写操作。
若在此过程中出现了异常断电,则数据区addr2地址中的数据可能处于不稳定的状态,依据所述智能卡恢复数据方法,智能卡上电后,首先扫描备份区的标志位,并对其进行判断后确定所述标志位为有效。
操作系统随即在闪存内查找到各备份区,将备份区A和备份区B中所有的备份项都读入内存中。
操作系统在内存中扫描各备份区,并确定各备份区内的有效备份项个数。事实上由于备份区A和备份区B中的所有备份项都是成功完成的,因此操作系统最终能够确定备份区A的有效备份项个数为1,备份区B的有效备份项个数为2,并确定将备份区B设置为有效备份区,随后利用该有效备份区中的两个有效备份项分别对addr1地址和addr2地址上的数据进行恢复,该恢复一定是有效的。
6、如图8所示,事务已经成功完成所有的写操作,操作系统开始执行对具有较少备份项备份区(备份区A)的擦除工作。
若在此过程中出现了异常断电,则备份区A中的备份项可能出于不稳定的状态,按照所述智能卡恢复数据方法,智能卡上电后,首先扫描备份区的标志位,并对其进行判断后确定所述标志位为有效。
操作系统随即在闪存内查找到各备份区,将备份区A和备份区B中所有的备份项都读入内存中。
操作系统在内存中扫描各备份区,并确定各备份区内的有效备份项个数。事实上由于备份区B中的备份项是成功完成的,而备份区A中的备份项由于已经被擦除或者没有被完全擦除而处于不稳定的状态,所以操作系统最终能够确定备份区B的有效备份项个数较多,并确定将备份区B设置为有效备份区,随后利用该有效备份区中的两个有效备份项分别对addr1地址和addr2地址上的数据进行恢复,该恢复一定是有效的。
7、如图9所示,操作系统已经成功完成了对具有较少备份项的备份区A的擦除工作,开始执行擦除备份区的标志位。
若在此过程中出现了异常断电,则所述标志位可能处于不稳定的状态,依据所述智能卡恢复数据方法,智能卡上电后,首先扫描所述标志位,会有以下两种情况:
1)若通过判断确定该标志位为无效,则不需要进行任何数据的恢复。事实上,这说明断电发生时已经完成对所述标志位的擦除工作或正处于擦除标志位的过程中,并且事务已经成功完成全部写操作,所以不需要数据恢复工作。
2)若通过判断确定该标志为有效(事实上说明断电发生时还没有开始擦除该标志位),操作系统随即在闪存内查找到各备份区,将备份区A和备份区B内的所有备份项读入内存中。
操作系统在内存中扫描各备份区,并确定各备份区内的有效备份项个数。事实上由于备份区A已经被擦除,而备份区B中的备份项是成功完成的,因此操作系统最终能够确定备份区B的有效备份项个数较多,并确定将备份区B设置为有效备份区,随后利用该有效备份区中的两个有效备份项分别对addr1地址和addr2地址上的数据进行恢复(虽然此时事务已经成功完成了所有写操作,理论上不需要做任何数据恢复,但由于操作系统不知道具体的断电位置,因此按照所述闪存数据恢复的方法,在判断具有有效备份项时,依然进行数据恢复),该恢复是有效的。
8、如图10所示,操作系统已经成功完成了对所述标志位的擦除工作,开始执行对具有较多备份项备份区(备份区B)的擦除工作。
若在此过程中出现了异常断电,则备份区B中的备份项有可能处于不稳定的状态,但是按照所述智能卡恢复数据方法,智能卡上电后,首先扫描备份区的标志位,由于该标志目前已被擦除,被判断为无效,所以不需要进行任何数据的恢复。事实上,在该断电的时刻事务已经成功完成全部写操作,不需要作任何数据恢复。
上述过程中,若在将智能卡闪存内各备份区的备份项读入到内存的过程中出现异常断电,所述读入操作未能完成,则在智能卡再次上电时,重新执行将智能卡闪存内各备份区的备份项读入到内存的操作,直到该读入操作成功完成。
上述过程中,若断电出现在事务对数据区进行写操作的过程中,则由于备份区中已经成功备份了数据区相应的原始数据,所有的备份项都处于稳定的状态,因此将备份区中的备份项读入到内存的过程中所有备份项数据都不会改变,按照所述智能卡恢复数据方法对数据区数据进行的恢复一定是有效的。
若断电出现在操作系统写备份的过程中,则智能卡备份区中的备份项就可能会处于不稳定的状态,如果按照现有的智能卡恢复数据方法,由于对备份项进行有效性验证以及利用备份项进行数据恢复都需要对智能卡备份区进行读操作,这样两次读取的备份项数据就可能是不一样的,例如对备份项进行有效性验证时,某一bit位读出的值为0,而利用该备份项进行数据恢复时,该bit位读出的值又变成了1,这样进行数据恢复就很有可能会出现数据跳变的情况,即对数据区进行数据恢复后的数据与原始数据是完全不一样的。
而按照本发明提供的智能卡恢复数据方法,即使备份区中存储的备份项处于不稳定的状态,在将备份项读入内存时备份项数据可能会出现改变的情况,但是由于读入内存后的备份项数据一定是稳定的,以内存中的备份项为基准进行的备份项有效性验证及数据恢复时,两次读取的备份项数据就一定是相同的,例如对备份项中的某一bit不论读取多少次,所读出的值都是一致的,这样进行数据恢复时就不会出现数据跳变的情况,同时由于备份项有效性验证保证了进行数据恢复时只利用有效的备份项,在判断所有备份项都为无效时不进行数据恢复,因此按照本方法进行的任何数据恢复都是有效的。
事务成功完成所有的写操作之后,智能卡擦除具有较少备份项的备份区和具有较多备份项的备份区的步骤是依次进行的,以保证即使在擦除备份区的过程中出现了断电,也总能有尽可能多的备份项还没有被擦除,以用于对数据区尽可能多的数据进行恢复。但是需要指出的是,智能卡操作系统可以选择先擦除具有较少备份项的备份区,然后再擦除备份区的标志位(正如上述过程中的描述),也可以选择先擦除备份区的标志位,再擦除具有较少备份项的备份区。所述先后顺序随智能卡的具体应用场景有变化,但是不论哪一种先后顺序,按照本发明的智能卡恢复数据方法,都能够达到对数据恢复的有效性。例如在事务成功完成所有的写操作之后,智能卡选择先擦除备份区的标志位,再擦除具有较少备份项的备份区,按照本发明的智能卡恢复数据方法执行数据恢复的过程如下:
如果擦除备份区的标志位的过程中发生了断电,则按照所述智能卡恢复数据方法,智能卡上电后,首先扫描备份区的标志位,会有以下两种情况:
1)若通过判断确定该标志为无效,则不需要进行任何数据的恢复。事实上,在该断电时刻事务已经成功完成全部写操作,所以不需要数据恢复工作。
2)若通过判断确定该标志为有效(说明断电发生时该备份区的标志位还没有开始擦除),操作系统随即在闪存内查找到各备份区,将备份区A和备份区B内的所有备份项读入内存中。操作系统在内存中扫描各备份区,并确定各备份区内的有效备份项个数。事实上由于备份区A和备份区B中的备份项都是成功完成的,因此操作系统最终能够确定备份区B的有效备份项个数较多,并利用该有效备份区中的备份项进行相应数据的恢复。
如果断电不是发生在上述擦除备份区的标志位的过程中,而是发生在后面对具有较少备份项的备份区擦除的过程中,则按照所述智能卡恢复数据方法,智能卡上电后,首先扫描备份区的标志位,由于该标志目前已被擦除,被判断为无效,所以不需要进行任何数据的恢复。事实上,在该断电的时刻事务已经成功完成全部写操作,不需要作任何数据恢复。
综上,不论智能卡删除备份区的标志位和删除具有较少备份项备份区的先后顺序如何,按照本发明的智能卡恢复数据方法,都能够达到对数据恢复的有效性。
本发明还提供一种智能卡实施例,如图11所示,包括:
读入模块111,用于将所述智能卡闪存内备份区中的备份项一次读入到所述备份区外的预设存储空间中,若所述读入到预设存储空间未能完成,则在智能卡再次上电时重新读入直到完成;
恢复模块112,用于所述读入到预设存储空间完成后,在所述预设存储空间中对读出的备份项进行有效性验证,根据验证成功后的有效备份项对智能卡进行数据恢复。
优选的,智能卡闪存内有两个备份区,则所述恢复模块112在所述预设存储空间中对读出的备份项进行有效性验证,根据验证成功后的有效备份项对智能卡进行数据恢复,具体包括:对读入到所述预设存储空间的各备份区中的备份项进行有效性验证,确定所述各备份区中验证成功的有效备份项个数;根据所述预设存储空间中,有效备份项个数最多且不为零的备份区中的有效备份项进行数据恢复。
优选的,所述恢复模块112还用于在所述预设存储空间中各备份区中的有效备份项个数相同且不为零时,利用所述预设存储空间中任一备份区内的有效备份项进行数据恢复。
优选的,所述恢复模块112对读入到所述预设存储空间的各备份区中的备份项进行有效性验证,确定所述各备份区中验证成功的有效备份项个数,具体包括:按照所述各备份区中备份项的顺序,对所述预设存储空间中各备份区的备份项依次进行有效性验证;所述备份项的顺序与所述智能卡对数据区中相应数据进行写操作的顺序一致;当确定所述各备份区中出现无效备份项时,停止对该备份区的其余备份项进行有效性验证,并确定该备份区中有效备份项的个数为所述无效备份项之前的所有有效备份项个数。
优选的,智能卡闪存内备份区中的备份项包含存储校验值的校验值字段,则所述恢复模块112采用如下方式在所述预设存储空间中对读出的备份项进行有效性验证:从所述读入到预设存储空间中的备份项的校验值字段获取校验值,并对该备份项中除校验值字段外的字段进行预定运算,得到期望值;确定所述获取的校验值与所述期望值一致时,确定验证成功,否则验证不成功。
优选的,所述预设存储空间为智能卡内存。
所述智能卡中各模块的具体实现功能参见上述智能卡恢复数据方法的具体实现过程,在此不再赘述。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。