一种智能卡的应用加载运行方法及智能卡与流程

文档序号:12824344阅读:162来源:国知局
一种智能卡的应用加载运行方法及智能卡与流程

本发明涉及一种电子技术领域,尤其涉及一种智能卡的应用加载运行方法及智能卡。



背景技术:

智能卡作为身份识别和安全认证的重要工具已经得到广泛的应用。特别是,java技术与智能卡技术的结合使智能卡的应用领域越来越广,这种智能卡由于能支持java虚拟机和各种运行平台,因此常被称为java卡。

java卡适用于空中下载、多媒体信息管理、近距离支付等业务,也可以支持多个app应用的运行和管理,随着java卡可以承载和处理的业务越来越多,在卡内缓存中存储以及处理的数据规模也越来越大。因此,对智能卡的存储卡的容量的要求也越来越高。但目前,智能卡中的非易失性存储器ram的容量与存储卡上设置的片内flash的容量都相对较小,使得智能卡处理业务的能力受限。



技术实现要素:

本发明旨在解决上述问题。

本发明的主要目的在于提供一种智能卡的应用加载运行方法。

本发明的另一目的在于提供一种智能卡。

为达到上述目的,本发明的技术方案具体是这样实现的:

本发明一方面提供了一种智能卡的应用加载运行方法,包括:

虚拟机接收到下载指令,获取待加载应用的中间码文件,所述中间码文件至少包括:所述待加载应用的代码段以及所述待加载应用的代码段的第一基址,其中,所述第一基址为所述虚拟机为所述待加载应用的代码段在片内flash分配的基址;

生成所述待加载应用的应用注册表项,所述应用注册表项至少包括:所述待加载应用的标识信息、所述待加载应用的代码段的当前运行地址以及当前存储地址,其中,所述当前运行地址为所述第一基址,所述当前存储地址包括所述第一基址;

根据所述待加载应用的类型、运行速度需求或者用户输入的搬移请求,判断是否需要将存储于所述片内flash的所述待加载应用的代码段进行搬移;在需要搬移的情况下,为所述待加载应用的代码段分配在片外flash的存储空间,获得所述待加载应用的代码段的第二基址,将所述待加载应用的代码段存储至所述片外flash,并将所述当前运行地址修改为所述第二基址,在所述当前存储地址中添加所述第二基址,其中,所述第二基址为所述待加载应用的代码段在所述片外flash的基址。

可选的,在所述根据所述待加载应用的类型、运行速度需求或者用户输入的搬移请求,判断是否需要将存储于所述片内flash的所述待加载应用的代码段进行搬移之前,或者,在所述将所述待加载应用的代码段存储至所述片外flash之后,所述方法还包括:

所述虚拟机接收到安装指令,获取所述待加载应用的代码段中的安装方法的相对地址,将所述代码段的基址加上所述安装方法的相对地址计算得到所述安装方法的绝对地址,从所述安装方法的绝对地址开始对所述安装方法取址运行,在所述片内flash中创建所述待加载应用的应用实例,并在所述应用注册表项中添加所述待加载应用的应用实例;其中,在所述代码段存储于所述片内flash的情况下,所述代码段的基址为所述第一基址;在所述代码段存储于所述片外flash的情况下,所述代码段的基址为所述第二基址。

可选的,在将所述待加载应用的代码段存储至所述片外flash时,所述方法还包括:删除所述片内flash存储的所述待加载应用的代码段,并将所述当前存储地址中的所述第一基址删除。

可选的,在所述将所述待加载应用的代码段存储至所述片外flash,并将所述当前运行地址修改为所述第二基址,在所述当前存储地址中添加所述第二基址之后,所述方法还包括:

所述虚拟机接收到状态切换指令,根据状态待切换应用的标识信息获取所述状态待切换应用的应用注册表项;所述状态切换指令中至少包括:所述状态待切换应用的标识信息以及运行所述状态待切换应用的运行介质;所述运行介质包括以下之一:随机存取存储器ram、所述片内flash和所述片外flash;

在获取到所述状态待切换应用的应用注册表项的情况下,判断所述状态待切换应用的应用注册表项中的当前运行地址是否属于所述运行介质的地址段,如果不是,则判断所述状态待切换应用的应用注册表项中的当前存储地址中的至少一个地址是否属于所述运行介质的地址段,如果不是,则为所述状态待切换应用的代码段分配在所述运行介质的存储空间,获得所述状态待切换应用的代码段的第三基址,将所述状态待切换应用的代码段存储至所述运行介质中;将所述状态待切换应用的应用注册表项中的当前运行地址修改为所述第三基址,并在所述状态待切换应用的应用注册表项中的当前存储地址中添加所述第三基址,其中,所述第三基址为所述状态待切换应用的代码段在所述运行介质的基址。

可选的,在所述将所述待加载应用的代码段存储至所述片外flash,并将所述当前运行地址修改为所述第二基址,在所述当前存储地址中添加所述第二基址之后,所述方法还包括:

a1、所述虚拟机接收到应用激活指令,根据待激活应用的标识信息获取所述待激活应用的应用注册表项;其中,所述应用激活指令中至少包括:所述待激活应用的标识信息,以及运行所述待激活应用的运行介质;所述运行介质包括以下之一:随机存取存储器ram、所述片内flash和所述片外flash;

a2、在获取到所述待激活应用的应用注册表项的情况下,判断所述待激活应用的应用注册表项中的当前运行地址是否属于所述运行介质的地址段,如果是,则执行步骤a3;如果不是,执行步骤a5;

a3、获取所述待激活应用的代码段中的去激活方法的相对地址,将所述待激活应用的应用注册表项中的当前运行地址加上所述去激活方法的相对地址计算得到所述去激活方法的绝对地址,从所述去激活方法的绝对地址开始对所述去激活方法取址运行,去激活当前处于激活态的应用;

a4、获取所述待激活应用的代码段中的激活方法的相对地址,将所述待激活应用的应用注册表项中的当前运行地址加上所述激活方法的相对地址计算得到所述激活方法的绝对地址,从所述激活方法的绝对地址开始对所述激活方法取址运行,激活所述待激活应用,并在系统全局变量中将所述待激活应用的状态置为激活态;

a5、判断所述待激活应用的应用注册表项中的当前存储地址中的至少一个地址是否属于所述运行介质的地址段,如果是,则执行步骤a6;如果不是执行步骤a7;

a6、获取所述待激活应用的代码段在所述运行介质中的基址,将所述待激活应用的应用注册表项中的当前运行地址修改为所述待激活应用的代码段在所述运行介质的基址,所述待激活应用的代码段从所述运行介质的基址开始取址运行,并执行步骤a8;

a7、为所述待激活应用的代码段分配在所述运行介质的存储空间,获得所述待激活应用的代码段的第四基址,将所述待激活应用的代码段存储至所述运行介质中,其中,所述第四基址为所述待激活应用的代码段在所述运行介质的基址;将所述待激活应用的应用注册表项中的当前运行地址修改为所述第四基址,并在所述状态待切换应用的应用注册表项中的当前存储地址中添加所述第四基址,将所述待激活应用的代码段从所述第四基址开始取址运行,执行步骤a8;

a8、获取所述待激活应用的代码段中的去激活方法的相对地址,将所述待激活应用的应用注册表项中的当前运行地址加上所述去激活方法的相对地址计算得到所述去激活方法的绝对地址,从所述去激活方法的绝对地址开始对所述去激活方法取址运行,去激活当前处于激活态的应用;

a9、获取所述待激活应用的代码段中的激活方法的相对地址,将所述待激活应用的应用注册表项中的当前运行地址加上所述激活方法的相对地址计算得到所述激活方法的绝对地址,从所述激活方法的绝对地址开始对所述激活方法取址运行,激活所述待激活应用。

可选的,在激活所述待激活应用之后,所述方法还包括:

所述虚拟机接收到应用去激活指令,所述应用去激活指令中至少包括:待去激活应用的标识信息;

