一种Java卡空闲块管理方法

文档序号:8457227阅读:414来源:国知局
一种Java卡空闲块管理方法
【技术领域】
[0001] 本发明涉及智能卡领域,具体涉及一种Java卡空闲块管理方法。
【背景技术】
[0002] 随着金融电子化的全面发展,为解决用户对一卡多用的需要,支持多应用的Java 卡得到了越来越多的普及应用。Java卡作为一种智能卡,其存储体系主要由读写存储器 (RAM)、只读存储器(ROM)和可擦写编程存储器(EEPROM)组成,其中RAM用于存放运算过程 中的中间数据和结果数据,ROM用于存放智能卡的操作系统,EEPROM是智能卡的主要存储 器,用于存放卡人的个人信息及发行单位的信息和应用数据。
[0003] 随着业务的多样化变化,Java卡产品在投放使用后,EEPROM中存储的数据经常发 生变动,需要提供合理的存储空间管理方法,以达到高效地申请存储空间,有效地利用存储 空间的目的,提升Java卡的应用性能。现有的Java卡对于存储空间管理通过保存空闲块 信息进行管理,但是在申请和回收空间的时候,通常采用顺序遍历的机制,效率较低,交易 的时间较长,因此,提出一种高效的Java卡空闲块管理方法是有必要的,尤其是对性能要 求较高的应用中更需要高效的Java卡空闲块管理方法。

【发明内容】

