基于缓存的java卡事务处理方法

文档序号:6436655阅读:208来源:国知局
专利名称:基于缓存的java卡事务处理方法
技术领域
本发明涉及信息安全领域,特别涉及一种基于缓存的java卡事务处理方法。
背景技术
智能卡内部的集成电路包括中央处理器CPU、可编程只读存储器 EEPROM(ElectricalIy Erasable Programmable Read-Only Memory)> 随机存储器 RAM (Random Access Memory)和固化在只读存储器 R0M(Read_0nly Memory)中的片内操作系统COS (Chip Operating System)。目前智能卡的性能比较低,其中影响最大的是对 EEPROM的写操作过多,然而,事务处理相关部分对EEPROM的写操作占EEPROM写操作总数的 75%左右,所以,要提高智能卡的性能,事务处理机制的优化是急需解决的任务。

发明内容
鉴于现有技术的不足,为了提高智能卡的性能,本发明提出了一种基于缓存的 java卡事务处理方法。本发明采用的技术方案如下包括Sl java卡虚拟机上电,判断是否启动掉电保护,是则执行掉电保护,然后执行 S3,否则执行S2 ;S2 java卡虚拟机进行事务处理初始化,执行S3 ;S3 java卡虚拟机获取applet字节码;S4 所述java卡虚拟机解析所述applet字节码;当解析得到的是第一应用程序接口对应的字节码时,调用第一应用程序接口开始事务,返回S3 ;当解析得到的是第一函数对应的字节码时,调用第一函数写数据,返回S3,包括步骤A 当事务处理标志位有效且包含有当前原数据的第一数据结构的长度小于或等于所述第二存储器的备份缓存区的剩余存储空间时,所述java卡虚拟机判断所述第二存储器的备份缓冲区中是否存在包含有所述当前原数据的第一数据结构体;如存在则所述java卡虚拟机用当前新值替换所述第一数据结构体中的当前原数据;如不存在则所述java卡虚拟机将所述当前原数据按照第一预设数据结构格式备份到所述第二存储器的备份缓冲区中,并将所述当前新值按照第二预设数据结构格式写入到所述第二存储器的新值缓冲区中;所述第二存储器的备份缓存区中存储的第一数据结构、新值缓存区中存储的是第二数据结构,所述第一存储器的备份缓存区中存储的是第三数据结构、原数据存储区存储的是原数据和/或新值;当解析得到的是第二函数对应的字节码时,调用第二函数读数据,返回S3,包括当事务处理标志有效时,所述java卡虚拟机从包含有全部读取地址的所述第二数据结构中读取新值;或所述java卡虚拟机从第二数据结构中根据所述读取地址读取对应的新值,根据所述读取地址从所述第一存储器的原数据缓存区中读取原数据,并用所述读取的新值替换所述读取的原数据中的与所述新值的写入地址相同的对应部分;当解析得到的是第二应用程序接口对应的字节码时,调用第二应用程序接口提交事务,返回S3,包括当事务处理标志有效且所述第二存储器的备份缓冲区的整体标志位有效时,所述 java卡虚拟机将所述第一数据结构中的原数据按照第三预设数据结构格式备份到所述第一存储器的备份缓冲区中,将所述第二存储器的新值缓冲区中第二数据结构中的新值写入到所述第一存储器的原数据存储区中相应的写入地址中,清除第一数据结构和第二数据结构,并将事务处理标志位的值置为无效;当解析得到的是第三应用程序接口对应的字节码时,调用第三应用程序接口终止事务,返回S3,包括当事务处理标志有效时,所述java卡虚拟机还原所述第一存储器的备份缓冲区中标志位为有效的第三数据结构中的原数据;清除第一数据结构和第二数据结构;当解析得到的是其他字节码时,根据所述字节码执行相应操作,返回S3。所述java卡虚拟机解析所述applet字节码包括步骤a 所述java卡虚拟机判断所述applet字节码中的首字节是否为预先约定的第一字节,是则执行步骤b,否则返回S3 ;步骤b 所述java卡虚拟机根据所述applet字节码中除首字节以外的字节检索索引表,并判断所述applet字节码中除首字节以外的字节是否为预先约定的字节;如所述applet字节码中除首字节以外的字节为预先约定的第二字节,则所述 applet字节码为所述第一应用程序接口对应的字节码,所述java卡虚拟机调用第一应用程序接口开始事务,返回S3;如所述applet字节码中除首字节以外的字节为预先约定的第三字节,则所述 applet字节码为所述第一函数对应的字节码,所述java卡虚拟机调用第一函数写数据,返回S3 ;如所述applet字节码中除首字节以外的字节为预先约定的第四字节,则所述 applet字节码为所述第二函数对应的字节码,所述java卡虚拟机调用第二函数读数据,返回S3 ;如所述applet字节码中除首字节以外的字节为预先约定的第五字节,则所述 applet字节码为所述第二应用程序接口对应的字节码,所述java卡虚拟机调用第二应用程序接口提交事务,返回S3;如所述applet字节码中除首字节以外的字节为预先约定的第六字节,则所述 applet字节码为所述第三应用程序接口对应的字节码,所述java卡虚拟机调用第三应用程序接口终止事务,返回S3;如所述applet字节码中除首字节以外的字节为其他字节则调用对应接口进行相应操作,返回S3。所述java卡虚拟机调用第一应用程序接口开始事物包括
当java卡的第一应用程序接口被调用时,所述java卡虚拟机判断事务处理标志位的值是否为true,是则报错,否则将事务处理标志位的值置为true。所述步骤A具体为步骤Al 当java卡的所述第一函数被调用时,所述java卡虚拟机判断所述事务处理标志位的值是否为true,是则执行步骤A3,否则执行步骤A2 ;步骤A2 所述java卡虚拟机用接收到当前新值替换所述第一存储器的原数据存储区中的当前原数据;步骤A3 所述java卡虚拟机判断包含有所述当前新值的第二数据结构的长度是否大于所述第二存储区的备份缓存区的存储空间,是则执行步骤A4,否则执行步骤A6 ;步骤A4 所述java卡虚拟机从所述第一存储器的原数据存储区中读取所述当前原数据,并将所述当前原数据按照第三预设数据结构格式备份到所述第一存储器的备份缓冲区中;步骤A5 所述java卡虚拟机用接收到的当前新值替换所述第一存储器的原数据存储区中的当前原数据;步骤A6 所述java卡虚拟机判断所述第二存储器的备份缓存区中的剩余存储空间是否大于所述包含有所述当前新值的第二数据结构的长度,是则执行步骤A7,否则执行步骤A8 ;步骤A7 所述java卡虚拟机判断在所述第二存储器的备份缓冲区中是否存在包含有所述第一存储器的原数据存储区中当前新值写入地址中的原数据的第一数据结构,如存在则执行步骤A12,如不存在则执行步骤AlO ;步骤A8 所述java卡虚拟机从所述第一存储器的原数据存储区中读取所述当前原数据,并将所述当前原数据按所述第三预设数据结构格式备份到所述第一存储器的备份缓冲区中;步骤A9 所述java卡虚拟机读取所述第二数据结构中的数据,并用所述读取到的数据替换所述第一存储器的原数据存储区中的当前原数据,清除所述第二数据结构和第一数据结构,顺序执行步骤A10;步骤AlO 所述java卡虚拟机从所述第一存储器的原数据存储区中读取所述当前原数据,并将所述读取到的当前原数据按照所述第一预设数据结构格式备份到所述第二存储器的备份缓冲区中;步骤All 所述java卡虚拟机将所述当前新值按照所述第二预设数据结构格式写入到第二存储器的新值缓冲区中;步骤A12 所述java卡虚拟机用所述当前新值替换所述第二数据结构中的相应数据。所述java卡虚拟机调用第二函数读数据包括步骤B 当事务处理标志位的值为true时,所述java卡虚拟机判断在所述第二数据结构中的新值写入地址是否包含读取地址;如包含全部读取地址,则所述java卡虚拟机从所述第二数据结构体中根据所述读取地址读取对应的新值;如包含读取地址,则所述java卡虚拟机根据所述读取地址从所述第一存储器的原数据存储区中读取对应的原数据,从所述第二数据结构体中根据所述读取地址读取对应的新值,并用所述新值替换所述原数据中的与所述新值的写入地址相同的对应部分;如不包含读取地址,则所述java卡虚拟机根据所述读取地址从所述第一存储器的原数据存储区中读取对应的原数据。所述步骤B具体为步骤Bl 当java卡的所述第二函数被调用时,所述java卡虚拟机判断事务处理标志的值是否为true,是则执行步骤B3,否则执行步骤B2 ;步骤B2 所述java卡虚拟机根据所述读取地址从所述第一存储器的原数据存储区中读取对应的原数据;步骤B3 所述java卡虚拟机将第一个第一数据结构作为当前数据结构,判断所述当前数据结构的标志位是否为有效,是则执行步骤B4,否则执行步骤B14 ;步骤B4 所述java卡虚拟机判断所述当前数据结构中是否包含读取地址,若包含全部的所述读取地址则执行步骤B5,若包含部分的所述读取地址则执行步骤B6,若不包含所述读取地址则执行步骤B14 ;步骤B5 所述java卡虚拟机从所述第二数据结构根据所述读取地址读取对应的新值;步骤B6 所述java卡虚拟机根据所述读取地址从第一存储器的原数据存储区中读取对应的原数据;步骤B7 所述java卡虚拟机从所述第二数据结构中根据所述读取地址读取对应的新值,并用所述新值替换所述步骤B6中读取到的原数据中与所述新值的写入地址相同的对应部分;步骤B8 所述java卡虚拟机判断所述当前数据结构是否为最后一个,是则返回 S3,否则执行步骤B9 ;步骤B9 所述java卡虚拟机将所述第二存储器的备份缓冲区中的下一个第一数据结构作为当前数据结构;步骤BlO 所述java卡虚拟机判断所述当前数据结构的标志位是否为有效,是则执行步骤B11,否则返回执行步骤B8 ;步骤Bll 所述java卡虚拟机判断所述当前数据结构是否包含所述读取地址的剩余部分,若包含全部的所述读取地址的剩余部分则执行步骤B13,若包含部分所述读取地址的剩余部分则执行步骤B12,若不包含所述读取地址的剩余部分,则返回执行步骤B8 ;步骤B12 所述java卡虚拟机从所述第二数据结构中根据所述读取地址的剩余部分读取对应的新值,并用所述读取到的新值替换所述步骤B6中读取到的原数据中与所述新值的写入地址相同的对应部分,返回执行步骤B8 ;步骤B13 所述java卡虚拟机从所述第二数据结构中根据所述读取地址的剩余部分读取对应的新值,并用所述读取到的新值替换所述步骤B6中读取到的原数据中与所述新值的写入地址相同的对应部分;步骤B14 所述java卡虚拟机判断所述当前数据结构是否是最后一个,是则执行步骤B15,否则执行步骤B16 ;步骤B15 所述java卡虚拟机根据所述读取地址从所述第一存储器的原数据存储区中读取对应的原数据;步骤B16 所述java卡虚拟机将所述第二存储器的备份缓冲区中的下一个数据结构作为当前数据结构;步骤B17 所述java卡虚拟机判断所述当前数据结构的标志位是否为有效,是则执行步骤B18,否则返回执行步骤B14 ;步骤B18 所述java卡虚拟机判断所述当前数据结构是否包所述含读取地址,若包含全部所述读取地址则执行步骤B19,若包含部分所述读取地址则返回执行步骤B6,若不包含所述读取地址则返回执行步骤B14 ;步骤B19 所述java卡虚拟机从所述第二数据结构中根据所述读取地址读取对应的新值。所述java卡虚拟机调用第二应用程序接口提交事务包括步骤C 当事务处理标志位的值为true时,所述java卡虚拟机判断第二存储器的备份缓冲区的整体标志位是否有效;是则将所述第二存储器的备份缓冲区中的原数据按照第三预设数据结构格式备份到第一存储器的备份缓冲区的中,将所述第二存储器的新值缓冲区中的新值写入到所述第一存储器的原数据存储区的相应地址中,将事务处理标志位的值置为false,并清除所述第一数据结构和第二数据结构;否则将事务处理标志位的值置为false,并清除所述第一数据结构和第二数据结构。所述步骤C具体为步骤Cl 当java卡的第二应用程序接口被调用时,所述java卡虚拟机判断事务处理标志的值是否为true,是则执行步骤C2,否则返回S3 ;步骤C2 所述java卡虚拟机判断第一个第一数据结构的标志位是否有效,是则执行步骤C3,否则执行步骤C8;步骤C3 所述java卡虚拟机将第一个第一数据结构的整体标志位置为无效;步骤C4 所述java卡虚拟机从所述第一数据结构中读取原数据,并将所述原数据按照第三预设数据结构格式备份到所述第一存储器的备份缓冲区中;步骤C5 所述java卡虚拟机将包含有所述原数据的第三数据结构的标志位置为有效;步骤C6 所述java卡虚拟机从所述第二数据结构中读取新值,并根据所述第二数据结构中的写入地址将所述新值写入到所述第一存储器的原数据存储区的相应地址中;步骤C7 所述java卡虚拟机将所述第一存储器的备份缓冲区的整体标志位置为无效,顺序执行步骤C8;步骤C8 所述java卡虚拟机将事务处理标志位的值置为false,并清除所述第一数据结构和第二数据结构。所述java卡虚拟机调用第三应用程序接口终止事务,具体包括步骤Dl 当java卡的第三应用程序接口被调用时,所述java卡虚拟机判断所述事务处理标志位的值是否为true,是则执行步骤D2,否则返回S3 ;步骤D2 所述java卡虚拟机将第一个第三数据结构作为当前数据结构;
步骤D3 所述java卡虚拟机判断所述当前数据结构的标志位是否有效,是则执行步骤D5,否则执行步骤D4;步骤D4 所述java卡虚拟机清除所述第一数据结构和第二数据结构;步骤D5 所述java卡虚拟机判断所述当前数据结构是否为最后一个,是则执行步骤D6,否则执行步骤D8;步骤D6 所述java卡虚拟机还原所述当前数据结构中的原数据;步骤D7 所述java卡虚拟机将所述当前数据结构的标志位置为无效,返回执行步骤D2 ;步骤D8 所述java卡虚拟机将下一个第三数据结构为作为当前数据结构;步骤D9 所述java卡虚拟机判断所述当前数据结构的标志位是否为有效,是则执行步骤D5,否则执行步骤D10;步骤DlO 所述java卡虚拟机还原所述当前数据结构的上一个数据结构中的原数据;步骤Dll 所述java卡虚拟机将所述上一个数据结构的标志位置为无效,返回执行步骤D2。所述掉电保护包括当事务处理标志有效时,所述java卡虚拟机还原标志位为有效的第三数据结构中的数据,清除第一数据结构和第二数据结构,将事务处理标志置为无效;当事务处理标志无效时,所述java卡虚拟机清除第一数据结构和第二数据结构。所述掉电保护具体包括步骤El 所述java卡虚拟机判断事务标志位的值是否为true,是则执行步骤E3, 否则执行步骤E2;步骤E2 所述java卡虚拟机清除所述第一数据结构和第二数据结构;步骤E3 所述java卡虚拟机将第一个第三数据结构作为当前数据结构;步骤E4 所述java卡虚拟机判断所述当前数据结构的标志位是否为有效,是则执行步骤E6,否则执行步骤E5;步骤E5 所述java卡虚拟机清除所述第一数据结构和第二数据结构,将所述事务标志位置位的值置为false ;步骤E6 所述java卡虚拟机判断所述当前数据结构是否为最后一个,是则执行步骤E7,否则执行步骤E9;步骤E7 所述java卡虚拟机还原所述当前数据结构中的原数据;步骤E8 所述java卡虚拟机将所述当前数据结构的标志位置为无效,返回执行步骤E 3 ;步骤E9 所述java卡虚拟机将下一个第三数据结构作为当前数据结构;步骤ElO 所述java卡虚拟机判断所述当前数据结构的标志位是否为有效,是则返回执行步骤E6,否则执行步骤Ell ;步骤Ell 所述java卡虚拟机还原所述当前数据结构的上一个数据结构中的原数据;步骤E12 所述java卡虚拟机将所述上一个数据结构的标志位置为无效,返回执行步骤E3。所述java卡虚拟机进行事务处理初始化包括java卡虚拟机清除第一数据结构和第二数据结构,将所述事务处理标志位置为无效,将所述第一存储器备份缓冲区中第一个第三数据结构的标志位置为无效。所述还原具体为所述java卡虚拟机所述第一数据结构中的原数据,并根据所述第一数据结构体中的写入地址将所述读取到的原数据写入到对应的地址中。本发明的有益效果在于将事务处理机制中多次备份EEPROM改为在提交事务时一次性备份,并减少了在终止事务时写EEPROM的操作,同时还保持了掉电保护功能。