根据所述待去激活应用的标识信息获取所述待去激活应用的应用注册表项;在获取到所述待去激活应用的应用注册表项的情况下,根据所述去激活应用的类型、运行速度需求或者用户输入的应用删除请求,判断是否需要将所述待去激活应用的中间码文件删除,如果需要,则删除所述待去激活应用的中间码文件的数据以及所述待去激活应用的应用注册表项,并获取所述待去激活应用的应用注册表项中的当前存储地址,删除所述待去激活应用的应用注册表项中的当前存储地址指向的代码段;如果不需要,则将所述全局变量中所述待去激活应用的状态置为非激活态。

可选的,在激活所述待激活应用之后,所述方法还包括:

所述虚拟机接收到应用操作指令,并获取处于激活态的应用的应用注册表项,并从所述处于激活态的应用的应用注册表项中获取所述处于激活态的应用的代码段的第五基址,其中,所述第五基址为所述处于激活态的应用的代码段的当前运行地址;

所述虚拟机获取所述处于激活态的应用的代码段中所述应用操作指令对应的方法的相对地址;

所述虚拟机将所述第五基址加上所述应用操作指令对应的方法的相对地址计算得到所述应用操作指令对应的方法的绝对地址,从所述应用操作指令对应的方法的绝对地址开始对所述应用操作指令对应的方法取址运行,完成所述应用操作指令对应的操作。

本发明一方面提供了一种智能卡,至少包括:虚拟机、片内flash,还包括:片外flash,其中:

所述虚拟机包括:接收模块、命令分发模块、下载模块、应用注册表维护模块、状态切换模块、存储管理模块和通信模块,其中:

所述接收模块,用于接收下载指令,并将所述下载指令发送至所述命令分发模块;

所述命令分发模块,用于接收所述接收模块发送的下载指令,并触发所述下载模块执行相应的操作;

所述下载模块,用于获取待加载应用的中间码文件,所述中间码文件至少包括:所述待加载应用的代码段以及所述待加载应用的代码段的第一基址,其中,所述第一基址为所述虚拟机为所述待加载应用的代码段在片内flash分配的基址;

所述应用注册表维护模块,用于生成所述待加载应用的应用注册表项,所述应用注册表项至少包括:所述待加载应用的标识信息、所述待加载应用的代码段的当前运行地址以及当前存储地址,其中,所述当前运行地址为所述第一基址,所述当前存储地址包括所述第一基址;

所述状态切换模块,用于根据所述待加载应用的类型、运行速度需求或者用户输入的搬移请求,判断是否需要将存储于所述片内flash的所述待加载应用的代码段进行搬移,在需要搬移的情况下,通过所述存储管理模块为所述待加载应用的代码段分配在所述片外flash的存储空间,获得所述待加载应用的代码段的第二基址,将存储所述待加载应用的代码段的存储指令发送至所述通信模块,将所述当前运行地址修改为所述第二基址,其中,所述第二基址为所述待加载应用的代码段在所述片外flash的基址;

所述存储管理模块,用于为所述待加载应用的代码段分配在所述片外flash的存储空间;

所述通信模块,用于将所述存储指令发送至所述片外flash;

所述片外flash,用于在接收到所述存储指令后,将所述待加载应用的代码段存储于所述片外flash。

可选的,所述虚拟机还包括:安装模块;其中:

所述接收模块,还用于接收安装指令,并将所述安装指令发送至所述命令分发模块;

所述命令分发模块,还用于接收所述接收模块发送的所述安装指令,并触发所述安装模块执行相应的操作;

所述安装模块,用于获取所述待加载应用的代码段中的安装方法的相对地址,将所述代码段的基址加上所述安装方法的相对地址计算得到所述安装方法的绝对地址,从所述安装方法的绝对地址开始对所述安装方法取址运行,在所述片内flash中创建所述待加载应用的应用实例,并在所述应用注册表项中添加所述待加载应用的应用实例;

其中,在所述代码段存储于所述片内flash的情况下,所述代码段的基址为所述第一基址;在所述代码段存储于所述片外flash的情况下,所述代码段的基址为所述第二基址。

可选的,所述状态切换模块,还用于将删除所述待加载应用的代码段的删除指令发送至所述通信模块;

所述通信模块,还用于将所述删除指令发送至所述片内flash;

所述片内flash,用于在接收到所述删除指令后,删除存储于所述片内flash的所述待加载应用的代码段。

可选的,所述智能卡还包括随机存取存储器ram;其中:

所述接收模块,还用于接收状态切换指令,并将所述状态切换指令发送至所述命令分发模块;所述状态切换指令中至少包括:状态待切换应用的标识信息以及运行所述状态待切换应用的运行介质;所述运行介质包括以下之一:所述ram、所述片内flash和所述片外flash;

所述命令分发模块,用于接收所述接收模块发送的所述状态切换指令,并触发所述状态切换模块执行相应的操作;

所述状态切换模块,还用于根据所述状态待切换应用的标识信息获取所述状态待切换应用的应用注册表项;在获取到所述状态待切换应用的应用注册表项的情况下,判断所述状态待切换应用的应用注册表项中的当前运行地址是否属于所述运行介质的地址段,如果不是,则判断所述状态待切换应用的应用注册表项中的当前存储地址中的至少一个地址是否属于所述运行介质的地址段,如果不是,为所述状态待切换应用的中间文件码的代码段分配在所述运行介质的存储空间,获得所述状态待切换应用的代码段的第三基址,将存储所述状态待切换应用的代码段的存储指令发送至所述通信模块;将所述状态待切换应用的应用注册表项中的当前运行地址修改为所述第三基址,并在所述状态待切换应用的应用注册表项中的当前存储地址中添加所述第三基址,其中,所述第三基址为所述状态待切换应用的代码段在所述运行介质的基址;

所述通信模块,还用于将所述存储所述状态待切换应用的代码段的存储指令发送至所述运行介质中;

在所述运行介质为所述ram的情况下,所述ram,用于在接收到所述存储所述状态待切换应用的代码段的存储指令后,将所述状态待切换应用的代码段存储至所述第三基址指向的所述ram中的存储空间;

在所述运行介质为所述片内flash的情况下,所述片内flash,用于在接收到所述存储所述状态待切换应用的代码段的存储指令后,将所述状态待切换应用的代码段存储至所述第三基址指向的所述片内flash中的存储空间;

在所述运行介质为所述片外flash的情况下,所述片外flash,用于在接收到所述存储所述状态待切换应用的代码段的存储指令后,将所述状态待切换应用的代码段存储至所述第三基址指向的所述片外flash中的存储空间。

可选的,所述智能卡还包括随机存取存储器ram,所述虚拟机还包括:激活/去激活模块;其中:

所述接收模块,还用于接收应用激活指令,将所述应用激活指令发送至所述命令分发模块;其中,所述应用激活指令中至少包括:待激活应用的标识信息,以及运行所述待激活应用的运行介质;所述运行介质包括以下之一:所述ram、所述片内flash和所述片外flash;

所述命令分发模块,用于接收所述接收模块发送的所述应用激活指令,并触发所述激活/去激活模块执行相应的操作;

