一种智能卡内存管理方法

文档序号:6611053阅读:180来源:国知局
专利名称:一种智能卡内存管理方法
技术领域
本发明涉及智能卡,具体涉及一种大容量智能卡的内存管理方法。
背景技术
智能卡中的软件部分包括卡片操作系统Card Operating System (简称 COS)以及各类应用程序等。片上操作系统是智能卡的控制和管理中心,负 责管理系统资源,其中内存也是系统资源的一部分。
传统的智能卡的卡片操作系统基本上只提供给用户一些GSM标准指令 集,卡中的各类应用程序大部分只是这些指令的简单组合,只实现智能卡的 基础功能,应用比较单一,操作和管理比较简单。片上操作系统需要管理的 资源也比较少,系统中的内存非常有限,所以基本上对于内存的管理是很简 单的。 一般的,智能卡芯片上有两块内存, 一块是内部随机存储器Internal Random—Access Memory,大小一般为128至256个字节,主要用作堆栈区 域,并存放操作系统、流程控制及特殊应用部分的全局变量;另一块是外部 随机存储器External Random—Access Memory,大小一般为lk到4k,在智能卡 操作系统中会将外部随机存储器静态地划分为几个部分,APDU指令的接收 发送数据缓冲区占用一部分,STK应用数据处理缓冲区占用一部分,各类应 用程序自定义的全局变量各自占用一部分。每个应用根据各自的需求单独占 用一块内存,不涉及内存的申请和释放、内存的分配和回收,利用这样简单 的静态内存管理,可以避免各个应用在运行中发生内存覆盖。但也存在着一 些问题系统通过静态的方式来分配内存,每个应用独占一块内存区域,会 导致即使某一个应用当前没有运行,静态分配给该应用的内存资源也无法被 当前正在运行的其他应用使用,从而使得内存无法得到充分的利用,有限的 内存资源会变得更加紧张。以往的智能卡内存非常小,管理方式简单,不涉 及到内存的申请和释放,内存的分配和回收,每个应用占用一块内存,不涉 及到应用运行中将其他应用的内存覆盖的问题,但这样内存是静态分配给应
用的,内存的利用率很低。对于内存非常小的系统,这样的管理方式是可以 接受的。但是随着通信技术的不断发展和市场需求的增加,智能卡上实现的 应用越来越复杂,集成的应用也越来越多,系统中的内存也随之不断增大。 这样就对智能卡中的内存管理提出了更高的要求,简单的静态内存划分已经 不能满足日益复杂的多应用的要求了 ,具有大容量内存的复杂系统需要一个 有效的针对智能卡应用特点的内存管理方法来提高内存的使用效率。

发明内容
本发明需要解决的技术问题是提供一种智能卡内存管理方法,能够有效 地管理智能卡上的内存,提高内存的使用效率,满足大容量智能卡和复杂应 用的需要。
本发明的上述技术问题这样解决,提供一种智能卡内存管理方法,动态 使用内存并区分通用程序、独占程序和非独占程序,包括
(-)用的内存管理方法
对于通用程序,退出时可申请释放其申请的内存; (二)特殊的内存管理方法
对于独占程序,其申请的内存不释放、分配给该独占程序一直使用;
对于非独占程序,其申请的内存仅在有其他非独占程序申请内存时进行 释放。
按照本发明提供的管理方法,该管理方法还包括通用程序申请内存并在 该通用程序退出前可申请释放该申请内存。
按照本发明提供的管理方法,该管理方法还包括独占程序申请内存时记 录其独占程序标志和应用程序ID及进程信息并在其本身或其他独占程序再次 申请时对应应用程序ID及进程信息与所述记录一致的情况下直接使用该申请 内存。
按照本发明提供的管理方法,该管理方法还包括非独占程序申请内存时 记录其非独占程序标志和应用程序ID及进程信息并在其他非独占程序再次申 请时对应应用程序ID与所述记录不一致且进程信息一致的情况下释放该申请 内存。按照本发明提供的管理方法,该管理方法还包括非独占程序申请内存时 记录其非独占程序标志和应用程序ID及进程信息。
按照本发明提供的管理方法,所述记录包括分配具体内存的起始地址数 据项、大小数据项、附加信息数据项和进程信息数据项;所述附加信息数据
项包括独占/非独占程序标志子项和应用程序ID子项,记录申请内存的独占/
非独占程序的应用程序ID及其独占/非独占程序标志;所述进程信息数据项 记录申请内存的独占/非独占程序进程信息。
按照本发明提供的管理方法,所述申请内存包括以下步骤
7.1) 根据申请内存的大小从现有记录标示的已分配内存之外寻找合适的 连续空闲空间;
7.2) 分配该连续空闲空间并增加记录,记录其起始地址和大小,同时根据 申请内存的是独占/非独占程序记录附加信息和进程信息;所述附加信息包括 独占/非独占程序标志和应用程序ID。。
按照本发明提供的管理方法,所述寻找是从大小大于所述申请内存的连 续空闲空间集合中查找其中最小的连续空闲空间。
按照本发明提供的管理方法,所述空闲空间包括被释放的已分配空间和 从未分配空间。
按照本发明提供的管理方法,所述释放包括删除对应记录。
按照本发明提供的管理方法,所述内存,即智能卡可用内存,包括内 存控制块区域和应用程序堆区域,所述记录存储在所述内存控制块区域中, 所述申请内存位于所述应用程序堆区域。
本发明提供的一种智能卡内存管理方法,针对通用程序、独占程序和非 独占程序采取不同的管理策略,该智能卡应用的内存管理模块,能够提高大 容量智能卡内存的使用效率,同时解决智能卡各种实际应用中的内存回收的 问题。