图1为发明实施例一中提供的一种基于缓存的java卡事务处理方法的流程图;图2为发明实施例二中提供的一种基于缓存的java卡事务处理方法中第一应用程序接口被调用后的操作流程图;图3为发明实施例二中提供的一种基于缓存的java卡事务处理方法中第一函数被调用后的操作流程图;图4为发明实施例二中提供的一种基于缓存的java卡事务处理方法中第二函数被调用后的操作流程图;图5为发明实施例二中提供的一种基于缓存的java卡事务处理方法中第二应用程序接口被调用后的操作流程图;图6为发明实施例二中提供的一种基于缓存的java卡事务处理方法中第三应用程序接口被调用后的操作流程图;图7为发明实施例二中提供的一种基于缓存的java卡事务处理方法中java卡掉电后重新上电的操作流程图;图8为发明实施例三中提供的一种基于缓存的java卡事务处理方法中事务处理实例的方法流程图;图9为发明实施例三中执行完第一部分向EEPROM中0x4000为起始的地址中写入
第一新值的结果示意图;图10为发明实施例三中执行完第二部分向EEPROM中0x4050为起始的地址中写
入第二新值的结果示意图;图11为发明实施例三中执行完第三部分向EEPROM中0x4200为起始的地址中写入第三新值的结果示意图;图12为发明实施例三中执行完第四部分提交事务后的结果示意图。
具体实施例方式在许多大型、关键的应用程序中,计算机每秒钟都在执行大量的任务,将这些任务结合在一起完成一个业务要求,称为事务。事务不论成功与否都作为一个整体进行工作,当事务失败时,系统返回到事务开始前的状态,这个取消所有变化的过程称为回滚。事务处理机制的任务就是要保证整个事务或者完全成功,或者什么都不做,如果操作中的某一部分不能成功的完成则回滚系统的变化。在以下实施例中,Java卡包括java卡虚拟机、第一存储器和第二存储器,Java卡的第一存储器中包含备份缓冲区,java卡的第二存储器中设置有备份缓冲区和新值缓冲区,其中,第一存储器为非易失性存储器,如EEPR0M,第二存储器为易失性存储器,如RAM, 第一存储器中存储的数据称为原数据,将要写入第一存储器中的数据称为新值。为使本发明的目的、技术方案和优点更加清楚,下面将结合附图和具体实施例对本发明做进一步地详细说明。实施例一本发明实施例提供了一种基于缓存的java卡事务处理方法,包括开始事务、执行事务、提交事务、终止事务和掉电保护过程,其中执行事务包括读数据的操作和写数据的操作。参见图1,基于缓存的java卡事务处理方法的具体表述如下步骤Sl java卡虚拟机上电,判断是否要启动掉电保护,是则启动掉电保护,执行完掉电保护后执行步骤S3,否则执行步骤S2 ;步骤S2 java卡虚拟机进行事务处理初始化;具体的,在本实施例中,步骤S2具体为清除第二存储器备份缓冲区和新值缓冲区中的数据,将事务处理标志位置为无效,将第一存储器备份缓冲区中第一个数据结构的标志位置为无效;步骤S3 java卡虚拟机接收applet字节码;步骤S4 java卡虚拟机解析所述字节码;当解析得到第一应用程序接口对应的字节码时执行步骤S5,当解析得到第一函数对应的字节码时执行步骤S6,当解析得到第二函数对应的字节码时执行步骤S7,当解析得到第二应用程序接口对应的字节码时执行步骤S8,当解析得到第三应用程序接口对应的字节码时执行步骤S9,当解析得到上述字节码之外的其它字节码时,根据所述其它字节码执行相应操作,返回执行步骤S3 ;具体地,所述java卡虚拟机解析字节码包括步骤a 判断所述字节码的首字节是否为预先约定的第一字节,是则执行步骤b, 否则根据所述字节码执行相应操作;具体地,在本实施例中所述预先约定的第一字节为8d ;步骤b 根据所述字节码首字节以外的字节检索索引表,判断所述字节码首字节以外的字节是否为预先约定的字节;若为预先约定的第二字节则所述字节码为第一应用程序接口对应的字节码,例如,所述预先约定的第二字节为0001 ;若为预先约定的第三字节则所述字节码为第一函数对应的字节码,例如,所述预先约定的第三字节为0002 ;若为预先约定的第四字节则所述字节码为第二函数对应的字节码,例如,所述预先约定的第四字节为0003;若为预先约定的第五字节则所述字节码为第二应用程序接口对应的字节码,例如,所述预先约定的第五字节为0004 ;
若为预先约定的第六字节则所述字节码为第三应用程序接口对应的字节码,例如,所述预先约定的第六字节为0005 ;否则根据所述字节码执行相应操作,返回步骤S3 ;步骤S5 调用第一应用程序接口开始事务,返回执行步骤S3 ;所述开始事务具体包括检查事务处理标志位a,当a有效时报错,当a无效时将a置为有效;步骤S6 调用第一函数写数据,返回执行步骤S3 ;所述写数据具体包括当事务处理标志位a有效且当前新值的长度不大于第二存储器中剩余字节长度时,判断第二存储器备份缓冲区中是否已经备份有所述当前新值写入地址中的原数据;是则用所述当前新值替换第二存储器新值缓冲区中相应的新值;否则向第二存储器备份缓冲区中备份所述当前新值写入地址中的原数据,并将所述当前新值添加到第二存储器的新值缓冲区中;步骤S7 调用第二函数读数据,返回执行步骤S3 ;所述读数据具体包括当事务处理标志位a有效时判断第二存储器备份缓冲区中备份的新值写入地址中是否包含读取地址;若包含全部读取地址则从第二存储器新值缓冲区中读取全部读取地址对应的新值;若包含部分读取地址则从第一存储器中读取全部读取地址中的数据,从第二存储器备份缓冲区中读取所述部分读取地址对应的新值并用读取到的新值替换所述数据的相应部分;若不包含读取地址则从第一存储器中读取全部读取地址中的数据;步骤S8 调用第二应用程序接口提交事务,返回执行步骤S3 ;所述提交事务具体包括当事务处理标志位a有效时判断第二存储器备份缓冲区的标志位是否为有效;是则将第二存储器备份缓冲区中的数据备份到第一存储器备份缓冲区中,将第二存储器新值缓冲区中的数据写入第一存储器的相应地址中,将事务处理标志位a置为无效,并清除第二存储器中的数据;否则直接将事务处理标志位a置为无效,并清除第二存储器中的数据;步骤S9 调用第三应用程序接口终止事务,返回执行步骤S3 ;所述终止事务具体包括当事务处理标志位a有效时还原第一存储器备份缓冲区中标志位为有效的数据结构中的数据;清除第二存储器备份缓存区和新值缓存区中的数据。所述掉电保护具体包括判断检测事务处理标志位a ;当a有效时还原第一存储器备份缓冲区中标志位为有效的数据结构中的数据;
清除第二存储器中的数据,将事务处理标志位置为无效;当a无效时直接清除第二存储器中的数据。优选地,在本实施例中,所述事务处理标志位a有效时其值为true,当所述事务处理标志位a无效时其值为false ;在本实施例中,所述第一存储器为EEPR0M,第二存储器为RAM,第二存储器的读写速度较第一存储器快,本发明提供的基于缓存的java卡事务处理方法通过将对第一存储器的部分操作转为对第二存储器的操作,减少了对第一存储器的操作,提高了 java卡的运行速度。实施例二参见图1,事务处理机制中当第一应用程序接口被调用时开始事务,具体步骤如下步骤101 当java卡第一应用程序接口被调用时,判断事务处理标志位a的值是否为true,是则报错,否则执行步骤102 ;优选地,在本实施例中,所述第一应用程序接口具体为开始事务 (begintranscation)步骤102 将事务处理标志位a的值置为true。参见图2,事务处理机制中当第一函数被调用时执行写数据操作步骤201 当第一函数被调用时,判断事务处理标志位a的值是否为true,是则执行步骤203,否则执行步骤202 ;优选地,在本实施例中,所述第一函数具体为写(write)函数。步骤202 将当前新值写入第一存储器的相应地址,返回执行步骤S3 ;具体地,所述第一存储器的相应地址为当前新值的写入地址。步骤203 判断当前新值的长度是否大于第二存储可以备份的最大长度,是则执行步骤204,否则执行步骤206 ;步骤204 向第一存储器的备份缓冲区中备份当前新值写入地址中的原数据;优选地,在本实施例中,向第一存储器的备份缓冲区中备份当前新值写入地址中的原数据具体为按照指定数据结构向第一存储器的备份缓冲区中备份当前新值写入地址中的原数据,并将所述数据结构中的标志位置为有效,其中,所述数据结构为log" _l|log" _21. . . log" _n ;当所述原数据的长度小于255时log" _i(i = 1,2,3,..., η)的结构为I标志位I原数据长度I当前新值写入地址I原数据I ;当所述原数据的长度大于255时log" _i(i = 1,2,3,..., η)的结构为I标志位|0 I原数据长度I新值写入地址I原数据I。步骤205 将当前新值写入第一存储器的相应地址,返回执行步骤S3 ;具体地,所述第一存储器的相应地址为当前新值的写入地址。步骤206 判断第二存储器中剩余字节长度是否大于当前新值的长度,是则执行步骤207,否则执行步骤208 ;步骤207 检查第二存储器备份缓冲区中是否已经备份有第一存储器的新值写入地址中的数据,是则执行步骤212,否则执行步骤210 ;
步骤208 将第二存储器备份缓冲区中的数据按预先设定的格式写入第一存储器备份缓冲区中;步骤209 将第二存储器新值缓冲区中的数据写入第一存储器的相应地址,清除第二存储器新值缓冲区和备份缓冲区中的数据;具体地,所述第一存储器的相应地址为所述第二存储器新值缓冲区中的数据对应的写入地址。步骤210 向第二存储器的备份缓冲区中备份当前新值写入地址中的原数据;具体地,在本实施例中所述向第二存储器的备份缓冲区中备份当前新值写入地址中的原数据具体为按照指定数据结构向第二存储器的备份缓冲区中备份当前新值写入地址中的原数据,并将所述数据结构中的标志位置为有效,其中,所述数据结构为log_lIlog_2I. . . |log_n' ;log_j(j = 1,2,... η')的结构为:I标志位I原数据长度I新值写入地址I原数据I。步骤211 将所述当前新值添加到第二存储器的新值缓冲区中,返回执行步骤S3 ;具体地,在本实施例中所述将所述当前新值添加到第二存储器的新值缓冲区中具体为按照指定数据结构将所述当前新值添加到第二存储器的新值缓冲区中,并将所述数据结构中的标志位置为有效,其中,所述数据结构为log' _l|log' _2|... |log' _n";log' _k(k = 1,2,3,...η")的结构为:I新值写入地址I新值长度I新值I。步骤212 用当前新值替换第二存储器新值缓冲区中当前新值的写入地址对应的 log'中的新值,返回执行步骤S3。参见图3,事务处理机制中当第二函数被调用时执行读数据操作,具体步骤如下步骤301 当第二函数被调用时,判断事务处理标志a的值是否为true,是则执行步骤303,否则执行步骤302 ;优选地,在本实施例中,所述第二函数具体为读(read)函数。步骤302 从第一存储器的相应地址中读取全部数据,返回执行步骤S3 ;具体地,所述全部数据为全部要读取的数据。步骤303 设置变量i的值为1,设置常量η的值等于第二存储器备份缓冲区中log 的数量;步骤304 判断第二存储器备份缓冲区中log_i的标志位是否为有效,是则执行步骤305,否则执行步骤315 ;步骤305 判断第二存储器备份缓冲区中log_i对应的地址中是否包含读取地址, 若包含全部读取地址则执行步骤306,若包含部分读取地址则执行步骤307,若不包含读取地址则执行步骤315 ;步骤306 从第二存储器的新值缓冲区中读取全部数据,进程返回执行步骤S3 ;步骤307 从第一存储器的相应地址中读取全部数据;步骤308 从第二存储器新值缓冲区中读取部分数据,并用读取到的数据替换步骤307中读取到的数据的相应部分;
步骤309 判断i+Ι的值是否大于η的值,是则返回执行步骤S3进程,否则执行步骤 310 ;步骤310 :i的值自加1 ;步骤311 判断第二存储器备份缓冲区中log_i的标志位是否为有效,是则执行步骤312,否则返回执行步骤309 ;步骤312 判断第二存储器备份缓冲区中log_i对应的地址是否包含剩余读取地址,若包含全部剩余读取地址则执行步骤314,若包含部分剩余读取地址则执行步骤313, 若不包含剩余读取地址,则返回执行步骤309 ;步骤313 从第二存储器新值缓冲区中读取部分数据,并用读取到的数据替换步骤307中读取到的数据的相应部分;具体地,所述部分数据为第二存储器备份缓冲区中包含的部分剩余读取地址对应的新值缓冲区中的新值。步骤314:从第二存储器新值缓冲区中读取剩余读取地址对应的数据,并用读取到的数据替换步骤307中读取到的数据的相应部分,返回执行步骤S3 ;步骤315 判断i+Ι的值是否大于η的值,是则执行步骤316,否则执行步骤317 ;步骤316 从第一存储器的相应地址中读取全部数据,返回执行步骤S3 ;具体地,所述第一存储器的相应地址为读取地址。步骤317 :i的值自加1 ;步骤318 判断第二存储器备份缓冲区中log_i的标志位是否有效,是则执行步骤 319,否则返回执行步骤315 ;步骤319 判断第二存储器备份缓冲区中log_i对应的地址中是否包含读取地址, 若包含全部读取地址则执行步骤320,若包含部分读取地址则返回执行步骤307,若不包含读取地址则返回执行步骤315 ;步骤320 从第二存储器的新值缓冲区中读取全部数据,返回执行步骤S3。参见图4,在事务处理机制中当第二应用程序接口被调用时提交事务,具体步骤如下步骤401 当第二应用程序接口被调用时,判断事务处理标志a的值是否为true, 是则执行步骤402,否则返回执行步骤S3 ;优选地,在本实施例中,所述第二应用程序接口具体为提交事务 (committranscation)接口。步骤402:判断第二存储器备份缓冲区的标志位是否为有效,是则执行步骤403, 否则执行步骤408 ;步骤403 将第二存储器备份缓冲区的标志位置为无效;步骤404 将第二存储器备份缓冲区中的数据写入第一存储器备份缓冲区;步骤405 将在步骤404中写入第一存储器备份缓冲区中的log"的标志位置为有效;步骤406 将第二存储器新值缓冲区中的数据写入到第一存储器的相应地址;步骤407 将第一存储器备份缓冲区的标志位置为无效;步骤408 将事务处理标志位的值置为false,并清除第二存储器中新值缓冲区和备份缓冲区中的数据。参见图5,事务处理机制中当第三应用程序接口被调用时终止事务、系统回滚,具体步骤如下步骤501 当第三应用程序接口被调用时,判断事务处理标志位a的值是否为 true,是则执行步骤502,否则返回执行步骤S3 ;优选地,在本实施例中,所述第三应用程序接口具体为终止事务 (aborttranscation) ^ Π ο步骤502:设置变量i的初始值为1,常量η的值等于第一存储器备份缓冲区中 log"的数量;步骤503 判断第一存储器备份缓冲区log" _i的标志位是否为有效,是则执行步骤505,否则执行步骤504;步骤504 清除第二存储器备份缓冲区和新值缓冲区中的数据,返回执行步骤S3 ;步骤505 判断i+Ι的值是否大于η的值,是则执行步骤506,否则执行步骤508 ;步骤506:将log" _i中备份的数据还原;步骤507 将log" _i的标志位置为无效,返回执行步骤502 ;步骤508 :i的值自加1 ;步骤509 判断第一存储器备份缓冲区log" _i的标志位是否为有效,是则返回执行步骤505,否则执行步骤510 ;步骤510 将log" _i-l中备份的数据还原;步骤511:log" _i-l的标志位置为无效,返回执行步骤502。参见图6,本发明实施例提供了一种基于缓存的java卡事务处理方法中掉电保护的方法,具体步骤如下步骤601 :jaVa卡掉电后重新上电时,判断事务标志位a的值是否为true,是则执行步骤603,否则执行步骤602 ;步骤602 清除第二存储器备份缓冲区和新值缓冲区中的数据,返回执行步骤S3 ;步骤603:设置变量i的初始值为1,常量η的值等于第一存储器备份缓冲区中 log"的数量;步骤604 判断第一存储器备份缓冲区log" _i的标志位是否为有效,是则执行步骤606,否则执行步骤605 ;步骤605 清除第二存储器备份缓冲区和新值缓冲区中的数据,返回执行步骤S3 ;步骤606 判断i+Ι的值是否大于η的值,是则执行步骤607,否则执行步骤609 ;步骤607:将log" _i中备份的数据还原;步骤608 将log" _i的标志位置为无效,返回执行步骤603 ;步骤609 :i的值自加1 ;步骤610 判断第一存储器备份缓冲区log" _i的标志位是否为有效,是则返回执行步骤606,否则执行步骤611 ;步骤611 将log" _i-l中备份的数据还原;步骤612 将log" _i-l的标志位置为无效,返回执行步骤603。实施例三
参见图7,本发明实施例以向第一存储器中0x4000为起始的地址中写入第一新值,向第一存储器中0x4050为起始的地址中写入第二新值,向第一存储器中0x4200为起始的地址中写入第三新值为例提供了一种基于缓存的java事务处理方法流程,其中所述第一新值为40个字节的数据(5,6,7,8. . .,45),所述第二新值为90个字节的数据(5,6,7, 8,...,95),所述第三新值为130个字节的数据(5,6,7,8, ...,135),第一存储器备份缓冲区的大小为2560个字节,第二存储器备份缓冲区的大小为1 个字节,第二存储器新值缓冲区的大小为1 个字节。具体步骤如下一、调用第一应用程序接口,开始事务;二、调用第一函数,向第一存储器中0x4000为起始的地址中写入第一新值;首先判断得出事务处理标志位a为true后判断所述第一新值的长度40是否大于第二存储器可以备份的最大长度128,判断结果为否,执行步骤701、702,执行结果参见图 9 ;步骤701 向第二存储器的备份缓冲区中备份第一存储器地址0x4000 0x4040 中的原数据;步骤702 将第一新值按预定的数据结构添加到第二存储器的新值缓冲区中;具体地,若此时第三应用程序接口被调用或java卡虚拟机启动掉电保护,则清除第二存储器中的数据。三、调用第一函数,向第一存储器中0x4050为起始的地址中写入第二新值;首先判断得出事务处理标志位a的值为true后判断所述第二新值的长度90是否大于第二存储器可以备份的最大长度128,判断结果为否,继续判断第二存储器中剩余字节长度82是否大于所述第二新值的长度90,判断结果为否,执行步骤703、704、705、706,执行结果参见图10 ;步骤703 将第二存储器备份缓冲区中的数据按预定的数据结构备份到第一存储器的备份缓冲区中;具体地,将第二存储器备份缓冲区中的数据按预定的数据结构备份到第一存储器的备份缓冲区之前,将第二存储器的第一个log的标志位置为无效,数据备份完成后,将数据备份前置为无效的标志位重新置为有效。步骤704 将第二存储器新值缓冲区中的数据写入第一存储器地址0x4000 0x4040 中;步骤705 按预定的数据结构向第二存储器的备份缓冲区中备份第一存储器地址为0x4050 0x4140中的数据;步骤706 将第二新值按预定的数据结构添加到第二存储器的新值缓冲区中;具体地,若此时第三应用程序接口被调用或java卡虚拟机启动掉电保护,则从第一存储器的备份缓冲区中还原地址为0x4000 0x4040中的原数据。四、调用第一函数,向第一存储器中0x4200为起始的地址中写入第三新值;首先判断得出事务处理标志位a的值为true后判断所述第三新值的长度130是否大于第二存储器可以备份的最大长度128,判断结果为是,执行步骤707、708,执行结果参见图11 ;
步骤707 将第一存储器地址0x4200 0x4330中的数据按预定的数据结构备份到第一存储器的备份缓冲区;步骤708 将第三新值写入第一存储器的相应地址;具体地,若此时第三应用程序接口被调用或java卡虚拟机启动掉电保护,则从第一存储器的备份缓冲区中还原地址为0x4000 0x4040以及地址为0x4200 0x4330中的原数据。五、调用第二应用程序接口,提交事务;首先判断得出事务处理标志位a的值为true后,判断第二存储器备份缓冲区的标志位是否为有效,判断结果为是,执行步骤709、710、711、712,执行结果参见图12 ;步骤709 将第二存储器备份缓冲区中的数据按预定的数据结构添加到第一存储器的备份缓冲区中;具体地,将第二存储器备份缓冲区中的数据按预定的数据结构备份到第一存储器的备份缓冲区之前,将第二存储器的第一个log(即整体的标志位)的标志位置为无效,数据备份完成后,将在步骤709中写入第一存储器备份缓冲区的log"的标志位置为有效。步骤710 将第二存储器新值缓冲区中的数据写入第一存储器地址0x4050 0x4140 中;步骤711 将第一存储器备份缓冲区的标志位置为无效;具体地,所述第一存储器备份缓冲区的标志位为log" _1的标志位。步骤712 将事务处理标志位a的值置为false,并清除第二存储器备份缓冲区和新值缓冲区中的数据。以上所述的实施例只是本发明较优选的具体实施方式
,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
权利要求
1.一种基于缓存的java卡事务处理方法,其特征在于,51 java卡虚拟机上电,判断是否启动掉电保护,是则执行掉电保护,然后执行S3,否则执行S2 ;52所述java卡虚拟机进行事务处理初始化;53所述java卡虚拟机获取applet字节码;54所述java卡虚拟机解析所述applet字节码;当解析得到的是第一应用程序接口对应的字节码时,调用第一应用程序接口开始事务,返回S3 ;当解析得到的是第一函数对应的字节码时,调用第一函数写数据,返回S3,包括 步骤A 当事务处理标志位有效且包含有当前原数据的第一数据结构的长度小于或等于所述第二存储器的备份缓存区的剩余存储空间时,所述java卡虚拟机判断所述第二存储器的备份缓冲区中是否存在包含有所述当前原数据的第一数据结构体;如存在则所述java卡虚拟机用当前新值替换所述第一数据结构体中的当前原数据; 如不存在则所述java卡虚拟机将所述当前原数据按照第一预设数据结构格式备份到所述第二存储器的备份缓冲区中,并将所述当前新值按照第二预设数据结构格式写入到所述第二存储器的新值缓冲区中;所述第二存储器的备份缓存区中存储的是第一数据结构、 新值缓存区中存储的是第二数据结构,所述第一存储器的备份缓存区中存储的是第三数据结构、原数据存储区存储的是原数据和/或新值;当解析得到的是第二函数对应的字节码时,调用所述第二函数读数据,返回S3,包括 当事务处理标志有效时,所述java卡虚拟机从包含有全部读取地址的所述第二数据结构中读取新值;或所述java卡虚拟机从所述第二数据结构中根据所述读取地址读取对应的新值,根据所述读取地址从所述第一存储器的原数据缓存区中读取原数据,并用所述读取的新值替换所述读取的原数据中的与所述新值的写入地址相同的对应部分;当解析得到的是第二应用程序接口对应的字节码时,调用所述第二应用程序接口提交事务,返回S3,包括当事务处理标志有效且所述第二存储器的备份缓冲区的整体标志位有效时,所述java 卡虚拟机将所述第一数据结构中的原数据按照第三预设数据结构格式备份到所述第一存储器的备份缓冲区中,将所述第二存储器的新值缓冲区中第二数据结构中的新值写入到所述第一存储器的原数据存储区中相应的写入地址中,清除所述第一数据结构和所述第二数据结构,并将所述事务处理标志位的值置为无效;当解析得到的是第三应用程序接口对应的字节码时,调用所述第三应用程序接口终止事务,返回S3,包括当事务处理标志有效时,所述java卡虚拟机还原所述第一存储器的备份缓冲区中标志位为有效的第三数据结构中的原数据;清除第一数据结构和第二数据结构; 当解析得到的是其他字节码时,根据所述字节码执行相应操作,返回S3。
2.根据权利要求1所述的方法,其特征在于, 所述java卡虚拟机解析所述applet字节码包括步骤a 所述java卡虚拟机判断所述applet字节码中的首字节是否为预先约定的第一字节,是则执行步骤b,否则返回S3 ;步骤b 所述java卡虚拟机根据所述applet字节码中除首字节以外的字节检索索引表,并判断所述applet字节码中除首字节以外的字节是否为预先约定的字节;如所述applet字节码中除首字节以外的字节为预先约定的第二字节,则所述applet 字节码为所述第一应用程序接口对应的字节码,所述java卡虚拟机调用第一应用程序接口开始事务,返回S3;如所述applet字节码中除首字节以外的字节为预先约定的第三字节,则所述applet 字节码为所述第一函数对应的字节码,所述java卡虚拟机调用第一函数写数据,返回S3 ; 如所述applet字节码中除首字节以外的字节为预先约定的第四字节,则所述applet 字节码为所述第二函数对应的字节码,所述java卡虚拟机调用第二函数读数据,返回S3 ; 如所述applet字节码中除首字节以外的字节为预先约定的第五字节,则所述applet 字节码为所述第二应用程序接口对应的字节码,所述java卡虚拟机调用第二应用程序接口提交事务,返回S3;如所述applet字节码中除首字节以外的字节为预先约定的第六字节,则所述applet 字节码为所述第三应用程序接口对应的字节码,所述java卡虚拟机调用第三应用程序接口终止事务,返回S3 ;如所述applet字节码中除首字节以外的字节为其他字节则调用对应接口进行相应操作,返回S3。
3.根据权利要求2所述的方法,其特征在于,所述java卡虚拟机调用第一应用程序接口开始事物包括当java卡的所述第一应用程序接口被调用时,所述java卡虚拟机判断所述事务处理标志位的值是否为true,是则报错,否则将所述事务处理标志位的值置为true。
4.根据权利要求1所述的方法,其特征在于,所述步骤A具体为步骤Al 当java卡的所述第一函数被调用时,所述java卡虚拟机判断所述事务处理标志位的值是否为true,是则执行步骤A3,否则执行步骤A2 ;步骤A2 所述java卡虚拟机用接收到当前新值替换所述第一存储器的原数据存储区中的当前原数据;步骤A3 所述java卡虚拟机判断包含有所述当前新值的第二数据结构的长度是否大于所述第二存储区的备份缓存区的存储空间,是则执行步骤A4,否则执行步骤A6 ;步骤A4 所述java卡虚拟机从所述第一存储器的原数据存储区中读取所述当前原数据,并将所述当前原数据按照所述第三预设数据结构格式备份到所述第一存储器的备份缓冲区中;步骤A5 所述java卡虚拟机用接收到的当前新值替换所述第一存储器的原数据存储区中的当前原数据;步骤A6:所述java卡虚拟机判断所述第二存储器的备份缓存区中的剩余存储空间是否大于所述包含有所述当前新值的第二数据结构的长度,是则执行步骤A7,否则执行步骤 A8 ;步骤A7:所述java卡虚拟机判断在所述第二存储器的备份缓冲区中是否存在包含有所述第一存储器的原数据存储区中当前新值写入地址中的原数据的第一数据结构,如存在则执行步骤A12,如不存在则执行步骤AlO ;步骤A8 所述java卡虚拟机从所述第一存储器的原数据存储区中读取所述当前原数据,并将所述当前原数据按所述第三预设数据结构格式备份到所述第一存储器的备份缓冲区中;步骤A9 所述java卡虚拟机读取所述第二数据结构中的数据,并用所述读取到的数据替换所述第一存储器的原数据存储区中的当前原数据,清除所述第二数据结构和所述第一数据结构,顺序执行步骤A10;步骤AlO 所述java卡虚拟机从所述第一存储器的原数据存储区中读取所述当前原数据,并将所述读取到的当前原数据按照所述第一预设数据结构格式备份到所述第二存储器的备份缓冲区中;步骤All 所述java卡虚拟机将所述当前新值按照所述第二预设数据结构格式写入到第二存储器的新值缓冲区中;步骤A12 所述java卡虚拟机用所述当前新值替换所述第二数据结构中的相应数据。
5.根据权利要求2所述的方法,其特征在于,所述java卡虚拟机调用第二函数读数据包括步骤B 当所述事务处理标志位的值为true时,所述java卡虚拟机判断在所述第二数据结构中的新值写入地址是否包含读取地址;如包含全部读取地址,则所述java卡虚拟机从所述第二数据结构体中根据所述读取地址读取对应的新值;如包含读取地址,则所述java卡虚拟机根据所述读取地址从所述第一存储器的原数据存储区中读取对应的原数据,从所述第二数据结构体中根据所述读取地址读取对应的新值,并用所述新值替换所述原数据中的与所述新值的写入地址相同的对应部分;如不包含读取地址,则所述java卡虚拟机根据所述读取地址从所述第一存储器的原数据存储区中读取对应的原数据。
6.根据权利要求5所述的方法,其特征在于,所述步骤B具体为步骤Bl 当java卡的所述第二函数被调用时,所述java卡虚拟机判断所述事务处理标志的值是否为true,是则执行步骤B3,否则执行步骤B2 ;步骤B2 所述java卡虚拟机根据所述读取地址从所述第一存储器的原数据存储区中读取对应的原数据;步骤B3:所述java卡虚拟机将第一个第一数据结构作为当前数据结构,判断所述当前数据结构的标志位是否为有效,是则执行步骤B4,否则执行步骤B14 ;步骤B4 所述java卡虚拟机判断所述当前数据结构中是否包含读取地址,若包含全部的所述读取地址则执行步骤B5,若包含部分的所述读取地址则执行步骤B6,若不包含所述读取地址则执行步骤B14;步骤B5 所述java卡虚拟机从所述第二数据结构根据所述读取地址读取对应的新值;步骤B6 所述java卡虚拟机根据所述读取地址从第一存储器的原数据存储区中读取对应的原数据;步骤B7 所述java卡虚拟机从所述第二数据结构中根据所述读取地址读取对应的新值,并用所述新值替换所述步骤B6中读取到的原数据中与所述新值的写入地址相同的对应部分;步骤B8 所述java卡虚拟机判断所述当前数据结构是否为最后一个数据结构,是则返回S3,否则执行步骤B9;步骤B9 所述java卡虚拟机将所述第二存储器的备份缓冲区中的下一个第一数据结构作为当前数据结构;步骤BlO 所述java卡虚拟机判断步骤B9中所述当前数据结构的标志位是否为有效, 是则执行步骤B11,否则返回执行步骤B8 ;步骤Bll 所述java卡虚拟机判断步骤B9中所述当前数据结构是否包含所述读取地址的剩余部分,若包含全部的所述读取地址的剩余部分则执行步骤B13,若包含部分所述读取地址的剩余部分则执行步骤B12,若不包含所述读取地址的剩余部分,则返回执行步骤 B8 ;步骤B12 所述java卡虚拟机从所述第二数据结构中根据所述读取地址的剩余部分读取对应的新值,并用所述读取到的新值替换所述步骤B6中读取到的原数据中与所述新值的写入地址相同的对应部分,返回执行步骤B8 ;步骤B13 所述java卡虚拟机从所述第二数据结构中根据所述读取地址的剩余部分读取对应的新值,并用所述读取到的新值替换所述步骤B6中读取到的原数据中与所述新值的写入地址相同的对应部分;步骤B14 所述java卡虚拟机判断步骤B9中所述当前数据结构是否是最后一个,是则执行步骤B15,否则执行步骤B16 ;步骤B15 所述java卡虚拟机根据所述读取地址从所述第一存储器的原数据存储区中读取对应的原数据;步骤B16 所述java卡虚拟机将所述第二存储器的备份缓冲区中的下一个数据结构作为当前数据结构;步骤B17 所述java卡虚拟机判断步骤B16中所述当前数据结构的标志位是否为有效,是则执行步骤B18,否则返回执行步骤B14 ;步骤B18 所述java卡虚拟机判断步骤B16中所述当前数据结构是否包所述含读取地址,若包含全部所述读取地址则执行步骤B19,若包含部分所述读取地址则返回执行步骤 B6,若不包含所述读取地址则返回执行步骤B14 ;步骤B19 所述java卡虚拟机从所述第二数据结构中根据所述读取地址读取对应的新值。
7.根据权利要求2所述的方法,其特征在于,所述java卡虚拟机调用第二应用程序接口提交事务包括步骤C 当所述事务处理标志位的值为true时,所述java卡虚拟机判断第二存储器的备份缓冲区的整体标志位是否有效;是则将所述第二存储器的备份缓冲区中的原数据按照所述第三预设数据结构格式备份到第一存储器的备份缓冲区的中,将所述第二存储器的新值缓冲区中的新值写入到所述第一存储器的原数据存储区的相应地址中,将所述事务处理标志位的值置为false,并清除所述第一数据结构和所述第二数据结构;否则将所述事务处理标志位的值置为false,并清除所述第一数据结构和所述第二数据结构。
8.根据权利要求7所述的方法,其特征在于,所述步骤C具体为步骤Cl 当java卡的第二应用程序接口被调用时,所述java卡虚拟机判断所述事务处理标志的值是否为true,是则执行步骤C2,否则返回S3 ;步骤C2 所述java卡虚拟机判断第一个第一数据结构的标志位是否有效,是则执行步骤C3,否则执行步骤C8;步骤C3 所述java卡虚拟机将所述第一个第一数据结构的整体标志位置为无效; 步骤C4 所述java卡虚拟机从所述第一数据结构中读取原数据,并将所述原数据按照所述第三预设数据结构格式备份到所述第一存储器的备份缓冲区中;步骤C5 所述java卡虚拟机将包含有所述原数据的第三数据结构的标志位置为有效;步骤C6 所述java卡虚拟机从所述第二数据结构中读取新值,并根据所述第二数据结构中的写入地址将所述新值写入到所述第一存储器的原数据存储区的相应地址中;步骤C7 所述java卡虚拟机将所述第一存储器的备份缓冲区的整体标志位置为无效, 顺序执行步骤C8 ;步骤C8 所述java卡虚拟机将所述事务处理标志位的值置为false,并清除所述第一数据结构和所述第二数据结构。
9.根据权利要求2所述的方法,其特征在于,所述java卡虚拟机调用第三应用程序接口终止事务,具体包括步骤Dl 当java卡的所述第三应用程序接口被调用时,所述java卡虚拟机判断所述事务处理标志位的值是否为true,是则执行步骤D2,否则返回S3 ;步骤D2 所述java卡虚拟机将第一个第三数据结构作为当前数据结构; 步骤D3 所述java卡虚拟机判断所述当前数据结构的标志位是否有效,是则执行步骤 D5,否则执行步骤D4;步骤D4 所述java卡虚拟机清除所述第一数据结构和所述第二数据结构; 步骤D5 所述java卡虚拟机判断所述当前数据结构是否为最后一个数据结构,是则执行步骤D6,否则执行步骤D8;步骤D6 所述java卡虚拟机还原所述当前数据结构中的原数据;步骤D7 所述java卡虚拟机将所述当前数据结构的标志位置为无效,返回执行步骤D2 ;步骤D8 所述java卡虚拟机将下一个第三数据结构为作为当前数据结构; 步骤D9 所述java卡虚拟机判断步骤D8中所述当前数据结构的标志位是否为有效, 是则执行步骤D5,否则执行步骤DlO ;步骤DlO 所述java卡虚拟机还原步骤D8中所述当前数据结构的上一个数据结构中的原数据;步骤Dll 所述java卡虚拟机将所述上一个数据结构的标志位置为无效,返回执行步骤D2。
10.根据权利要求1所述的方法,其特征在于,所述掉电保护包括当事务处理标志有效时,所述java卡虚拟机还原标志位为有效的第三数据结构中的数据,清除第一数据结构和第二数据结构,将事务处理标志置为无效;当事务处理标志无效时,所述java卡虚拟机清除第一数据结构和第二数据结构。
11.根据权利要求10所述的方法,其特征在于,所述掉电保护具体包括步骤El 所述java卡虚拟机判断所述事务标志位的值是否为true,是则执行步骤E3, 否则执行步骤E2 ;步骤E2 所述java卡虚拟机清除所述第一数据结构和所述第二数据结构; 步骤E3 所述java卡虚拟机将第一个第三数据结构作为当前数据结构; 步骤E4 所述java卡虚拟机判断所述当前数据结构的标志位是否为有效,是则执行步骤E6,否则执行步骤E5 ;步骤E5 所述java卡虚拟机清除所述第一数据结构和所述第二数据结构,将所述事务标志位置位的值置为false ;步骤E6 所述java卡虚拟机判断所述当前数据结构是否为最后一个数据结构,是则执行步骤E7,否则执行步骤E9;步骤E7 所述java卡虚拟机还原所述当前数据结构中的原数据;步骤E8 所述java卡虚拟机将所述当前数据结构的标志位置为无效,返回执行步骤E3 ;步骤E9 所述java卡虚拟机将下一个第三数据结构作为当前数据结构; 步骤ElO 所述java卡虚拟机判断步骤E9中所述当前数据结构的标志位是否为有效, 是则返回执行步骤E6,否则执行步骤Ell ;步骤Ell 所述java卡虚拟机还原步骤E9中所述当前数据结构的上一个数据结构中的原数据;步骤E12 所述java卡虚拟机将所述上一个数据结构的标志位置为无效,返回执行步骤E3。
12.根据权利要求1所述的方法,其特征在于,所述java卡虚拟机进行事务处理初始化包括java卡虚拟机清除第一数据结构和第二数据结构,将所述事务处理标志位置为无效, 将所述第一存储器备份缓冲区中第一个第三数据结构的标志位置为无效。
13.根据权利要求1-12任意一项所述的方法,其特征在于,所述还原具体为所述java卡虚拟机所述第一数据结构中的原数据,并根据所述第一数据结构体中的写入地址将所述读取到的原数据写入到对应的地址中。
全文摘要
本发明公开了一种基于缓存的java卡事务处理方法,属于信息安全领域。所述方法包括S1java卡虚拟机上电,判断是否启动掉电保护,是则启动掉电保护,然后直接执行S3,否则顺序执行S2;S2进行事务处理初始化;S3获取applet字节码;S4解析applet字节码,若为第一应用程序接口对应的字节码,则调用第一应用程序接口,返回S3;为第一函数对应的字节码时,则调用第一函数,返回S3;为第二函数对应的字节码时,则调用第二函数,返回S3;为第二应用程序接口对应的字节码时,则调用第二应用程序接口,返回S3;为第三应用程序接口对应的字节码时,则调用第三应用程序接口,返回S3;为其他字节码时,则根据所述字节码执行相应操作,返回S3。
文档编号G06F9/46GK102495754SQ201110332419
公开日2012年6月13日 申请日期2011年10月27日 优先权日2011年10月27日
发明者于华章, 陆舟 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1