所述激活/去激活模块,还用于根据所述待激活应用的标识信息获取所述待激活应用的应用注册表项;在获取到所述待激活应用的应用注册表项的情况下,在系统全局变量中将所述待激活应用的状态置为激活态;判断所述待激活应用的应用注册表项中的当前运行地址是否属于所述运行介质的地址段,如果是,则获取所述待激活应用的代码段中的去激活方法的相对地址,将所述待激活应用的应用注册表项中的当前运行地址加上所述去激活方法的相对地址计算得到所述去激活方法的绝对地址,从所述去激活方法的绝对地址开始对所述去激活方法取址运行,去激活当前处于激活态的应用;并获取所述待激活应用的代码段中的激活方法的相对地址,将所述待激活应用的应用注册表项中的当前运行地址加上所述激活方法的相对地址计算得到所述激活方法的绝对地址,从所述激活方法的绝对地址开始对所述激活方法取址运行,激活所述待激活应用;如果不是,则判断所述待激活应用的应用注册表项中的当前存储地址中的至少一个地址是否属于所述运行介质的地址段,如果是,则获取所述待激活应用的代码段在所述运行介质中的基址,将所述待激活应用的应用注册表项中的当前运行地址修改为所述待激活应用的代码段在所述运行介质的基址,所述待激活应用的代码段从所述运行介质的基址开始取址运行,并执行激活流程;如果不是,则为所述待激活应用的代码段分配在所述运行介质的存储空间,获得所述待激活应用的代码段的第四基址,将存储所述待激活应用的代码段的存储指令发送至所述通信模块,将所述待激活应用的应用注册表项中的当前运行地址修改为所述第四基址,将所述待激活应用的代码段从所述四基址开始取址运行,并执行激活流程;其中,所述第四基址为所述待激活应用的代码段在所述运行介质的基址,所述激活流程包括:获取所述待激活应用的代码段中的去激活方法的相对地址,将所述待激活应用的应用注册表项中的当前运行地址加上所述去激活方法的相对地址计算得到所述去激活方法的绝对地址,从所述去激活方法的绝对地址开始对所述去激活方法取址运行,去激活当前处于激活态的应用;获取所述待激活应用的代码段中的激活方法的相对地址,将所述待激活应用的应用注册表项中的当前运行地址加上所述激活方法的相对地址计算得到所述激活方法的绝对地址,从所述激活方法的绝对地址开始对所述激活方法取址运行,激活所述待激活应用。

所述通信模块,还用于将所述存储所述待激活应用的代码段的存储指令发送至所述运行介质中;

在所述运行介质为所述ram的情况下,所述ram,用于在接收到所述存储所述待激活应用的代码段的存储指令后,将所述待激活应用的代码段存储至所述第四基址指向的所述ram中的存储空间;

在所述运行介质为所述片内flash的情况下,所述片内flash,用于在接收到所述存储所述待激活应用的代码段的存储指令后,将所述待激活应用的代码段存储至所述第四基址指向的所述片内flash中的存储空间;

在所述运行介质为所述片外flash的情况下,所述片外flash用于在接收到所述存储所述待激活应用的代码段的存储指令后,将所述待激活应用的代码段存储至所述第四基址指向的所述片外flash中的存储空间。

可选的,所述接收模块,还用于接收应用去激活指令,并将所述去激活指令发送至所述命令分发模块;其中,所述应用去激活指令中至少包括:待去激活应用的标识信息;

所述命令分发模块,用于接收所述接收模块发送的所述应用去激活指令,并触发所述激活/去激活模块执行相应的操作;

所述激活/去激活模块,还用于根据所述待去激活应用的标识信息获取所述待去激活应用的应用注册表项;在获取到所述待去激活应用的应用注册表项的情况下,根据所述去激活应用的类型、运行速度需求或者用户输入的应用删除请求,判断是否需要将所述待去激活应用的中间码文件删除,如果需要,则将删除所述待去激活应用的中间码文件的数据以及所述待去激活应用的应用注册表项的数据删除指令发送至所述通信模块,并将删除所述待去激活应用的代码段的代码删除指令发送至所述通信模块;如果不需要,则将所述全局变量中所述待去激活应用的状态置为非激活态;

所述通信模块,用于将所述数据删除指令发送至所述片内flash,将所述代码删除指令发送至所述待去激活应用的应用注册表项中的当前运行地址所属地址段对应的所述运行介质;

所述片内flash,用于在接收到所述通信模块发送的数据删除指令后,删除所述待去激活应用的数据以及所述待去激活应用的应用注册表项;

在所述运行介质为所述ram的情况下,所述ram,还用于在接收到所述通信模块发送的代码删除指令后,删除所述ram中存储的所述待去激活应用的代码段;

在所述运行介质为所述片内flash的情况下,所述片内flash,还用于在接收到所述通信模块发送的代码删除指令后,删除所述片内flash中存储的所述待去激活应用的代码段;

在所述运行介质为所述片外flash的情况下,所述片内flash,还用于在接收到所述通信模块发送的代码删除指令后,删除所述片内flash中存储的所述待去激活应用的代码段。

可选的,所述虚拟机还包括:应用解释器模块,其中:

所述接收模块,还用于接收应用操作指令,并将所述应用操作指令发送至所述命令分发模块;

所述命令分发模块,用于接收所述接收模块发送的所述应用操作指令,并触发所述应用解释器模块执行相应的操作;

所述应用解释器模块,还用于获取处于激活态的应用的应用注册表项;获取所述处于激活态的应用的代码段中所述应用操作指令对应的方法的相对地址,并从所述处于激活态的应用的应用注册表项中获取所述处于激活态的应用的代码段的第五基址;将所述第五基址加上所述应用操作指令对应的方法的相对地址计算得到所述应用操作指令对应的方法的绝对地址,从所述应用操作指令对应的方法的绝对地址开始对所述应用操作指令对应的方法取址运行,完成所述应用操作指令对应的操作;其中,所述第五基址为所述处于激活态的应用的代码段的当前运行地址。

由上述本发明提供的技术方案可以看出,本发明提供了一种智能卡的应用加载运行方法及智能卡,在智能卡的原有存储器(片内flash和ram)的基础上,增加了片外flash,将中间码文件的代码段存储于片外flash中,从而可以对智能卡的原有存储空间进行了扩展。此外,在扩容的基础上,本实施例中的虚拟机可以在兼容现有虚拟机的运行方式的情况下实现了对应用的下载、安装、激活/去激活,以及应用被激活后具体的应用操作的调用。。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。

图1为本发明实施例1提供的智能卡的结构示意图;

图2为本发明实施例1提供的虚拟机的结构示意图;

图3为本发明实施例2提供的智能卡的应用加载运行方法的流程图。

具体实施方式

下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。

在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或数量或位置。

在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

下面将结合附图对本发明实施例作进一步地详细描述。

实施例1

本实施例提供了一种智能卡。图1是本发明实施例中的该智能卡的结构框图。如图1所示,该智能卡100包括:虚拟机10、片内flash20、ram30以及片外flash40。其中,本实施例中的虚拟机10可以用来管理智能卡的系统应用以及智能卡的多个app应用的加载以及运行,例如可以为java卡虚拟机。虚拟机10将从外部设备下载到智能卡的类文件(class文件)进行转换生成字节码文件(.cap文件),并对字节码文件进行动态链接转换为中间码文件,并将这些应用的中间码文件存储于相应的存储器中。片内flash20、ram30和片外flash40均可以存储中间码文件的代码段(例如,系统应用的代码段以及app应用的代码段),并对代码段的方法进行取址运行。本发明相对于现有技术而言,在智能卡的原有存储器(片内flash和ram)的基础上,增加了片外flash,这样就可以将中间码文件的代码段存储于片外flash中,从而可以对智能卡的原有存储空间进行了扩展,进而提高智能卡处理业务的能力。

作为本实施例的一种可选实施方式,如图1所示,该智能卡还包括:eeprom50,用于存储app应用的数据部分。其中,eeprom(electricallyerasableprogrammableread-onlymemory,电擦除只读存储器)是以字单位来进行数据的删除的非易失性存储器。本实施例中的智能卡可以包含多个app应用,即可以加载和管理多个app应用,例如,银行卡应用、公交卡应用、门禁应用、第三方会员卡应用等等。其中,一个app应用的中间码文件包括代码段和数据部分,本实施例中可以将发生改写可能的数据部分存储于eeprom50,将不会发生改写可能的代码段存储于缓存(即片内flash20、ram30或片外flash40)中。因此,程序中的改写处理在缓存(即片内flash20、ram30或片外flash40)中不发生,只在eeprom中发生。与在删除的存储量大的缓存(即片内flash20、ram30或片外flash40)中进行程序的改写处理相比,在删除的存储量小的eeprom50中进行程序的改写处理所需的处理时间更短,可以大大缩短改写处理所必要的处理时间。

本实施例中,虚拟机在加载运行应用的代码段时,可以对缓存(即片内flash、ram和片外flash)进行读写,可以理解的是,在虚拟机与各个缓存之间设有通信接口(图上未示出),通过该通信接口来传输虚拟机与各个缓存之间的交互信息。此外,如图1所示,智能卡还包括一个对外接口60,用于把从外部设备下载的类文件传输至虚拟机10。其中,外部设备可以包括但不限于:pc、pos机、读卡器、移动终端、ipad、智能设备(如智能可穿戴设备)等,只要是可以对智能卡进行读写的电子设备均在本发明保护的范围内。该对外接口60可以为有线接口或无线接口,其中,有线接口例如可以为串口、usb接口等;无线接口例如可以为wifi接口、蓝牙接口、nfc接口等。

