java 发送短信 多通道_一种Java卡多通道临时对象管理方法与流程

97a897a01a4018766fc653b5a299a791.gif

本发明涉及Java智能卡领域,具体涉及一种Java卡多通道临时对象管理方法。

背景技术:

:JavaCard规范支持逻辑通道的概念,允许最多智能卡中的16个应用程序会话同时开启,每个逻辑通道一个会话。因为卡片中的APDU的处理不能中断,并且每个APDU包含一个到逻辑通道的引用,变动的APDU可以拟同步地访问卡片上的许多小应用程序。逻辑通道的概念在JavaCard规范中是可选的,但是很多智能卡由于也提出了多通道的要求,因此,在Java卡中提供多通道支持是有必要的。多通道对Java卡的设计与实现提出的最大挑战就在于临时对象的管理,由于Java卡的物理内存空间较小,而且多通道要求数据只能被通道内的对象访问。如何解决物理内存的有效利用、通道内数据的访问控制,成为支持多通道的Java卡必须解决的问题。技术实现要素:为解决上述问题,本发明的目的是提供一种Java卡多通道临时对象管理方法。本发明为实现上述目的,通过以下技术方案实现:一种Java卡多通道临时对象管理方法,Java卡多通道临时对象包括应用取消选择临时对象和卡片重置临时对象,应用取消选择临时对象简称DTO,卡片重置临时对象简称RTO;DTO管理是通过建立DTO信息表来表示每个通道已分配空间的DTO信息,分配多块固定大小内存区域用以存储不同通道的DTO,并且每次建立通道的时候重新为该通道分配DTO内存块,每个DTO内存块中存储当前相关联的包内DTO对象;RTO管理是通过定义变量RTO_Size来表示所有包内RTO所分配的内存大小,分配一块指定大小的内存区域存储所有通道的RTO,RTO内存块中每个RTO所存储的位置是固定的,不跟随通道编号而变化。优选的,DTO管理包括为DTO分配内存和释放已分配DTO内存;所述的为DTO分配内存的操作包括如下步骤:①通过DTO信息表获取当前上下文已分配DTO内存大小,计算DTO内存块剩余内存大小,计算公式为DTO内存块剩余内存大小=DTO内存块大小-已分配DTO内存大小;②如果待分配DTO所需内存大小>DTO内存块剩余内存大小,返回操作,为DTO分配内存失败;如果待分配DTO所需内存大小≤DTO内存块剩余内存大小,则更新DTO信息表中当前上下文已分配DTO内存大小,计算公式为DTO信息表中当前上下文已分配DTO内存大小=DTO内存块原已分配内存大小+待分配内存大小;待分配DTO所在内存块的偏移地址为DTO内存块剩余内存大小;所述的释放已分配DTO内存的操作包括如下步骤:⑴获取待删除的DTO在DTO内存块的偏移地址;⑵遍历包内每一个对象,如果当前对象是DTO,且偏移地址>待删除DTO偏移地址,则修改该对象的偏移地址,其计算公式为原偏移地址-待删除DTO所占内存大小;⑶更新DTO信息表,将待释放DTO所属包的已分配内存大小更新为原分配内存大小-待删除DTO所占内存大小。优选的,RTO管理包括为RTO分配内存和释放已分配RTO内存;所述的为RTO分配内存的操作包括以下步骤:A.计算RTO内存块剩余内存大小,计算公式为RTO内存块剩余内存大小=RTO内存块大小-RTO_Size;B.如果待分配RTO所需内存大小>RTO内存块剩余内存大小,则返回操作,为RTO分配内存失败;如果待分配RTO所需内存大小≤RTO内存块剩余内存大小,待分配RTO所在内存块的偏移地址为RTO_Size,更新RTO_Size为原RTO_Size+待分配内存大小;所述的释放已分配RTO内存的操作包括如下步骤:⑴获取待删除的RTO在RTO内存块中的偏移地址;⑵遍历包内每一个对象,如果当前对象是RTO,且偏移地址>待删除RTO偏移地址,则修改该对象的偏移地址,其计算公式为原偏移地址-待删除RTO所占内存大小;⑶更新RTO_Size的值为:RTO_Size-待删除RTO所占内存大小。本发明的优点在于:本发明提供了一种Java卡多通道临时对象管理方法,该方法实现了两类临时对象的差异性内存管理,对于应用取消选择临时对象DTO,采用多块固定大小的DTO内存块,以满足多通道内对象独立访问的控制需要;对于卡片重置临时对象RTO,采用一块制定大小的RTO内存块,来适应卡片重置才能删除的特点。本发明的多通道临时对象的管理方法在分配内存和释放对象时均具有较高的效率,尤其表现在释放内存时,这是因为两者在释放内存时均需要调整已分配空间对象的偏移位置,以便有效的利用物理内存,因此,该方法只要更新偏移位置大于所释放对象偏移位置的对象即可。附图说明图1为应用取消选择临时对象管理的示意图。具体实施方式一种Java卡多通道临时对象管理方法,Java卡多通道临时对象包括应用取消选择临时对象和卡片重置临时对象,应用取消选择临时对象简称DTO,卡片重置临时对象简称RTO;DTO管理是通过建立DTO信息表DTOTable来表示每个通道已分配空间的DTO信息,分配多块固定大小为DTR_SIZE内存区域用以存储不同通道的DTO,这些内存区域物理上相邻,最大的块数定义为MAX_D,具体如下表所示:DTO内存块1:DTO对象1|DTO对象2|DTO对象3|……|DTO对象nDTO内存块2:DTO对象1|DTO对象2|DTO对象3|……|DTO对象n………………DTO内存块MAX_D:DTO对象1|DTO对象2|DTO对象3|……|DTO对象nDTO信息表DTOTable包括两部分内容:每个包内DTO对象所占用的内存大小和每个通道所使用的DTO内存块;卡片上电的时候,DTOTable的通道和DTO内存块信息重置,并且每次建立通道的时候重新为该通道分配DTO内存块,每个DTO内存块中存储当前相关联的包内DTO对象,;其中建立通道的时候重新为该通道分配DTO内存块的步骤如下:第一,计算通道号,通道号通过APDU命令的CLA字节来确定,即CLA&0x0F;第二,分配一块未被使用的DTO内存块给当前的通道;第三,将通道编号和DTO内存块序号写入DTOTable。RTO管理是通过定义变量RTO_Size来表示所有包内RTO所分配的内存大小,分配一块指定大小的内存区域存储所有通道的RTO,RTO内存块中每个RTO所存储的位置是固定的,不跟随通道编号而变化。优选的,DTO管理包括为DTO分配内存和释放已分配DTO内存;所述的为DTO分配内存的操作包括如下步骤:①通过DTO信息表获取当前上下文已分配DTO内存大小,计算DTO内存块剩余内存大小,计算公式为DTO内存块剩余内存大小=DTO内存块大小-已分配DTO内存大小;②如果待分配DTO所需内存大小>DTO内存块剩余内存大小,返回操作,为DTO分配内存失败;如果待分配DTO所需内存大小≤DTO内存块剩余内存大小,则更新DTO信息表中当前上下文已分配DTO内存大小,计算公式为DTO信息表中当前上下文已分配DTO内存大小=DTO内存块原已分配内存大小+待分配内存大小;待分配DTO所在内存块的偏移地址为DTO内存块剩余内存大小;所述的释放已分配DTO内存的操作包括如下步骤:⑴获取待删除的DTO在DTO内存块的偏移地址;⑵遍历包内每一个对象,如果当前对象是DTO,且偏移地址>待删除DTO偏移地址,则修改该对象的偏移地址,其计算公式为原偏移地址-待删除DTO所占内存大小;⑶更新DTO信息表,将待释放DTO所属包的已分配内存大小更新为原分配内存大小-待删除DTO所占内存大小。优选的,RTO管理包括为RTO分配内存和释放已分配RTO内存;所述的为RTO分配内存的操作包括以下步骤:A.计算RTO内存块剩余内存大小,计算公式为RTO内存块剩余内存大小=RTO内存块大小-RTO_Size;B.如果待分配RTO所需内存大小>RTO内存块剩余内存大小,则返回操作,为RTO分配内存失败;如果待分配RTO所需内存大小≤RTO内存块剩余内存大小,待分配RTO所在内存块的偏移地址为RTO_Size,更新RTO_Size为原RTO_Size+待分配内存大小;所述的释放已分配RTO内存的操作包括如下步骤:⑴获取待删除的RTO在RTO内存块中的偏移地址;⑵遍历包内每一个对象,如果当前对象是RTO,且偏移地址>待删除RTO偏移地址,则修改该对象的偏移地址,其计算公式为原偏移地址-待删除RTO所占内存大小;⑶更新RTO_Size的值为:RTO_Size-待删除RTO所占内存大小。实施例1Java卡多通道临时对象管理,其中所涉及的信息表和存储空间的定义如下:①从外部随机存储器XRAM中分配多块大小为DTR_SIZE的内存区域用以存储不同通道的DTO,这些内存区域物理上相邻,开始的内存偏移位置为POS_DTO,最大块数定义为M_DTO,具体如下表所示:DTO内存块1:DTO对象1|DTO对象2|DTO对象3|……|DTO对象nDTO内存块2:DTO对象1|DTO对象2|DTO对象3|……|DTO对象n………………DTO内存块MAX_D:DTO对象1|DTO对象2|DTO对象3|……|DTO对象n②从外部随机存储器XRAM中分配一块大小为RTR_SIZE的内存区域存储所有通道的RTO,起始偏移位置为POS_RTO,定义RTO_Size为当前已分配的所有RTO所占用的内存空间;③DTO信息表DTOTable分为两部分,一部分定义在EEPROM空间内,定义其开始偏移位置为POS_DTOTable,占据内存空间大小为2*Max_Package字节,其中Max_Package表示最多的包数量;另一部分定义在XRAM内存空间,定义为ByteDTOBlockNo[Max_D],其中,Max_D表示最多的DTO内存块数量。实施例2图1为应用取消选择临时对象管理的示意图,其中左侧图为DTO信息表,它给出了每个通道与其使用的DTO内存块的关系,每个通道建立的时候会分配一块空闲的DTO内存块,该信息将在DTO信息表中保存;右侧图给出了与具体通道关联的DTO内存块的存储示意,正在使用的通道所关联的内存块中将存储实际的DTO数据。实施例3为DTO分配内存的步骤如下:①定义DTO所属的包ID为P_ID,所需内存大小为DSize;②访问内存地址POS_DTOTable+P_ID*2,来得到所属包已分配的内存大小P_DSize;③计算DTO内存块剩余内存大小CanUseSize=DTO内存块大小DTR_SIZE-已分配DTO内存大小P_DSize;④如果CanUseSize≥DSize,则更新EEPROM中POS_DTOTable+P_ID*2的值为P_DSize+DSize、返回所分配DTO对象的偏移地址为POS_DTO+P_DSize;⑤如果CanUseSize待删除DTO偏移地址OFFSET_D,则更新其偏移地址OFFSET_ND为原偏移地址OFFSET_ND-待删除DTO所占内存大小DSize;④更新EEPROM中待释放DTO所属包的已分配内存大小POS_DTOTable+P_ID*2的值为原分配内存大小P_DSize-待删除DTO所占内存大小DSize。实施例4为RTO分配内存的方法包括以下步骤:①假定RTO所需内存大小为RSize;②计算RTO内存块剩余内存大小CanUseSize=RTO内存块大小RTR_SIZE-已分配RTO内存大小RTO_Size;③如果RTO内存块剩余内存大小CanUseSize>RSize,则回所分配RTO对象的偏移地址为RTO_Size、更新RTO_Size为RTO_Size+RSize;④如果RTO内存块剩余内存大小CanUseSizeOFFSET_R,则更新其偏移地址OFFSET_NR为OFFSET_NR-RSize;④更新RTO_Size的值为RTO_Size-待删除RTO所占内存大小RSize。当前第1页1&nbsp2&nbsp3&nbsp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值