[0004] 为解决上述问题,本发明的目的是提供一种Java卡空闲块管理方法。
[0005] 本发明为实现上述目的,通过以下技术方案实现: 一种Java卡空闲块管理方法,Java卡通过空闲块信息表存储EEPROM中空闲块的信息, 空闲块信息表由结点组成,所述的结点包括空闲块信息、空闲块个数和后继结点地址;结点 间通过后继结点地址形成链式存储结构,所述的空闲块信息包含地址和大小两部分,在16 位芯片中占用的存储空间为4字节,32位芯片中占用的存储空间为8字节;每个结点在连 续的空间内最多存储MAX_TBL_BLOCK_SIZE个空闲块信息,空闲块信息按照大小顺序存储; 预先从EEPROM为空闲块信息表的第一个结点分配空间,当空闲块个数超过当前结点所能 存储的最大数量后,将从EEPROM为后继结点申请存储空间;为数据申请存储空间时,遍历 空闲块信息表并选择大小合适的空闲块;释放数据占用的存储空间时,采用块合并排序算 法将释放的存储空间合并到合适的空闲块中,并且将空闲块信息按照大小排序。
[0006] 为进一步实现本发明的目的,还可以采用以下技术方案: 一种Java卡空闲块管理方法,包括如下步骤: (1) 在EEPROM中预先为空闲块信息表的第一个结点分配存储空间,当空闲块个数超过 当前结点所能存储的最大数量MAX_TBL_BLOCK_SIZE后,从EEPROM为后继结点申请存储空 间; (2) 在EEPROM中为数据申请存储空间时,采用最佳大小块匹配算法,遍历空闲块信息 表并选择大小合适的空闲块,所述的最佳大小块匹配算法为折半算法; (3) 释放数据占用的存储空间时,采用块合并排序算法将释放的存储空间合并到合适 的空闲块中,并且将空闲块信息按照大小排序。
[0007] 优选的,最佳大小块匹配算法包括如下步骤: ⑴依次遍历空闲块信息表中的每个结点; ⑵对当前结点中的空闲块信息,采用折半算法进行遍历,具体为: ① 确定开始块位置,根据有效空闲块个数计算中间块序号,然后通过如下循环处理确 定开始块位置: A. 如果中间块大小等于待分配空间大小,则查找成功,算法执行完毕; B. 如果中间块大小大于待分配空间大小,则重新计算左侧部分的中间块序号,直到中 间块大小小于或等于待分配空间大小为止; C. 如果中间块大小小于待分配空间大小,则重新计算右侧部分的中间块序号,直到中 间块大小小于或等于待分配空间大小为止; ② 如果当前块大小小于待分配空间大小,则选取后续空闲块作为当前块; ③ 如果中间块大小等于待分配空间大小,则查找成功,算法执行完毕; ④ 如果当前块大小大于待分配空间大小,则进行如下操作: A. 如果存在备选块,则比较当前块大小和备选块大小,如果当前块大小小于备选块大 小,则标识当前块为备选块,并记录当前块大小; B. 如果不存在备选块,则标识当前块为备选块,并记录当前块大小,跳出当前结点,进 入下一结点的空闲块遍历; ⑶遍历完所有结点的空闲块信息后,将标识的备选块地址信息返回。
[0008] 优选的,块合并排序算法包括以下步骤: ⑴依次遍历空闲块信息表中的每一个结点; ⑵对当前结点中的空闲块信息进行遍历,具体为: ① 如果释放块尾地址等于当前块始地址,则进行如下操作: A. 如果合并状态为真,则进一步合并,即将上次合并块信息的大小累加当前块大小,并 修改当前块信息中的地址为〇,以表示该地址无效,所述的合并状态为真即释放块始地址是 某空闲块尾地址,进行过一次合并; B. 如果合并状态为假,则将当前块信息保存备用,将当前块信息大小累加释放块大小, 将当前块信息的地址改写为释放块始地址,并设置合并状态为真; ② 如果释放块始地址等于当前块尾地址,则进行如下操作: A. 如果合并状态为真,则进一步合并,将当前块信息的大小累加上次合并块最终大小, 并修改上次合并块信息中的地址为0,以表示该地址无效,所述的合并状态为真即释放块尾 地址是某空闲块始地址,进行过一次合并; B. 如果合并状态为假,则将当前块信息保存备用,将当前块信息的大小累加释放块大 小,并设置合并状态为真; ⑶如果合并状态为假,则需要增加释放块到空闲块信息表中:对空闲块信息表的所有 结点遍历,如果当前结点的空闲块个数不超过MAX_TBL_BLOCK_SIZE,则依次遍历每个空闲 块,找到合适位置,插入该空闲块信息; ⑷如果合并状态为真,则需要调整位置,确保空闲块按大小由小到大排序,可采用冒泡 算法,从当前合并块开始往后比较,如果合并块大小大于后继空闲块大小,则两个块交换位 置,直到不满足条件为止。
[0009] 本发明的优点在于: 本发明按块大小由小到大的顺序存储方式存储空闲块信息,这样在申请存储空间时, 可以快速查找到存储位置,大大提高执行效率;在Java卡的实际使用中只有在卸载包或删 除应用的时候才会释放存储空间,所以释放空闲块的排序算法不会影响金融应用的交易时 间;在卡片个人化、有较高运行速度要求的特殊金融应用中,本发明的最佳大小块匹配算法 能快速响应申请空间的请求,从而显著提升Java卡的运行效率。
【附图说明】
[0010] 图1为空闲块信息表存储结构示意图。
【具体实施方式】
[0011] -种Java卡空闲块管理方法,Java卡通过空闲块信息表存储EEPROM中空闲块 的信息,空闲块信息表由结点组成,所述的结点包括空闲块信息、空闲块个数和后继结点地 址;结点间通过后继结点地址形成链式存储结构,所述的空闲块信息包含地址和大小两部 分,在16位芯片中占用的存储空间为4字节,32位芯片中占用的存储空间为8字节海个 结点在连续的空间内最多存储MAX_TBL_BLOCK_SIZE个空闲块信息,空闲块信息按照大小 顺序存储;预先从EEPROM为空闲块信息表的第一个结点分配空间,当空闲块个数超过当前 结点所能存储的最大数量后,将从EEPROM为后继结点申请存储空间;为数据申请存储空间 时,遍历空闲块信息表并选择大小合适的空闲块;释放数据占用的存储空间时,采用块合并 排序算法将释放的存储空间合并到合适的空闲块中,并且将空闲块信息按照大小排序。
[0012] 为进一步实现本发明的目的,还可以采用以下技术方案: 一种Java卡空闲块管理方法,包括如下步骤: (1) 在EEPROM中预先为空闲块信息表的第一个结点分配存储空间,设置空闲块个数为 1,设置后继结点地址为〇,设置第一块空闲块地址信息为当前EEPROM空闲区域的首地址, 大小为EEPROM所有空闲区域的大小,设置剩余所有空闲块信息,包括地址和大小为0 ; 空闲块信息表采用链式存储结构和顺序存储结构的复合存储模式存储当前EEPROM中 空闲块的信息,具体为: ① 空闲块信息表的每个结点由空闲块信息、空闲块个数和后继结点地址组成,结点之 间通过后继结点地址形成链式存储结构,空闲块信息包含地址和大小两部分,在16位芯片 中占用4字节的存储空间,在32位芯片中占用8字节的存储空间; ② 每个结点最多存储MAX_TBL_BLOCK_SIZE个空闲块信息,这些空闲块信息在连续的 空间内存储,并且按大小排序,采用顺序存储结构;当空闲块个数超过当前结点所能存储的 最大数量MAX_TBL_BLOCK_SIZE后,从EEPROM为后继结点申请存储空间; (2) 在EEPROM中为数据申请存储空间时,采用最佳大小块匹配算法,遍历空闲块信息 表并选择大小合适的空闲块,所述的最佳大小块匹配算法为折半算法;为得到最佳空闲块, 将以大小完全匹配或者最接近为目标,如果遇到匹配大小的空闲块,则选择成功,否则将遍 历剩余空闲块信息,直到找到大小最接近的空闲块为止; (3) 释放数据占用的存储空间时,采用块合并排序算法将释放的存储空间合并到合适 的空闲块中,并且将空闲块信息按照大小排序;在释放空间的时候,如果出现释放块和某空 闲块首尾相
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1