此外,作为本实施例的一种可选实施方式,该智能卡还包括:位于片外flash40与智能卡原有的缓存(即片内flash20和ram30)之间的加解密单元,用于对片外flash40和智能卡原有的缓存之间传输的数据进行加解密,以保证片外flash与智能卡原缓存之间数据传输的安全性。例如,将片内flash20中存储的系统应用的中间码文件的代码段搬移到片外flash40时,加解密单元可以对该代码段加密,并将加密的代码段传输至片外flash40,片外flash40对该加密的代码段解密得到原代码段并存储。又例如,当需要将片外flash40中存储的app应用(如公交卡的应用)的中间码文件的代码段在片内运行,则需要将该代码段先搬入片内flash20中,再在片内flash20中对该代码段中的方法取址运行。在搬移代码段时,片外flash40先对该代码段加密,再将加密的代码段传输至加解密单元,加解密单元对该加密的代码段进行解密,将解密后的原代码段存入片内flash20。其中,片外flash与加解密单元可以预设或协商加解密的密钥,并各自保存。

下面本文将着重对本实施例提供的智能卡100中的虚拟机10的结构以及虚拟机10的各个模块的功能进行详细描述,并从虚拟机10的角度对增加了片外flash的智能卡如何完成安装加载运行一个应用的过程进行详细描述。

如图2所示,本实施例提供了一种虚拟机10,具体包括:接收模块101、命令分发模块102、下载模块103、应用注册表维护模块104、状态切换模块105、存储管理模块106和通信模块107。其中,接收模块101,用于接收下载指令,并将下载指令发送至命令分发模块102;命令分发模块102,用于接收所述接收模块101发送的下载指令,并触发下载模块103执行相应的操作;下载模块103,用于获取待加载应用的中间码文件,中间码文件至少包括:待加载应用的代码段以及待加载应用的代码段的第一基址,其中,第一基址为虚拟机为待加载应用的代码段在片内flash20分配的基址;应用注册表维护模块104,用于生成待加载应用的应用注册表项,所述应用注册表项至少包括:待加载应用的标识信息、待加载应用的代码段的当前运行地址以及当前存储地址,其中,所述待加载应用的代码段的当前运行地址为第一基址,所述待加载应用的代码段的当前存储地址包括第一基址;状态切换模块105,用于根据待加载应用的类型、运行速度需求或者用户输入的搬移请求,判断是否需要将存储于片内flash20的待加载应用的代码段进行搬移,在需要搬移的情况下,通过存储管理模块106为待加载应用的代码段分配在片外flash的存储空间,获得待加载应用的代码段的第二基址,将存储待加载应用的代码段的存储指令发送至通信模块107,将所述待加载应用的代码段的当前运行地址修改为第二基址,其中,第二基址为待加载应用的代码段在片外flash的基址;存储管理模块106,用于为待加载应用的代码段分配在片外flash的存储空间;通信模块107,用于将存储指令发送至片外flash;片外flash40,用于在接收到存储指令后,将待加载应用的代码段存储于片外flash。

本实施例中,在智能卡原有缓存的基础上增加了片外flash,虚拟机将存储于片内flash的待加载应用的代码段搬移到片外flash,从而实现了智能卡的扩容,进而可以提高智能卡处理业务的能力。

本实施例中,接收模块101用于接收操作指令,例如,下载指令、安装指令、状态切换指令、删除指令、应用激活/去激活指令、app应用操作指令(如签名、数据读取等)等等,以触发相应的模块执行操作指令指示的操作。其中,除了app应用操作指令之外,前几个操作指令都可以称为系统操作指令。除了可以接收操作指令之外,接收模块101还可以从智能卡的对外接口60接收从外部设备下载到智能卡的类文件(class文件),并传输至下载模块103;下载模块103用于获取待加载应用的中间码文件,具体包括:对所述待加载应用的类文件进行转换生成字节码文件(.cap文件),并对字节码文件进行动态链接转换为所述中间码文件。由于各个不同厂家的虚拟机不同,所以,通过对下载的类文件进行转换以及动态链接生成适配当前虚拟机的中间码文件,从而实现对不同虚拟机的兼容。

在本实施例中,无论是系统应用还是app应用的中间码文件都是由代码段和数据部分组成的。其中,代码段包含多个方法,例如安装方法、激活方法、去激活方法、删除方法、签名方法、数据读取方法等等。接收模块101接收到对应的操作指令,触发相应的模块对该操作指令对应的方法取址运行。本实施例中,由于代码段可能会在智能卡的几个缓存(片内flash、ram以及片外flash)中进行存储,如果采用现有的绝对地址的方式对代码段中的方法取址运行,就需要为每个缓存内代码段中的方法都分配对应的绝对地址,那么,不仅分配绝对地址的工作量很大,绝对地址的数量很多,而且,在取址时查找绝对地址的复杂度也会提高,相应的,方法的取址运行的速度就会降低。因此,为了便于对代码段中的方法快速简单的取址,本实施例采用了“基址+相对地址”的方式对代码段中的方法进行取址。其中,基址是指一个应用的中间码文件的代码段存储于缓存时为该代码段分配的起始位置。一个代码段在一个缓存中只有一个基址,在不同的缓存中分配的基址可能不同。例如,同一个代码段,在片内flash内为其分配的基址为第一基址,例如为0x8000,在片外flash中为其分配的基址为第二基址,例如为0x800000;在ram中为其分配的基址为第三基址,例如为0x200000。另外,相对地址是指代码段中的方法相对于起始位置的偏移量,该偏移量是由智能卡系统根据代码段中各个方法所占空间的大小为各个方法依次配置的偏移量。例如,假设起始位置为0000,第一个方法的大小为1k,则第一个方法的相对地址为0x0400,第二个方法为2k,则第二个方法的相对地址为0x0c00因此,在本实施例中,一个代码段中的方法的相对地址是系统预先配置好的,相对地址只是相对于起始位置的偏移量,独立与缓存分配的基址,也就是说,在不同的缓存中,方法的偏移量不会发生改变。对代码段中的方法取址运行时,先找到该方法所属的代码段的起始位置,指针指向该起始位置,并从开起始位置开始下移该方法的偏移量(相对地址),找到该方法的起始位置,从该方法的起始位置读取程序语句。通过“基址+相对地址”的方式对代码段中的方法进行取址,可以大大减少地址分配的工作量,取址也更方便快速,进而降低了取址的复杂度,提高了一个方法的取址运行的速度。

本实施例中,应用注册表维护模块104用于维护注册表,其中,注册表包括多个注册表项。每个注册表项对应一个应用,记录该应用的相关信息,例如,该应用的标识信息aid,当前运行地址、当前存储地址,以及安装信息等等。其中,aid标识信息用来唯一标识一个应用;当前运行地址和当前存储地址都是指基址,该基址属于哪个缓存的地址段,该应用的代码段就在哪个缓存中运行以及存储,当前运行地址和当前存储地址在默认情况下应该是一致的,即存在哪就在哪运行。当然,代码段也有可能存储在多个缓存中,所以,当前存储地址可以包含代码段在多个缓存中的基址,即当前存储地址可以为多个,而当前运行地址是指示该代码段实际在哪个缓存中运行的,应用的代码段只可能在一个缓存中运行,所以,当前运行地址只有一个。本实施例中,虚拟机将从外部设备下载的应用的代码段先存储在片内flash中,第一基址是该待加载应用的代码段在片内flash分配的地址。在需要搬移的情况下,将该待加载应用的代码段存储至片外flash,第二基址是该待加载应用的代码段在片外flash分配的地址。

