内存资源管理
1. 管理概述
1.1 可选功能说明
1.2 管理主体责任
2. 资源分配规则
2.1 加载时分配
2.1.1 最小内存要求
2.1.2 资源可用性检查
2.2安装时分配
2.2.1 内存配额设定
2.2.2 预留内存处理
3. 资源使用管理
3.1 应用运行时分配
3.1.1 数据存储分配
3.1.2 资源耗尽处理
3.2 资源释放与回收
3.2.1 应用删除时释放
3.2.2 内存资源回收利用
4. 管理数据元素
4.1 元素定义与作用
4.2 数据元素格式
内存资源管理
内存资源管理是 GlobalPlatform 卡的一项可选特性。它由 OPEN 管理与可执行加载文件或应用程序相关的计数器,这些计数器涉及它们各自的内存资源分配,如本规范所定义。它适用于持久性内存和易失性内存。内存资源管理数据元素描述了适用于每种内存类型(易失性或持久性)以及每种存储类型(代码或数据)的内存使用要求。内存要求可以在可执行加载文件和应用程序的加载和安装时为它们定义。OPEN 与运行时环境一起负责管理卡的内存资源,包括 4.2.4.1 节 “运行时环境安全要求” 中定义的安全要求。
内存资源管理数据元素以字节byte为单位指示内存资源量。
在 INSTALL [for load] 命令中,系统参数可能包括内存要求,为每种内存类型指定最小内存。
Some of the data objects in Load Parameters relate to memory management, which is an optional feature of
a card. A Memory Management data object is a data object that represents an amount of memory resources
counted in bytes. The minimum memory requirements (tags ‘C6’, ‘C7’, and ‘C8’) are coded as a 2-byte integer
for values up to 32767 and a 4-byte integer above 32767 – see section 9.7 – Memory Resource Management.
If both tags ‘C6’ and ‘C8’ are present and the implementation does not make any distinction between NonVolatile Code and Non-Volatile Data Memory then the required minimum shall be the sum of both values.
在 。
INSTALL [for install] 命令中,系统参数可能包括内存要求,为每种内存类型指定内存配额或预留内存,或两者都指定。
当支持内存资源管理时,OPEN 应分配(如果当前可用)每种类型的内存资源,如相应的内存资源管理数据元素中所述。内存资源应根据以下规则进行分配:
· 为可执行加载文件(及其后续应用程序实例)分配最小内存不应减少卡上当前可用的内存资源。
· 为应用程序分配内存配额不应减少卡上当前可用的内存资源。
· 分配给应用程序的内存配额值不应小于其预留内存值。
· 为可执行加载文件 / 应用程序分配预留内存应在其成功加载 / 安装时减少卡上当前可用的内存资源。
当支持内存资源管理时,OPEN 应根据以下规则管理每种类型内存的可用内存资源:
· 在加载请求时(INSTALL [for load] 命令),最小内存要求应在卡上当前可用。
· 在安装应用程序时(INSTALL [for install] 命令),实际分配给该应用程序的内存量应首先从该应用程序的预留内存中扣除,直到预留内存完全耗尽。当预留内存(如果有)耗尽时,分配的内存量应从该应用程序的内存配额中扣除,并应减少卡上当前可用的内存资源。当内存配额超出或卡上当前可用的内存资源耗尽时,应用程序的安装应失败。
· 在应用程序的生命周期内,创建数据时实际分配的内存量应首先从该应用程序的预留内存中扣除,直到预留内存完全耗尽。当预留内存(如果有)耗尽时,分配的内存量应从该应用程序的内存配额中扣除,并应减少卡上当前可用的内存资源。当内存配额超出或卡上当前可用的内存资源耗尽时,资源分配应失败。
· 成功删除应用程序(DELETE 命令)应通过释放的内存量和该应用程序的任何未使用的预留内存部分(如果有)来增加卡上可用的内存资源。
· 报告内存资源的结果取决于实现。
· 通过删除数据释放的内存量应重新分配给分配给该应用程序的预留内存和内存配额。如果没有为该应用程序分配预留内存,则释放的内存量应增加卡上可用的内存资源。
卡与应用的内存资源管理的实现设计
一、总体架构与功能定位
作为可选功能集成于智能卡系统
内存资源管理在 GlobalPlatform 智能卡体系中是一个可选特性,旨在为发卡行和应用开发者提供更精细化的内存资源控制手段,以适应不同场景下对内存管理的需求。
它与卡内容管理、安全管理等其他功能模块协同工作,共同构建智能卡的完整运行环境,确保卡上应用的正常运行以及资源的高效利用。
由 OPEN 负责整体协调与管理
OPEN 作为智能卡的核心管理组件,承担着内存资源管理的主要职责。它负责与卡上的其他组件(如应用程序、安全域等)进行交互,接收内存资源相关的请求,并根据预设规则和当前卡的状态进行处理和决策。
OPEN 通过维护一系列的数据结构和计数器,实时跟踪内存资源的使用情况,包括已分配给各个应用和可执行加载文件的内存量、剩余可用内存等信息,为内存资源的分配和回收提供数据支持。
二、内存资源分配规则
加载时的内存分配
基于最小内存要求
在应用或可执行加载文件加载过程中,系统会根据预先设定的规则为其分配最小内存。这些最小内存要求在安装(INSTALL)命令中通过系统参数进行指定,包括针对不同类型内存(如易失性内存和持久内存)以及不同存储类型(代码或数据)的最小内存需求。
在分配最小内存时,OPEN 会检查卡上当前是否有足够的可用内存资源来满足该要求。如果卡上剩余内存不足以分配最小内存,加载过程将失败,并返回相应的错误信息,确保加载操作不会导致卡内存资源耗尽而影响系统稳定性。
资源可用性检查与限制
OPEN 会严格验证卡上的内存资源是否满足加载请求的要求,这涉及到对卡上现有内存使用情况的全面评估,包括已被其他应用或系统组件占用的内存量。
即使卡上总内存量看似足够,但如果分配最小内存会导致其他关键系统功能或正在运行的应用因内存不足而受到影响,加载操作也可能被拒绝,以维护整个卡系统的稳定运行。
安装时的内存分配
内存配额与预留内存概念
安装应用时,除了考虑最小内存要求外,还涉及内存配额(Memory Quota)和预留内存(Reserved Memory)的分配。内存配额定义了应用在运行过程中可以使用的最大内存量,而预留内存则是在应用安装时预先为其保留的内存空间,用于存储特定的数据或应对可能的内存需求增长。
这些参数在 INSTALL 命令中进行指定,并且其值的设定需要综合考虑应用的特性、预计的内存使用模式以及卡上的整体内存资源状况,以确保每个应用都能获得合理的内存资源分配,同时避免单个应用过度占用内存而影响其他应用的运行。
分配规则与顺序
首先,应用安装时,其预留内存会从卡上的可用内存中扣除,确保在应用运行初期就有足够的内存空间来满足其基本需求。当应用在运行过程中需要额外内存时,会先从其预留内存中分配;如果预留内存耗尽,再从其内存配额中分配。
在整个过程中,OPEN 会持续监控内存使用情况,确保分配给应用的内存总量不超过其内存配额,并且在内存资源紧张时,能够根据预设策略(如优先保证关键应用的内存需求)进行合理的内存分配调整,防止因内存分配不当导致应用崩溃或系统故障。
三、内存资源使用管理
应用运行时的内存分配与监控
动态内存分配策略
在应用运行期间,根据应用的实际操作和数据处理需求,会动态地分配内存资源用于存储数据。例如,当应用需要加载新的数据文件或创建临时数据结构时,会向系统请求额外的内存空间。
OPEN 会根据当前内存使用情况和应用的内存配额,决定是否批准这些内存分配请求。如果应用的内存使用量接近或达到其内存配额,后续的内存分配请求可能会被拒绝或受到限制,以避免应用过度占用内存而影响其他应用或系统的正常运行。
内存资源耗尽处理
如果应用在运行过程中耗尽了其内存配额或卡上的可用内存,系统会采取相应的措施来处理这种情况。这可能包括向应用发送内存不足警告,提示应用释放不必要的内存资源;或者在极端情况下,强制终止应用的运行,以防止因内存耗尽导致系统崩溃或出现不可预测的行为。
同时,系统会记录内存耗尽事件相关的信息(如发生时间、涉及的应用等),以便后续进行分析和排查,帮助开发人员优化应用的内存使用策略或调整系统的内存配置参数。
内存资源的释放与回收
应用删除时的内存释放
当应用被删除时,与之相关联的内存资源需要被释放并回收以供其他应用或系统使用。DELETE 命令在执行应用删除操作时,会触发内存释放流程。OPEN 会首先确定与该应用相关的所有内存资源,包括应用实例占用的内存、应用数据占用的内存以及在运行过程中分配的任何动态内存空间。
然后,将这些内存标记为可用状态,并更新内存资源管理相关的数据结构和计数器,以反映内存资源的新状态。释放的内存将根据内存管理策略重新分配给其他需要内存的应用或系统组件,提高内存资源的利用率。
内存资源回收利用机制
在内存释放过程中,系统会考虑如何优化内存资源的回收利用。对于一些应用删除后遗留的未使用内存片段,可能会进行内存碎片整理操作,将这些分散的内存片段合并为连续的可用内存块,以便更好地满足后续较大内存分配请求的需求。
同时,系统会根据应用的使用模式和内存释放情况,动态调整内存分配策略,例如在内存资源紧张时,优先回收长时间未使用或占用内存较大但利用率较低的应用所占用的内存,确保内存资源能够分配给最需要的应用,提升整个系统的性能和响应速度。
四、内存资源管理数据元素
数据元素定义与作用
内存资源管理数据元素用于描述应用或可执行加载文件在内存使用方面的各种要求和限制,以及当前内存资源的使用状况。这些数据元素包括最小内存需求、内存配额、预留内存等参数,它们在卡内容管理操作(如加载、安装等)中起着关键的指导作用。
通过这些数据元素,系统能够准确地了解每个应用对内存资源的需求,从而在内存分配和管理过程中做出合理的决策,确保内存资源的有效利用和系统的稳定运行。
数据元素格式与编码
所有的内存资源管理数据元素均以字节为单位进行计数和表示,其长度字段的编码遵循特定的规则,如采用 ASN.1 BER-TLV 编码方式(除了 Lc 和 Le 字节采用 ISO/IEC 7816 短消息长度编码外),以确保数据的结构化和标准化表示,便于在不同组件之间进行准确的数据传输和解析。
这种编码方式使得内存资源管理数据在命令和响应消息中能够清晰地表达其含义,同时也便于系统进行高效的处理和管理,确保内存资源管理操作的准确性和一致性。例如,在 INSTALL 命令中,内存配额和预留内存等参数的编码格式使得 OPEN 能够准确地识别和处理应用的内存需求信息,从而正确地进行内存分配操作。