下面结合附图和具体实施例进一步对本发明进行详细说明。图1为本发明智能卡可用内存中内存控制块区域和应用程序堆区域的结 构示意图2为本发明通用内存申请的流程示意图; 图3为本发明通用内存释放的流程示意图; 图4为本发明特殊内存管理的流程示意图。
具体实施例方式
首先,说明本发明基础
①在智能卡应用的过程中,智能卡与移动终端是通过命令进行交互的, 传统的内存使用方法是在入口的时候动态申请内存,在出口的时候释放入口 时申请的内存。而智能卡应用中内存使用的特点是入口和出口不是唯一的, 智能卡是通过一个入口进入一个应用中的,但退出该应用可以有多个出口 , 所以如果卡的应用程序在入口处申请了一块内存,但由于出口是不确定的, 而且一些出口可能是几个入口的共同的出口 ,那么就无法在出口处将内存释 放,这样就有可能造成内存的泄漏,需要采用特殊内存管理方法。②同时,
卡的特殊应用是由一些功能函数和STK指令组成,功能函数是实现应用的具
体操作的函数,在功能函数内部程序是顺序执行的,所以在功能函数内部可 以进行通用的内存申请和释放,可以采用通用内存管理方法。
其次,说明本发明内存管理方法
一、将智能卡上的可用内存分为两个区域, 一个是内存控制块区域,一 个是应用程序堆区域,内存控制块区域记录了应用程序堆的使用情况。内存 控制块区域中保存了若干个内存控制块,每一个内存控制块用来保存一个已 分配内存块的信息,应用程序堆区域是真正分配给应用程序的内存块的集合。 本发明包括两个方法, 一个方法是通用的内存管理方法,由于在智能卡应用 的某些功能实现中,程序是顺序执行的,不存在内存申请后无法释放的问题, 使用通用内存管理的方法,首先申请内存,使用后释放内存,另一个方法是 特殊内存管理方法,当程序申请内存后无法确定何时释放内存时,采用特殊内 存管理方法。通用的内存管理方法中内存的生存周期是由用户来决定的,特 殊的内存管理方法中内存的生存周期是由系统和用户共同决定的。二、 定义内存控制块记录的结构,如图1所示,包括-
1、 已分配内存块的起始地址(简称:内存块起始地址)
2、 已分配内存块的大小(简称内存块大小)
3 、应用程序的附加信息(简称附加信息)共16位,特殊内存管理
方法的信息位,最高位标识是独占类型还是非独占类型的,低15位标识特殊 应用程序的ID号。
4 、应用程序的进程信息(简称进程信息)特殊内存管理方法的信 息位,对于独占/非独占程序申请时记录其进程信息;
三、 内存管理匹配策略
内存管理采用最佳匹配策略。最佳匹配策略是指查找应用程序堆区域中 容量大于或等于应用程序要申请内存大小的最小空闲内存块。
四、 通用内存管理方法中内存申请和释放的原理 (-)内存的申请
如图2所示,包括以下步骤
201) 判断内存控制块区域和应用程序堆区域的起始地址是否有效。如果 无效,内存申请失败;
202) 判断申请内存的大小是否为O,是否大于应用程序堆区域的总大小, 如果是,内存申请失败;
203) 判断内存控制块区域是否没有存放内存控制块记录的空间,如果是, 内存申请失败。
204) 判断要申请的内存大小是否小于最小分配单位,如果小于,令要申 请的内存大小等于最小分配单位,如果大于,令其值为最小分配单位的最小 倍数的值。
205) 遍历内存控制块区,通过所有记录中的内存块起始地址和内存块大 小在应用程序堆区域寻找空闲内存块(包括以前用过但释放的内存和从未分 配的内存)。
206) 遍历所有空闲内存块从中找到大于所述申请内存的连续空闲空间集 合中最小的分配给应用程序(如果没有大于所述申请内存的连续空闲空间则内存申请失败),如果在应用程序堆区域中找到的该内存块大于最小分配单 位和申请的内存大小之和,将这个找到的空闲内存分为两部分, 一部分分配 给应用程序,剩余部分仍作为空闲内存块,如果是等于,那么就将这个找到 的空闲内存块分配给应用程序。将分配给应用程序的内存块的起始地址、内 存块的大小分别赋值给一个内存控制块记录的内存块起始地址、内存块大小 数据项。
207)将上述内存控制块记录添加到内存控制块区域中。
(二)内存的释放
如图3所示,包括以下步骤
301) 判断内存控制块区域和应用程序堆区域的首地址是否有效,如果无
效,内存释放失败。
302) 根据要求释放的内存块的起始地址,遍历内存控制块区域,查找内 存控制块中内存块起始地址等于要求释放的内存块的起始地址的内存块;
303) 如果找到了,就将该内存控制块记录删掉,将后面的内存控制块记 录都前移一个单位,应用程序堆区域的对应内存块成为空闲内存块,完成内 存释放。
304) 如果没有找到,内存释放失败。 五、特殊的内存管理方法
特殊应用申请的内存可以分为独占类型和非独占类型的,在申请和释放 内存的操作上是不同的,申请独占类型内存的应用程序如果申请了内存就不 会再释放这块内存了,申请非独占类型内存的应用程序如果申请了内存,不 会主动释放,但是如果有别的特殊应用程序申请非独占类型的内存时,就会 释放原来的非独占类型的内存。特殊的内存管理方法是通过这样的方式来解 决特殊应用只申请不释放内存的问题的。
如图4所示,特殊内存管理方法包括以下步骤
401) 判断内存控制块区域和应用程序堆区域的首地址是否有效,如果无 效,内存申请失败;
402) 判断申请内存的大小是否为0,是否大于应用程序堆区域的总大小,
如果是,内存申请失败;
403) 判断要申请的内存大小是否小于最小分配单位,如果小于,令要申 请的内存大小等于最小分配单位,如果大于,令其值为最小分配单位的最小 倍数的值。
404) 查找当前程序进程中是否有其它应用ID号的非独占类型的内存, 如果有,将其释放,也即将这些内存控制块记录删掉,将后面的内存控制块
记录前移。
405) 判断内存控制块区域是否没有存放内存控制块记录的空间,如果是, 内存申请失败。
406) 判断申请内存的特殊应用程序是否是独占类型的,如果是独占类型 的,根据该应用的ID号及进程信息查找是否该应用程序曾申请过对应的独占 内存,如果该应用程序申请过,那么将找到的内存块分配给该特殊应用程序, 内存申请结束。
407) 如果申请内存的特殊应用程序是独占类型的,并且该应用程序没有 申请过上述对应的独占内存,或者申请内存的特殊应用程序是非独占类型的, 则遍历内存控制块区域,通过所有记录中的内存块的起始地址和内存块大小 在应用程序堆区域寻找空闲内存块(包括以前用过但释放的内存和从未分配 的内存)。
408) 遍历所有空闲内存块从中找到大于所述申请内存的连续空闲空间集 合中最小的分配给应用程序(如果没有大于所述申请内存的连续空闲空间则 内存申请失败),如果在应用程序堆区域中找到的该内存块大于最小分配单 位和申请的内存大小之和,将这个找到的空闲内存分为两部分, 一部分分配 给应用程序,剩余部分仍作为空闲内存块,如果是等于,那么就将这个找到 的空闲内存块分配给应用程序。将分配给应用程序的内存块的起始地址、内 存块的大小赋值给一个内存控制块记录的内存块起始地址和内存块大小数据 项,并将该特殊应用程序的附加信息和进程信息赋值给内存控制块记录的附 加信息数据项和进程信息数据项。
409) 将上述内存控制块记录添加到内存控制块区域中。 最后,结合具体应用对本发明方法进一步详细说明
以移动终端的短信群发为例,用户进行操作流程如下
1、 用户进入短信群发时,通过SIM卡主动式命令进入短信群发的应用入□。
2、 用户进入新编短信一>输入内容一>选择号码,在用户选择某一个号码 后,程序会通过特殊内存申请方式申请一个内存块来保存已选择号码的信息
(该号码的来源信息及所属文件的记录号),按照图4的流程分配一个内存 块给特殊应用程序,本应用申请的是非独占类型的内存。首先释放当前程序 进程中的所有其它ID号的非独占类型内存,然后判断是否要申请独占类型的 内存,如果是独占类型的内存,则遍历内存控制块区域,查找是否存在已申 请的特殊内存块(附加信息和进程信息一致),如果存在则将该内存块分配 给该特殊应用程序,否则将从空闲的应用程序堆区域为应用新分配一块内存; 如果是非独占类型的,将从空闲的应用程序堆区域为应用新分配一块内存。 如果分配了内存,则将分配的内存块的起始地址、内存块的大小和特殊应用 程序的附加信息和进程信息赋值给内存控制块记录。
3、 用户选择一个号码,确定后,卡将该组员的信息存放在上面申请的内 存中,继续选择号码,直到用户选择完需要发送的号码,这样卡已经将所有 组员的信息存储到内存中了。
4、 用户选择发送短信,卡将给内存中存储的所有号码发送短信,操作完成。
5、 用户退出该应用,进入其他应用,如果再执行申请特殊应用内存的操 作,如果短信群发应用是非独占类型,卡的内存管理会将短信群发应用申请 的内存释放。
这样,对于非独占类型的特殊应用,就可以实现应用程序不必每次申请 操作都需要释放内存,应用程序只需申请一次,当系统退出当前应用后,进 入下一个应用时,系统会自动释放前一个应用申请的内存。如果中间有退出 短信群发应用的操作,内存也不会出现只申请不释放的情况。
权利要求
1、一种智能卡内存管理方法,其特征在于,动态使用内存并区分通用程序、独占程序和非独占程序,包括以下步骤对于通用程序,退出时可申请释放其申请的内存;对于独占程序,其申请的内存不释放、分配给该独占程序一直使用;对于非独占程序,其申请的内存仅在有其他非独占程序申请内存时进行释放。
2、 根据权利要求1所述管理方法,其特征在于,该管理方法还包括通 用程序申请内存并在该通用程序退出前可申请释放该申请内存。
3、 根据权利要求1所述管理方法,其特征在于,该管理方法还包括独 占程序申请内存时记录其独占程序标志和应用程序ID及进程信息并在其本 身或其他独占程序再次申请时对应应用程序ID及进程信息与所述记录一致 的情况下直接使用该申请内存。
4、 根据权利要求1所述管理方法,其特征在于,该管理方法还包括非 独占程序申请内存时记录其非独占程序标志和应用程序ID及进程信息,并在 其他非独占程序再次申请时对应应用程序ID与所述记录不一致且进程信息 一致的情况下释放该申请内存。
5、 根据权利要求2-4任一项所述管理方法,其特征在于,所述记录包 括分配具体内存的起始地址数据项、大小数据项、附加信息数据项和进程信 息数据项;所述附加信息数据项包括独占/非独占程序标志子项和应用程序ID 子项。
6、 根据权利要求2-4任一项所述管理方法,其特征在于,所述申请内 存包括以下步骤7.1) 根据申请内存的大小从现有记录标示的已分配内存之外寻找合适 的连续空闲空间;7.2) 分配该连续空闲空间并增加记录,记录其起始地址和大小,同时根 据申请内存的是独占/非独占程序记录附加信息及进程信息;所述附加信息包括独占/非独占程序标志和应用程序ID。
7、 根据权利要求6所述管理方法,其特征在于,所述寻找是从大小大于所述申请内存的连续空闲空间集合中的查找其中最小的连续空闲空间。
8、 根据权利要求6所述管理方法,其特征在于,所述空闲空间包括被 释放的己分配空间和从未分配空间。
9、 根据权利要求2或4所述管理方法,其特征在于,所述释放包括删 除对应记录。
10、 根据权利要求l-4任一项所述管理方法,其特征在于,所述内存包 括内存控制块区域和应用程序堆区域,所述记录存储在所述内存控制块区域 中,所述申请内存位于所述应用程序堆区域。
全文摘要
本发明涉及一种智能卡内存管理方法,动态使用内存并区分通用程序、独占程序和非独占程序,包括对于通用程序,退出后自动释放其申请的内存;对于独占程序,其申请的内存不释放、分配给该独占程序一直使用;对于非独占程序,其申请的内存仅在有其他非独占程序申请内存时进行释放。这种管理方法能够提高大容量智能卡内存的使用效率,同时解决智能卡各种实际应用中的内存回收问题。
文档编号G06F12/02GK101344861SQ20071013060
公开日2009年1月14日 申请日期2007年7月10日 优先权日2007年7月10日
发明者李菲菲, 杨延辉, 蒋曲明 申请人:凤凰微电子(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1