在下载模块103对下载的所述待加载应用的类文件进行转换生成字节码文件(.cap文件),并对字节码文件进行动态链接转换为所述中间码文件之后,状态切换模块105就可以根据所述待加载应用的类型、运行速度需求或者用户输入的搬移请求,判断是否需要将存储于所述片内flash的所述待加载应用的代码段进行搬移。可以这样理解,同一个代码段存储于ram、片内flash和片外flash的运行速度依次降低。此外,为了扩容,如果将代码段搬移到片外flash,当需要在片内flash运行而片内没有该代码段时,就需要先将片外flash存储的代码段先搬移回片内flash,然后,再在片内flash取址运行,在这样的场景中,应用的运行速度会进一步降低。因此,在扩容的基础上,即在将片内flash中存储的代码段搬移到片外flash的基础上,为了进一步提高智能卡系统的运行速度以及响应速度,本实施例可以有选择的进行搬移,即在需要搬移的情况下,执行搬移操作,由此,在保证智能卡扩容的基础上,从整体上提高系统的运行速度和响应速度,以给用户良好的使用体验。

本实施例中,待加载应用的类型例如可以为适应有线接口运行的应用以及适应无线接口运行的应用,可以将适应无线接口运行的应用配置为不进行搬移,而将适应有线接口运行的应用配置为进行搬移。又例如,适应无线接口运行的应用可以为在nfc、蓝牙或wifi状态下运行的应用,由于nfc应用需要较短的处理时间,因此,可以将在nfc状态下运行的应用配置为不进行搬移。由此,可以将需要较短处理时间的应用存储于片内flash,从而提高智能卡的整个系统的运行速度以及响应速度,进而提高用户体验。此外,本实施例中,待加载应用的运行速度需求即为配置应用的优先级,使得优先级高的应用的运行速度最快,处理时间较短。例如,可以将常用的应用或者重要的应用配置为不搬移,将不经常用到的应用配置为搬移。这样,使用次数较多的应用在片内运行的次数也较多,由此也可以达到提高智能卡的整个系统的运行速度以及响应速度,进而提高用户体验的效果。此外,本实施例中,在下载模块103获取待加载应用的中间码文件后,状态切换模块105还用于提示用户对当前待加载应用是否进行搬移的提示信息,例如,可以通过声音播报或者显示屏显示,在接收到用户输入的搬移请求后,执行搬移操作。

本实施例中,存储管理模块106用于对各个应用的代码段的存储空间进行分配、管理和记录。通信模块107是虚拟机与各个缓存的通信接口,用于将虚拟机发出的指令输出至各个缓存。片外flash40在接收到通信模块107输出的存储指令后,从片内flash读出所述待加载应用的代码段,并写入片内flash40。作为本实施例的一种可选实施方式,从片内flash读出的所述待加载应用的代码段可以先输出至智能卡的加解密单元,在经过加解密单元的加密后输出至片外flash,片外flash将加密后的代码段解密后再存入存储管理模块106分配的第二基址指向的存储位置。由此,可以保证将代码段存入片外flash的过程中不会被非法劫持,保证了片内flash与片外flash的传输安全。

作为一种可选的实施方式,状态切换模块105,还用于将删除待加载应用的代码段的删除指令发送至通信模块107;通信模块107,还用于将删除指令发送至片内flash20;片内flash20,用于在接收到删除指令后,删除存储于片内flash20的待加载应用的代码段。本实施例中,“搬移”具体是指对代码段的拷贝,虚拟机将片内的flash中存储的代码段进行搬移就是将片内的flash中存储的代码段先拷贝,然后存入片外flash中。本实施例中,在代码段搬移之后,可以将片内flash中存储的代码段删除,当然也可以不删除。需要说明的是,本实施例中,虚拟机从外部设备下载的应用的中间码文件的代码段均是先存储于片内flash,然后才可以进行搬移。因此,如果在拷贝代码段后,删除片内flash中存储的代码段,则智能卡可以释放出更多的存储空间,可以为后续从外部设备下载的应用的中间码文件的代码段提供更多的存储空间。但是,如果不删除片内flash中存储的代码段,虽然不能释放出更多的存储空间,在需要在片内flash取址运行的情况下,可以直接对存储的该代码段中的方法进行取址运行,而无需再从片外flash拷贝该代码段,可以提高智能卡的应用的运行速度。因此,无论删除或不删除片内flash中存储的代码段都有各自的有益之处,可以根据设计人员的需要进行相应的配置。

作为一种可选的实施方式,虚拟机还包括:安装模块108;其中:接收模块101,还用于接收安装指令,并将安装指令发送至命令分发模块102;命令分发模块102,还用于接收接收模块101发送的安装指令,并触发安装模块108执行相应的操作;安装模块108,用于获取待加载应用的代码段中的安装方法的相对地址,将该代码段的基址加上安装方法的相对地址计算得到安装方法的绝对地址,从安装方法的绝对地址开始对安装方法取址运行,在片内flash中创建待加载应用的应用实例,并在应用注册表项中添加待加载应用的应用实例;其中,在待加载应用的代码段存储于片内flash的情况下,该代码段的基址为第一基址;在待加载应用的代码段存储于片外flash的情况下,该代码段的基址为第二基址。本实施例中,如果状态切换模块105没有搬移待加载应用的代码段,则待加载应用的代码段的基址为第一基址,即在片内flash分配的基址;如果状态切换模块105将待加载应用的代码段搬移到片外flash,则待加载应用的代码段的基址为第二基址,即在片外flash分配的基址。通过安装模块107对安全方法的取址运行,可以在智能卡上安装完成该待加载应用。

在本实施例中,智能卡可以包含多个应用,在具体实施时,对于每个应用的下载、安装以及搬移都可以参照上文描述的方式进行。

在具体实施时,作为一种可选的实施方式,可以切换各个应用的实际运行介质,例如,一个app应用的应用注册表项中记录的当前存储地址和当前运行地址都是片外flash的第二基址,为了提高运行速度,可以将在片外flash中存储的该app应用的中间码文件的代码段,在片内flash或ram中运行。具体地,在本实施例中,接收模块101,还用于接收状态切换指令,并将状态切换指令发送至命令分发模块102;其中,状态切换指令中至少包括:状态待切换应用的标识信息以及运行状态待切换应用的运行介质;该运行介质包括以下之一:ram、片内flash和片外flash。命令分发模块102,还用于接收接收模块101发送的状态切换指令,并触发状态切换模块105执行相应的操作。根据该状态切换指令,虚拟机就可以将该状态待切换应用切换到该运行介质中进行取址运行。状态切换模块105,还用于根据状态待切换应用的标识信息获取状态待切换应用的应用注册表项;在获取到状态待切换应用的应用注册表项的情况下,判断状态待切换应用的应用注册表项中的当前运行地址是否属于状态切换命令中的运行介质的地址段,通过该判断可以确定是否需要对该状态待切换应用的运行介质进行切换,如果属于,则说明状态切换命令中的运行介质就是状态待切换应用当前的运行介质,无需切换运行介质;如果不属于,则说明需要将状态待切换应用当前的运行介质切换为该状态切换命令中的运行介质。如果需要切换运行介质,还需要进一步判断:该状态待切换应用的中间码文件的代码段是否已经存储于状态切换命令中的运行介质。因此,具体实施时,如果判断结果为不属于状态切换命令中的运行介质的地址段,则判断状态待切换应用的应用注册表项中的当前存储地址中的至少一个地址是否属于该状态切换命令中的运行介质的地址段,通过该判断可以确定是否已经为该状态待切换应用的中间码文件的代码段在该状态切换命令中的运行介质中分配过存储空间,如果至少有一个地址属于状态切换命令中的运行介质的地址段,则说明虚拟机已经为该应用在该运行介质中分配过存储空间,不需要再分配地址了;如果所有的地址都不属于该状态切换命令中的运行介质的地址段,则说明虚拟机还没有为该状态待切换应用在该运行介质中分配存储空间。因此,如果判断结果是否定的,则为状态待切换应用的中间文件码的代码段分配在运行介质的存储空间,获得状态待切换应用的代码段的第三基址,将存储状态待切换应用的代码段的存储指令发送至通信模块107;将状态待切换应用的应用注册表项中的当前运行地址修改为第三基址,并在状态待切换应用的应用注册表项中的当前存储地址中添加第三基址,其中,第三基址为状态待切换应用的代码段在运行介质的基址;通信模块107,还用于将存储状态待切换应用的代码段的存储指令发送至该运行介质中;在运行介质为ram30的情况下,ram30,用于在接收到存储状态待切换应用的代码段的存储指令后,将状态待切换应用的代码段存储至第三基址指向的ram30中的存储空间;在运行介质为片内flash20的情况下,片内flash20,用于在接收到存储状态待切换应用的代码段的存储指令后,将状态待切换应用的代码段存储至第三基址指向的片内flash20中的存储空间;在运行介质为片外flash40的情况下,片外flash40,用于在接收到存储状态待切换应用的代码段的存储指令后,将状态待切换应用的代码段存储至第三基址指向的片外flash40中的存储空间。由此,在对智能卡扩容增加了片外flash这一运行介质的情况下,通过状态切换指令可以将状态待切换应用的运行介质进行切换,特别是将在片外flash存储且运行的代码段切换到片内flash或ram中运行时,可以提高应用的运行速度。

作为一种可选的实施方式,虚拟机还包括:激活/去激活模块109,用于执行激活或去激活操作;具体地,在本实施例中,接收模块101,还用于接收应用激活指令,将应用激活指令发送至命令分发模块102;其中,应用激活指令中至少包括:待激活应用的标识信息,以及运行待激活应用的运行介质;运行介质包括以下之一:ram、片内flash和片外flash;命令分发模块102,用于接收接收模块101发送的应用激活指令,并触发激活/去激活模块执行相应的操作;根据该应用激活指令,虚拟机就可以将该已安装的应用进行激活,应用被激活后就可以供用户使用。激活/去激活模块109,还用于根据待激活应用的标识信息获取待激活应用的应用注册表项;在获取到待激活应用的应用注册表项的情况下,在系统全局变量中将待激活应用的状态置为激活态;判断待激活应用的应用注册表项中的当前运行地址是否属于该应用激活指令的运行介质的地址段,如果是,则执行激活流程,即需要先调用去激活方法以去激活当前处于激活态的应用,然后调用激活方法以激活待激活应用,具体地,获取待激活应用的代码段中的去激活方法的相对地址,将待激活应用的应用注册表项中的当前运行地址加上去激活方法的相对地址计算得到去激活方法的绝对地址,从去激活方法的绝对地址开始对去激活方法取址运行,去激活当前处于激活态的应用;并获取待激活应用的代码段中的激活方法的相对地址,将待激活应用的应用注册表项中的当前运行地址加上激活方法的相对地址计算得到激活方法的绝对地址,从激活方法的绝对地址开始对激活方法取址运行,激活待激活应用;如果不是,则判断待激活应用的应用注册表项中的当前存储地址中的至少一个地址是否属于运行介质的地址段,通过该判断可以确定该待激活应用是否存储于该应用激活指令的运行介质中,如果是,则无需分配空间,如果不是,则需要为该待激活应用的中间码文件的代码段在该应用激活指令的运行介质中分配存储空间。因此,具体地,如果至少有一个地址属于应用激活命令中的运行介质的地址段,则获取待激活应用的代码段在运行介质中的基址,将待激活应用的应用注册表项中的当前运行地址修改为待激活应用的代码段在运行介质的基址,待激活应用的代码段从运行介质的基址开始取址运行,并执行激活流程,具体可参见上述激活流程的描述;如果没有一个地址属于状态切换命令中的运行介质的地址段,则为待激活应用的代码段分配在运行介质的存储空间,获得待激活应用的代码段的第四基址,将存储待激活应用的代码段的存储指令发送至通信模块,将待激活应用的应用注册表项中的当前运行地址修改为第四基址,将待激活应用的代码段从四基址开始取址运行,并执行激活流程,具体可参见上述激活流程的描述;其中,第四基址为待激活应用的代码段在运行介质的基址。通信模块107,还用于将存储待激活应用的代码段的存储指令发送至运行介质中;在运行介质为ram30的情况下,ram30,用于在接收到存储待激活应用的代码段的存储指令后,将待激活应用的代码段存储至第四基址指向的ram中的存储空间;在运行介质为片内flash的情况下,片内flash20,用于在接收到存储待激活应用的代码段的存储指令后,将待激活应用的代码段存储至第四基址指向的片内flash中的存储空间;在运行介质为片外flash的情况下,片外flash40用于在接收到存储待激活应用的代码段的存储指令后,将待激活应用的代码段存储至第四基址指向的片外flash中的存储空间。由此,在对智能卡扩容增加了片外flash这一运行介质的情况下,通过应用激活指令虚拟机实现了将已安装的应用的激活操作。

作为一种可选的实施方式,接收模块101,还用于接收应用去激活指令,并将去激活指令发送至命令分发模块102;其中,应用去激活指令中至少包括:待去激活应用的标识信息;命令分发模块102,用于接收接收模块101发送的应用去激活指令,并触发激活/去激活模块执行相应的操作;激活/去激活模块109,还用于根据待去激活应用的标识信息获取待去激活应用的应用注册表项;在获取到待去激活应用的应用注册表项的情况下,根据去激活应用的类型、运行速度需求或者用户输入的应用删除请求,判断是否需要将待去激活应用的中间码文件删除,如果需要,则将删除待去激活应用的中间码文件的数据以及待去激活应用的应用注册表项的数据删除指令发送至通信模块,并将删除待去激活应用的代码段的代码删除指令发送至通信模块;如果不需要,则将全局变量中待去激活应用的状态置为非激活态;通信模块107,用于将数据删除指令发送至片内flash20,将代码删除指令发送至待去激活应用的应用注册表项中的当前运行地址所属地址段对应的运行介质;片内flash20,用于在接收到通信模块发送的数据删除指令后,删除待去激活应用的数据以及待去激活应用的应用注册表项;在运行介质为ram的情况下,ram30,还用于在接收到通信模块发送的代码删除指令后,删除ram中存储的待去激活应用的代码段;在运行介质为片内flash的情况下,片内flash20,还用于在接收到通信模块发送的代码删除指令后,删除片内flash中存储的待去激活应用的代码段;在运行介质为片外flash的情况下,片内flash40,还用于在接收到通信模块发送的代码删除指令后,删除片内flash中存储的待去激活应用的代码段。

在本实施例中,在接收到去激活指令后,激活/去激活模块109可以删除也可以不删除待去激活应用的中间码文件。与状态切换模块105进行是否搬移的判断类似,为了在保证智能卡扩容的基础上,从整体上提高系统的运行速度和响应速度,以给用户良好的使用体验,本实施例中,作为一种可选的实施方式,激活/去激活模块109可以根据去激活应用的类型、运行速度需求或者用户输入的去激活请求,判断是否需要将待去激活应用的中间码文件删除。具体地,例如,可以将占存储空间较小的、处理时间较短的、经常使用或比较重要的应用的中间码文件配置为去激活时不删除,这样,就也可以达到提高智能卡的整个系统的运行速度以及响应速度,进而提高用户体验的效果。此外,本实施例中,在接收到去激活指令后,激活/去激活模块109还用于提示用户对待去激活应用是否进行删除的提示信息,例如,可以通过声音播报或者显示屏显示,在接收到用户输入的应用删除请求后,执行删除操作。

作为一种可选的实施方式,虚拟机还包括:应用解释器模块110,其中:接收模块101,还用于接收应用操作指令,并将应用操作指令发送至命令分发模块102;命令分发模块102,用于接收接收模块101发送的应用操作指令,并触发应用解释器模块110执行相应的操作。其中,应用操作指令是指各个app应用而非系统应用的具体相应操作对应的指令,例如,数字签名指令、调用私钥指令、写入数据指令等等操作指令。在应用被激活后,虚拟机就可以根据应用操作指令完成处于激活态的应用的具体的应用操作。应用解释器模块110,还用于获取处于激活态的应用的应用注册表项;获取处于激活态的应用的代码段中应用操作指令对应的方法的相对地址,并从处于激活态的应用的应用注册表项中获取处于激活态的应用的代码段的第五基址;将第五基址加上应用操作指令对应的方法的相对地址计算得到应用操作指令对应的方法的绝对地址,从应用操作指令对应的方法的绝对地址开始对应用操作指令对应的方法取址运行,完成应用操作指令对应的操作;其中,第五基址为处于激活态的应用的代码段的当前运行地址。

本实施例提供的智能卡,在原有存储器(片内flash和ram)的基础上,增加了片外flash,这样就可以将中间码文件的代码段存储于片外flash中,从而可以对智能卡的原有存储空间进行了扩展。此外,在扩容的基础上,本实施例中的虚拟机可以在兼容现有虚拟机的运行方式的情况下实现了对应用的下载、安装、激活/去激活,以及应用被激活后具体的应用操作的调用。

实施例2

本实施例提供了一种智能卡的应用加载运行方法,该方法可以通过上述实施例1所述的智能卡以及虚拟机来实现。下面主要对本实施例提供的智能卡的应用加载运行方法的流程进行说明,其它相关内容可以参见实施例1的描述。

图3为本实施例提供的一种智能卡的应用加载运行方法的流程图。如图3所示,该方法包括以下步骤:

s101:虚拟机接收到下载指令,获取待加载应用的中间码文件,中间码文件至少包括:待加载应用的代码段以及待加载应用的代码段的第一基址,其中,第一基址为虚拟机为待加载应用的代码段在片内flash分配的基址;

其中,虚拟机获取待加载应用的中间码文件可以包括:对所述待加载应用的类文件进行转换生成字节码文件(.cap文件),并对字节码文件进行动态链接转换为所述中间码文件。由于各个不同厂家的虚拟机不同,所以,通过对下载的类文件进行转换以及动态链接生成适配当前虚拟机的中间码文件,从而实现对不同虚拟机的兼容。

s102:生成待加载应用的应用注册表项,应用注册表项至少包括:待加载应用的标识信息、待加载应用的代码段的当前运行地址以及当前存储地址,其中,当前运行地址为第一基址,当前存储地址包括第一基址;

s103:根据待加载应用的类型、运行速度需求或者用户输入的搬移请求,判断是否需要将存储于片内flash的待加载应用的代码段进行搬移;

s104:在需要搬移的情况下,为待加载应用的代码段分配在片外flash的存储空间,获得待加载应用的代码段的第二基址,将待加载应用的代码段存储至片外flash,并将当前运行地址修改为第二基址,在当前存储地址中添加第二基址,其中,第二基址为待加载应用的代码段在片外flash的基址。

本实施例中,在智能卡原有缓存的基础上增加了片外flash,在需要搬移的情况下,虚拟机将存储于片内flash的待加载应用的代码段搬移到片外flash,从而实现了智能卡的扩容,进而可以提高智能卡处理业务的能力。

在本实施例提供的上述方法中,在步骤s101中虚拟机对下载的所述待加载应用的类文件进行转换生成字节码文件(.cap文件),并对字节码文件进行动态链接转换为所述中间码文件之后,步骤s103可以根据所述待加载应用的类型、运行速度需求或者用户输入的搬移请求,判断是否需要将存储于所述片内flash的所述待加载应用的代码段进行搬移。可以这样理解,同一个代码段存储于ram、片内flash和片外flash的运行速度依次降低。此外,为了扩容,如果将代码段搬移到片外flash,当需要在片内flash运行而片内没有该代码段时,就需要先将片外flash存储的代码段先搬移回片内flash,然后,再在片内flash取址运行,在这样的场景中,应用的运行速度会进一步降低。因此,在扩容的基础上,即在将片内flash中存储的代码段搬移到片外flash的基础上,为了进一步提高智能卡系统的运行速度以及响应速度,本实施例可以有选择的进行搬移,即在需要搬移的情况下,执行搬移操作,由此,在保证智能卡扩容的基础上,从整体上提高系统的运行速度和响应速度,以给用户良好的使用体验。

本实施例中,待加载应用的类型例如可以为适应有线接口运行的应用以及适应无线接口运行的应用,可以将适应无线接口运行的应用配置为不进行搬移,而将适应有线接口运行的应用配置为进行搬移。又例如,适应无线接口运行的应用可以为在nfc、蓝牙或wifi状态下运行的应用,由于nfc应用需要较短的处理时间,因此,可以将在nfc状态下运行的应用配置为不进行搬移。由此,可以将需要较短处理时间的应用存储于片内flash,从而提高智能卡的整个系统的运行速度以及响应速度,进而提高用户体验。此外,本实施例中,待加载应用的运行速度需求即为配置应用的优先级,使得优先级高的应用的运行速度最快,处理时间较短。例如,可以将常用的应用或者重要的应用配置为不搬移,将不经常用到的应用配置为搬移。这样,使用次数较多的应用在片内运行的次数也较多,由此也可以达到提高智能卡的整个系统的运行速度以及响应速度,进而提高用户体验的效果。此外,本实施例中,在下载模块103获取待加载应用的中间码文件后,状态切换模块105还用于提示用户对当前待加载应用是否进行搬移的提示信息,例如,可以通过声音播报或者显示屏显示,在接收到用户输入的搬移请求后,执行搬移操作。

在本实施例提供的上述方法中,作为一种可选的实施方式,在将待加载应用的代码段存储至片外flash时,本实施例提供的方法还包括:删除片内flash存储的待加载应用的代码段,并将当前存储地址中的第一基址删除。本实施例中,“搬移”具体是指对代码段的拷贝,虚拟机将片内的flash中存储的代码段进行搬移就是将片内的flash中存储的代码段先拷贝,然后存入片外flash中。本实施例中,在代码段搬移之后,可以将片内flash中存储的代码段删除,当然也可以不删除。需要说明的是,本实施例中,虚拟机从外部设备下载的应用的中间码文件的代码段均是先存储于片内flash,然后才可以进行搬移。因此,如果在拷贝代码段后,删除片内flash中存储的代码段,则智能卡可以释放出更多的存储空间,可以为后续从外部设备下载的应用的中间码文件的代码段提供更多的存储空间。但是,如果不删除片内flash中存储的代码段,虽然不能释放出更多的存储空间,在需要在片内flash取址运行的情况下,可以直接对存储的该代码段中的方法进行取址运行,而无需再从片外flash拷贝该代码段,可以提高智能卡的应用的运行速度。因此,无论删除或不删除片内flash中存储的代码段都有各自的有益之处,可以根据设计人员的需要进行相应的配置。

在本实施例提供的上述方法中,作为一种可选的实施方式,在步骤s103之前,即在根据待加载应用的类型、运行速度需求或者用户输入的搬移请求,判断是否需要将存储于片内flash的待加载应用的代码段进行搬移之前,或者,在步骤s104之后,即在将待加载应用的代码段存储至片外flash之后,本实施例提供的方法还包括以下步骤:

虚拟机接收到安装指令,获取该待加载应用的代码段中的安装方法的相对地址,将代码段的基址加上安装方法的相对地址计算得到安装方法的绝对地址,从安装方法的绝对地址开始对安装方法取址运行,在片内flash中创建待加载应用的应用实例,并在应用注册表项中添加待加载应用的应用实例;其中,在代码段存储于片内flash的情况下,代码段的基址为第一基址;在代码段存储于片外flash的情况下,代码段的基址为第二基址。由此可以在智能卡上安装完成该待加载应用。

本实施例中,如果虚拟机没有搬移待加载应用的代码段,则待加载应用的代码段的基址为第一基址,即在片内flash分配的基址;如果虚拟机将待加载应用的代码段搬移到片外flash,则待加载应用的代码段的基址为第二基址,即在片外flash分配的基址。

在本实施例中,智能卡可以包含多个应用,在具体实施时,对于每个应用的下载、安装以及搬移都可以参照上文描述的方式进行。

在本实施例提供的上述方法中,作为一种可选的实施方式,在执行步骤s104之后,还可以切换各个应用的实际运行介质,例如,一个app应用的应用注册表项中记录的当前存储地址和当前运行地址都是片外flash的第二基址,为了提高运行速度,可以将在片外flash中存储的该app应用的中间码文件的代码段,在片内flash或ram中运行。具体地,在将待加载应用的代码段存储至片外flash,并将当前运行地址修改为第二基址,在当前存储地址中添加第二基址(步骤s104)之后,本实施例提供的方法还包括:虚拟机接收到状态切换指令,根据状态待切换应用的标识信息获取状态待切换应用的应用注册表项;状态切换指令中至少包括:状态待切换应用的标识信息以及运行状态待切换应用的运行介质;该运行介质包括以下之一:随机存取存储器ram、片内flash和片外flash;在获取到状态待切换应用的应用注册表项的情况下,判断状态待切换应用的应用注册表项中的当前运行地址是否属于运行介质的地址段,如果不是,则判断状态待切换应用的应用注册表项中的当前存储地址中的至少一个地址是否属于运行介质的地址段,如果不是,则为状态待切换应用的代码段分配在运行介质的存储空间,获得状态待切换应用的代码段的第三基址,将状态待切换应用的代码段存储至运行介质中;将状态待切换应用的应用注册表项中的当前运行地址修改为第三基址,并在状态待切换应用的应用注册表项中的当前存储地址中添加第三基址,其中,第三基址为状态待切换应用的代码段在运行介质的基址。由此,在对智能卡扩容增加了片外flash这一运行介质的情况下,通过状态切换指令可以将状态待切换应用的运行介质进行切换,特别是将在片外flash存储且运行的代码段切换到片内flash或ram中运行时,可以提高应用的运行速度。

在本实施例提供的上述方法中,作为一种可选的实施方式,在将待加载应用的代码段存储至片外flash,并将当前运行地址修改为第二基址,在当前存储地址中添加第二基址(步骤s104)之后,本实施例提供的方法还包括以下步骤(a1~a9):

a1、虚拟机接收到应用激活指令,根据待激活应用的标识信息获取待激活应用的应用注册表项;其中,应用激活指令中至少包括:待激活应用的标识信息,以及运行待激活应用的运行介质;运行介质包括以下之一:随机存取存储器ram、片内flash和片外flash;

a2、在获取到待激活应用的应用注册表项的情况下,判断待激活应用的应用注册表项中的当前运行地址是否属于运行介质的地址段,如果是,则执行步骤a3;如果不是,执行步骤a5;

a3、获取待激活应用的代码段中的去激活方法的相对地址,将待激活应用的应用注册表项中的当前运行地址加上去激活方法的相对地址计算得到去激活方法的绝对地址,从去激活方法的绝对地址开始对去激活方法取址运行,去激活当前处于激活态的应用;

a4、获取待激活应用的代码段中的激活方法的相对地址,将待激活应用的应用注册表项中的当前运行地址加上激活方法的相对地址计算得到激活方法的绝对地址,从激活方法的绝对地址开始对激活方法取址运行,激活待激活应用,并在系统全局变量中将待激活应用的状态置为激活态;

a5、判断待激活应用的应用注册表项中的当前存储地址中的至少一个地址是否属于运行介质的地址段,如果是,则执行步骤a6;如果不是执行步骤a7;

a6、获取待激活应用的代码段在运行介质中的基址,将待激活应用的应用注册表项中的当前运行地址修改为待激活应用的代码段在运行介质的基址,待激活应用的代码段从运行介质的基址开始取址运行,并执行步骤a8;

a7、为待激活应用的代码段分配在运行介质的存储空间,获得待激活应用的代码段的第四基址,将待激活应用的代码段存储至运行介质中,其中,第四基址为待激活应用的代码段在运行介质的基址;将待激活应用的应用注册表项中的当前运行地址修改为第四基址,并在状态待切换应用的应用注册表项中的当前存储地址中添加第四基址,将待激活应用的代码段从第四基址开始取址运行,执行步骤a8;

a8、获取待激活应用的代码段中的去激活方法的相对地址,将待激活应用的应用注册表项中的当前运行地址加上去激活方法的相对地址计算得到去激活方法的绝对地址,从去激活方法的绝对地址开始对去激活方法取址运行,去激活当前处于激活态的应用;

a9、获取待激活应用的代码段中的激活方法的相对地址,将待激活应用的应用注册表项中的当前运行地址加上激活方法的相对地址计算得到激活方法的绝对地址,从激活方法的绝对地址开始对激活方法取址运行,激活待激活应用。

由此,在对智能卡扩容增加了片外flash这一运行介质的情况下,通过应用激活指令虚拟机实现了将已安装的应用的激活操作。

在本实施例提供的上述方法中,作为一种可选的实施方式,在激活所述待激活应用之后,本实施例提供的方法还包括:所述虚拟机接收到应用去激活指令,所述应用去激活指令中至少包括:待去激活应用的标识信息;根据所述待去激活应用的标识信息获取所述待去激活应用的应用注册表项;在获取到所述待去激活应用的应用注册表项的情况下,根据所述去激活应用的类型、运行速度需求或者用户输入的应用删除请求,判断是否需要将所述待去激活应用的中间码文件删除,如果需要,则删除所述待去激活应用的中间码文件的数据以及所述待去激活应用的应用注册表项,并获取所述待去激活应用的应用注册表项中的当前存储地址,删除所述待去激活应用的应用注册表项中的当前存储地址指向的代码段;如果不需要,则将所述全局变量中所述待去激活应用的状态置为非激活态。

在本实施例中,虚拟机在接收到去激活指令后,可以删除也可以不删除待去激活应用的中间码文件。与进行是否搬移的判断类似,为了在保证智能卡扩容的基础上,从整体上提高系统的运行速度和响应速度,以给用户良好的使用体验,本实施例中,作为一种可选的实施方式,虚拟机可以根据去激活应用的类型、运行速度需求或者用户输入的去激活请求,判断是否需要将待去激活应用的中间码文件删除。具体地,例如,可以将占存储空间较小的、处理时间较短的、经常使用或比较重要的应用的中间码文件配置为去激活时不删除,这样,就也可以达到提高智能卡的整个系统的运行速度以及响应速度,进而提高用户体验的效果。此外,本实施例中,在接收到去激活指令后,虚拟机还可以提示用户对待去激活应用是否进行删除的提示信息,例如,可以通过声音播报或者显示屏显示,在接收到用户输入的应用删除请求后,执行删除操作。

在本实施例提供的上述方法中,作为一种可选的实施方式,在激活所述待激活应用之后,本实施例提供的方法还包括:虚拟机接收到应用操作指令,并获取处于激活态的应用的应用注册表项,并从处于激活态的应用的应用注册表项中获取处于激活态的应用的代码段的第五基址,其中,第五基址为处于激活态的应用的代码段的当前运行地址;虚拟机获取处于激活态的应用的代码段中应用操作指令对应的方法的相对地址;虚拟机将第五基址加上应用操作指令对应的方法的相对地址计算得到应用操作指令对应的方法的绝对地址,从应用操作指令对应的方法的绝对地址开始对应用操作指令对应的方法取址运行,完成应用操作指令对应的操作。由此,虚拟机可以根据某一特定app的应用操作指令完成该操作指令指示的操作,如数字签名等等。

此外,在本实施例提供的上述方法中,无论从片内flash或ram读取数据到片外flash,还是从片外flash读取数据到片内flash或ram,都可以利用智能卡的加解密单元的数据进行加密传输,解密获得原始数据,例如,从片内flash读出的所述待加载应用的代码段可以先输出至智能卡的加解密单元,在经过加解密单元的加密后输出至片外flash,片外flash将加密后的代码段解密后再存入为其分配的基址指向的存储位置。由此,可以保证将代码段存入片外flash的过程中不会被非法劫持,保证了片内flash与片外flash的传输安全。

本实施例提供的智能卡的应用加载运行方法,在原有存储器(片内flash和ram)的基础上,增加了片外flash,将中间码文件的代码段存储于片外flash中,从而可以对智能卡的原有存储空间进行了扩展。此外,在扩容的基础上,本实施例中的虚拟机可以在兼容现有虚拟机的运行方式的情况下实现了对应用的下载、安装、激活/去激活,以及应用被激活后具体的应用操作的调用。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。本发明的范围由所附权利要求及其等同限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1