CN103678180A - 智能卡非易失性存储器的管理方法 - Google Patents

智能卡非易失性存储器的管理方法 Download PDF

Info

Publication number
CN103678180A
CN103678180A CN201310619963.5A CN201310619963A CN103678180A CN 103678180 A CN103678180 A CN 103678180A CN 201310619963 A CN201310619963 A CN 201310619963A CN 103678180 A CN103678180 A CN 103678180A
Authority
CN
China
Prior art keywords
space
eep
free
page
state
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201310619963.5A
Other languages
English (en)
Other versions
CN103678180B (zh
Inventor
程诗猛
丁峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Tianyu Information Industry Co Ltd
Original Assignee
Wuhan Tianyu Information Industry Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Tianyu Information Industry Co Ltd filed Critical Wuhan Tianyu Information Industry Co Ltd
Priority to CN201310619963.5A priority Critical patent/CN103678180B/zh
Publication of CN103678180A publication Critical patent/CN103678180A/zh
Application granted granted Critical
Publication of CN103678180B publication Critical patent/CN103678180B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种智能卡非易失性存储器的管理方法,包括以下步骤:接收应用提交的空间申请指令,根据存储状态表中的空闲空间将合适的空闲空间分配给该应用,并更新存储状态表和逻辑分配表;接收应用提交的空间释放请求指令,根据该空间释放请求指令执行空间释放操作,将对应存储空间的状态修改为空闲空间,并删除对应的逻辑分配表中的表项;将释放操作所产生的碎片归集在一起形成一个连续的空闲区间,以便于后期的分配利用。本发明根据应用的申请分配和释放空间,通过对释放空间的紧凑处理,实现了释放空间的再利用。

Description

智能卡非易失性存储器的管理方法
技术领域
本发明涉及智能卡***非易失性存储器的空间管理,尤其涉及一种已释放后所产生的空闲碎片的快速、高效和充分再利用的智能卡非易失性存储器的管理方法。
背景技术
在智能卡***中,存储器(如EEPROM、FLASH、RAM等)空间是有限的,如何有效地标识、分配和释放存储单元,特别是如何有效利用释放后所产生的空闲碎片,是衡量COS性能的一个关键性指标。
而且,与写RAM操作比较,写非易失性存储器(如EEPROM、FLASH等,以下简称NVM)的操作是相当费时的,并且卡片硬件本身不保证写操作的完整性。
通常智能卡RAM容量为几KB到十几KB,NVM容量为几十KB到几百KB;而普通PC的内存为几GB到几十GB,硬盘容量为几百GB到几TB,其存储器容量是智能卡存储器容量的106倍以上。与PC机相比,智能卡存储器的充分利用更显得尤为重要。
目前市面上的智能卡大多可以实现NVM的分配和释放,但通常释放后的存储空间再分配后而产生的大量碎片不能再被使用而被浪费掉。
从一种***状态到另一种状态的转换可能包括NVM几个存储单元的更新。这些更新操作必须是原子性的执行,即要么完整更新,要么保持原样,不得出现中间状态。
事务提交操作完成之前,如果发生掉电或其它***故障,则全部更新操作作废,恢复到初始状态。
与读操作相比,NVM的写操作是相当费时的。所以为了提高智能卡的执行效率,应尽量减少事务处理中NVM的写操作次数。
智能卡COS掩膜后可能因遗留有BUG或功能扩展等原因而需要打补丁处理,补丁代码是要写入到NVM中的;但是是否需要打补丁及补丁代码的大小是“动态”的,不能开始设计时就预留固定空间给补丁区,这样不仅造成NVM空间的浪费,而且可能会由于预留空间不足导致补丁功能无法实现。
发明内容
本发明的一个目标就是要提供一种高效的智能卡NVM存储空间(单元)的标识、分配、释放及空闲空间紧凑的方法和机制。
本发明的另一个目标就是要提供一种在智能卡***中使用的NVM管理方法和机制,以避免事务缓存中的空间浪费和操作时间浪费,并保障事务写操作的一致性。
本发明的再一个目标就是实现NVM空间的动态分配及补丁地址的动态管理。
本发明要解决的技术问题在于针对现有技术中智能卡***已释放空间碎片的浪费问题,以及写NVM操作效力低下的缺陷,提供一种可有效利用已释放空间,提高智能卡操作效率的智能卡非易失性存储器的管理方法。
本发明解决其技术问题所采用的技术方案是:
提供一种智能卡非易失性存储器的管理方法,包括以下步骤:
接收应用提交的空间申请指令,根据存储状态表中的空闲空间将合适的空闲空间分配给该应用,并更新存储状态表和逻辑分配表;
接收应用提交的空间释放请求指令,根据该空间释放请求指令执行空间释放操作,将对应存储空间的状态修改为空闲空间,并删除对应的逻辑分配表中的表项;
将释放操作所产生的碎片归集在一起形成一个连续的空闲区间,以便于后期的分配利用。
本发明所述的方法中,
在分配空闲空间状态前,预先将逻辑分配表和存储状态表分别进行备份,产生各自的工作表;
在分配空间时,将备份的工作表分别复制到各自的缓存表中;更新逻辑分配表的缓存表中对应的物理块序号及逻辑表链接信息,并更新存储状态表的缓存表中对应存储空间的使用状态;然后将更新后的缓存表复制到各自的工作表中,并以工作表替换相应的原始表。
本发明所述的方法中,步骤根据存储状态表中的空闲空间分配合适的空间给该应用具体为:
从存储状态表中查找与所申请的空间长度相等的空闲空间,若有,则将其分配给该应用;若没有,则将长度大于所申请的空间长度的空闲空间中长度最小的空闲空间分配给该应用;
如果所有空闲空间长度均小于所申请的空间长度,则检查存储器用户区空间底部的剩余空间是否大于或等于所申请的空间长度,若是,则从已分配空间的底部分配所申请的空间长度给该应用;否则,空间申请失败。
本发明所述的方法中,执行空间释放操作时,修改逻辑分配表和存储状态表的缓存表,以最终更新存储状态表中的状态,并清除逻辑分配表中的记录。
本发明所述的方法中,存储空间紧凑操作的步骤具体为:将所有已使用的空间内容都移动到存储器用户区的顶部,而将释放操作所产生的空闲空间都移动到存储器用户区的底部。
本发明所述的方法中,在进行存储空间紧凑操作时,生成紧凑防拔信息原始表的备份工作表,在存储空间紧凑操作完成后,将紧凑防拔信息的备份工作表替换紧凑防拔信息原始表。
本发明所述的方法中,还包括步骤:预先将存储器的空间划分为多个物理块,物理块的长度设置为128字节或者其整数倍。
本发明所述的方法中,还包括步骤:
进一步将存储块划分为多个存储片,存储片为存储器的最小存储单元,存储状态表中的表项记录存储块以及存储片的使用状态。
本发明所述的方法中,在逻辑分配表或存储状态表的工作表完成更新后,相应原始表被替换前,若发生意外掉电,则重新上电后自动进行原始表的替换;
在逻辑分配表或存储状态表的工作表完成更新前,若发生意外掉电,且用于备份的相应工作表不完整,则重新上电后,自动清除不完整的事务,回到事务开始前的状态。
本发明所述的方法中,在执行空间分配和空间释放操作时,若逻辑分配表或存储状态表的缓存表的更新超过一页,则先将更新后的缓存表复制到各自的工作表中。
本发明产生的有益效果是:本发明根据应用的申请分配和释放空间,通过对释放空间的紧凑处理,实现了释放空间的再利用。 
 
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1为本发明实施例智能卡非易失性存储器的管理方法的流程图;
图2为本发明实施例逻辑表、状态表及存储块结构示意图;
图3为本发明实施例用户存储器区、逻辑分配表及存储器状态表布局示意图;
图4为本发明实施例空闲空间查找示意图;
图5为本发明实施例紧凑操作防掉电信息结构示意图;
图6为本发明实施例紧凑流程示意图。
 
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明的智能卡非易失性存储器的管理方法可实现空闲碎片有效管理和利用的实现方案,本发明管理的NVM是由用户存储器区、逻辑分配表、存储器状态表及紧凑防拔信息表等组成,逻辑分配表及存储器状态表表项的数量等同于用户存储区的存储块数量,紧凑防拔信息表占用两页NVM空间。
本发明实施例智能卡非易失性存储器的管理方法,如图1所示,包括以下步骤:
S1、接收应用提交的空间申请指令;
S2、根据存储状态表中的空闲空间将合适的空闲空间分配给该应用,并更新存储状态表和逻辑分配表;
S3、接收应用提交的空间释放请求指令;
S4、根据该空间释放请求指令执行空间释放操作,将对应存储空间的状态修改为空闲空间,并删除对应的逻辑分配表中的表项;
S5、将释放操作所产生的碎片归集在一起形成一个连续的空闲区间,以便于后期的分配利用。
由于NVM的写操作不能跨页,且页内写操作的时间与每次写入的字节数无关,即写一个字节和写一整页的时间是相同的,因此设置块长度与卡片中NVM的物理页长度相匹配。
兼顾NVM的利用率及写操作不跨页的物理特性,对于NVM物理页为128字节或256字节的情况,定义块长度等于物理页长度;对于NVM物理页为64字节、32字节或更小的情况,定义块长度为128字节,即一个块由多个物理页组成,且更新时按物理页分页操作。
逻辑分配表(eep_logic_table)
为了方便有效地标识NVM的物理地址,就要用到类似于DOS***中的FAT的逻辑表(eep_logic_table)。
逻辑表的一个表项记录一个物理块的块序号,而由块序号可便捷地推算出块物理地址。
一个逻辑表项由两个元素组成:第一个元素记录物理块序号,2个字节;第二个元素记录链接页的逻辑表表项,2个字节。
逻辑分配表结构定义:
typedef struct 
{
    u16 physical_index; // 逻辑页所对应的物理块序号
    u16 next_logic_index; // 链接逻辑页表项 
}eep_logic_table_t;
eep_logic_table_t far g_eep_logic_table[C_EEP_MAX_BLOCKS];// 逻辑分配表的原始表
eep_logic_table_t far g_eep_logic_table_ebak[C_EEP_MAX_BLOCKS];// 逻辑分配表的工作表
eep_logic_table_t sdata eep_logic_table_sbak[C_EEP_PAGE_SIZE/sizeof(eep_logic_table_t)]; // cache表(即缓存表)
其中g_eep_logic_table_ebak(逻辑分配表的工作表)是为了防掉电处理而设计的,其使用场景在后续的事务机制中再做详尽说明。
由于NVM写一个字节和写一页的时间是相同的,eep_logic_table_sbak的设置是为了提高管理操作的执行速度。
从以上描述可以看出,定位一个物理块需要8个字节的逻辑表表项(原始表和工作表各4字节),因而物理块大小的设置直接影响NVM的利用率。本发明的一个实施例中可将块长度设置为128字节或256字节的原因所在。
存储状态表(eep_state_table)
为了有效标识存储器的使用状态,本发明实施例可进一步将存储块划分为若干个存储片:片是数据域中的一部分,一个存储片即是一个最小存储单元。
状态表的一位标识一个存储片的使用状态:“0”标识该存储片为“空闲”,而“1”则标识该存储片为“已使用”。
一个物理块的使用状态由状态表的一个表项来标识。综合管理开销和存储空间的利用率,设置合理的存储片的长度。如设置片长度为16字节,对于块长度的128字节的情况,则存储器状态表可用一个字节来标识一个块的使用状态;同理,对于块长度的256字节的情况,需要用两个字节来标识一个块的使用状态。
存储状态表结构定义:
typedef struct 
{
#if NVM_PAGE_SIZE == 128
    u8  free16;    // 页内16字节块空闲标记,
#elif NVM_PAGE_SIZE == 256
    u16  free16;  // 页内16字节块空闲标记,
#endif
                          // 某一位为0:对应16字节块空闲
                          // 某一位为1:对应16字节块已使用
}eep_state_table_t;
eep_state_table_t far g_eep_state_table[C_EEP_MAX_BLOCKS];// 存储状态表的原始表
eep_state_table_t far g_eep_state_table_ebak[C_EEP_MAX_BLOCKS];// 存储状态表的工作表
eep_state_table_t sdata eep_state_table_sbak[C_EEP_PAGE_SIZE/sizeof(eep_state_table_t)];// cache表
与eep_logic_table_ebak的设置相同,设置eep_state_table_ebak的目的也是为了事务机制的处理。
与eep_logic_table_sbak的设置相同,设置eep_state_table_sbak的目的也是为了提高管理操作的执行效率。
紧凑防拔信息表
如下述“存储空间紧凑”部分的描述,碎片整理过程是不可逆的。为防止紧凑操作过程中因掉电等异常中断造成空间管理混乱,需要在每一步紧凑操作前先记录完整的紧凑信息。
NVM使用信息结构体定义:
typedef struct 
{
      u16 index; // 计数器:紧凑防拔信息表序号,每次更新紧凑防拔信息表此项自动加1
      u16 index_N; // index的反码
      u16 current_logic_index; // 当前使用逻辑表项
      u16 null; // 未使用项,与current_logic_index合并构成一个dword
      u32 free_size; // 剩余空间字节数
}eep_status_t;
紧凑标志结构体定义:
typedef struct 
{
      u32 reclaim_begin; // 紧凑流程开始标志
      u32 reclaim_end; // 紧凑流程空间紧凑完成标志
      u32 reclaim_bak; // 紧凑流程已完成logic table和state table备份标志
}eep_reclaim_head_t;
紧凑操作信息结构体定义:
typedef struct 
{
      u16 free_page; // 准备做紧凑处理的新物理页页号(空闲页)
      u16 used_page; // 准备做紧凑处理的旧物理页页号(非空闲页)
      u32 reclaim_page; // 完成free_page和used_page记录标志
}eep_reclaim_info_t;
紧凑防拔信息表定义:
#define MAX_INFO ((C_EEP_PAGE_SIZE - sizeof(eep_status_t) - sizeof(eep_reclaim_head_t)) /                                                    sizeof(eep_reclaim_info_t))
typedef struct 
{
      eep_status_t eep_status; // NVM使用信息
      eep_reclaim_head_t reclaim_head; // 紧凑标志
      eep_reclaim_info_t reclaim_info[MAX_INFO]; // 紧凑操作信息表
}anti_tearing_t;
anti_tearing_t far anti_tearing_table;// 表一
anti_tearing_t far anti_tearing_table_bak;// 表二
uint16_t current_logic_index; // cache,current_logic_index = eep_status.current_logic_index
uint32_t eep_free_size;  // cache, eep_free_size = eep_status.free_size
anti_tearing_table和anti_tearing_table_bak互为备份表,即当anti_tearing_table为紧凑防拔信息原始表时,anti_tearing_table_bak为紧凑防拔信息工作表;反之,当anti_tearing_table_bak为原始表时,anti_tearing_table为工作表。这种设计是为了保证紧凑操作的原子性。
存储空间分配
对于应用提交长度为eep_size的空间申请,本发明先在eep_state_table_ebak表中从起始位置到最后一个已分配空间之间查找一个长度刚好为eep_size的空闲空间,并将其分配给该应用;如没有刚好长度相等的空闲空间,则将长度大于eep_size的空闲空间中长度最小的空闲空间分配给该应用。
如果所有空闲空间长度均小于eep_size,则检查用户空间底部的剩余空间有否大于或等于eep_size,如大于或等于eep_size,则从已分配空间的底部分配eep_size长度空间给该应用。
否则,空间申请失败。
空间分配过程就是更新eep_state_table_sbak和eep_logic_table_sbak的过程,即是state_table表对应的状态由空闲状态“0”修改为使用状态“1”,并在logic_table表中记录对应的物理块序号及逻辑表链接信息。
在空间分配和释放过程中,eep_state_table_sbak或eep_logic_table_sbak溢出(更新超过一页),则相应的更新工作表eep_state_table_ebak或eep_logic_table_ebak。在这里就体现出eep_state_table_sbak和eep_logic_table_sbak设置的重要性,只有当eep_state_table_sbak或eep_logic_table_sbak更新超过一页时才进行写操作,即将eep_state_table_sbak或eep_logic_table_sbak复制到相应的工作表eep_state_table_ebak或eep_logic_table_ebak中。由于NVM写一个字节和写一页的时间是相同的,所以eep_state_table_sbak或eep_logic_table_sbak的设置大大提高了管理操作的执行速度。
空间分配完成,free_size-=eep_size,并将logic_index及eep_offset返回给本次空间申请的应用。
存储空间释放
当应用提出空间释放请求时,除需提供长度参数eep_size,还需要提供参数logic_index和eep_offset,且这三个参数必须是空间申请时的值,应用必须保证这些参数的正确性。
空间释放的过程就是更新eep_state_table_sbak和eep_logic_table_sbak的过程,即是state_table表对应的状态由使用状态“1”修改为空闲状态“0”,并在logic_table表记录中清除对应的物理块序号及逻辑表链接信息。 
空间释放操作过程中,如eep_state_table_sbak或eep_logic_table_sbak溢出(更新超过一页),则需相应的更新工作表eep_state_table_ebak或eep_logic_table_ebak。
空间释放成功,free_size+=eep_size。
释放后的空间即为空闲空间,空闲空间可以重新再分配。
事务机制
为避免意外掉电等导致存储空间混乱,存储空间的分配和释放都必须在事务机制内进行。
事务启动
将管理表的原始表复制到工作表中,即复制eep_state_table到eep_state_table_ebak中、复制eep_logic_table到eep_logic_table_ebak中。
分配及释放
将工作表复制到cache(缓存表)中,即复制eep_state_table_ebak的对应页信息到eep_state_table_sbak中、复制eep_logic_table_ebak的对应页信息到eep_logic_table_sbak中;
分配及释放操作,就是修改cache,即修改eep_state_table_sbak和eep_logic_table_sbak,如操作过程涉及sbak跨页,则需先将sbak写入到对应的ebak页中;
预提交
将cache写入工作表,即将eep_state_table_sbak写入eep_state_table_ebak的对应页、将eep_logic_table_sbak写入到eep_logic_table_ebak的对应页、将eep_free_size和current_logic_index写入anti_tearing_table或anti_tearing_table_bak(同时index+=1)。
事务提交
以工作表替换原始表:将eep_logic_table_ebak复制(写入)到eep_logic_table、将eep_state_table_ebak复制(写入)到eep_state_table、释放(擦除)anti_tearing_table和anti_tearing_table_bak中index值小的一个表。
上电前滚
如预提交已完成,而事务提交尚未完成时发生意外掉电,因管理表已备份完整,重新上电后自动完成事务提交流程,完成事务处理,即执行事务前滚操作。
上电回滚
如预提交完成前发生意外掉电,此时备份表不一定完整,但原始管理表未被破坏,重新上电后自动执行事务重启,清除不完整的事务,回到事务开始前的状态,即执行事务回滚操作。
存储空间紧凑
对于空间释放后所留下的空闲空间,由于其不可能总是刚好满足后续再使用的长度需求,如果不做处理,则碎片会越来越多,进而影响后续的使用效率。为了充分提高NVM的使用效率,需要在多次空间释放操作之后进行空间紧凑处理:即将释放操作所产生的碎片归集在一起形成一个连续的空闲区间,以便于后期的分配利用。
紧凑操作流程就是将所有已使用的空间内容都移动到NVM用户区的顶部,而将释放操作所产生的空闲空间都移动到NVM用户区的底部的过程。也就是将NVM区间尾部已分配空间的数据复制到前端已释放的空闲区域,并将尾部的使用区域释放。
为保证紧凑操作的原子性,单次紧凑操作中数据的复制不得覆盖到本次紧凑操作前的有效数据。
图2描述了逻辑表、状态表及存储块结构。所有块长度相同,用逻辑块号(logic_index)标识。如何通过logic_index推算物理块号(physical_index)和物理地址,需要借助图2所示的逻辑分配表(eep_logic_table)。
eep_logic_table类似于MSDOS的FAT。由于块长度是固定的,如果数据长度不是数据块的整数倍,则会造成存储器的极大浪费。为避免这种浪费,又不失固定块长度的***优势,引入存储片的概念,片是最小存储单元。
上层应用只知道逻辑块描述(逻辑块号),通过eep_logic_table将其转换为物理块描述。这样就可以计算出存储器地址。
本发明提供事务处理机制。这就意味着所有的存储器操作直到其最终有效执行完成之前,都是可跟踪、可取消的。
为构建大于块长度的数据单元,就需要块链接。这种链接的建立是在逻辑表记录的第二个元素中记录指向后续块的logic_index(即next_logic_index)。一个数据单元是连续的,可以包含多个存储片。
图2的eep_logic_table结构其实是由一系列定长逻辑记录构成的。其记录项的第一个元素是物理块号(physical_index),第二个元素指向记录链接块的记录号(next_logic_index)。
图2的eep_state_table结构是由一系列描述物理块状态的定长记录(1字节或2字节)构成的。eep_state_table的记录项是与物理块一一对应的,即一条记录标示一个物理块的使用状态。而其每一位则标示一个存储片的使用状态:“0”标示对应的存储片为“空闲”,“1”标示对应的存储片为“已使用”。其中最低位标示对应物理块的最低地址存储片的使用状态,最高位标示对应物理块的最高地址存储片的使用状态。
图3描述整个卡片NVM空间的布局。NVM最顶端是为COS预留的特殊用途区间。预留区的底部是存储器管理配置表,记录eep_logic_table、eep_logic_table_ebak、eep_state_table、eep_state_table_ebak等管理表起始地址,NVM用户区起始地址、NVM补丁区起始地址(即用户区终止地址)等等。
其后依次是NVM备份页、anti_tearing_table、anti_tearing_table_bak、eep_logic_table、eep_logic_table_ebak、eep_state_table、eep_state_table_ebak及NVM用户区和NVM补丁区。
图4的空闲空间查找示意图展示了空间分配流程中空闲空间的查找过程。分配操作先在前期释放操作所产生的空闲空间中查找一个最合适的空闲区间:若找到一个长度正好等于空间申请的长度的空闲空间,则将其分配给此次应用申请者;否则将所有长度大于申请长度的空闲空间中长度最小的一个空闲空间分配给此次应用申请者;如空闲空间的长度均小于此次申请的长度,则在紧随最后一个已使用区间之后分配剩余空间给此次应用申请者。
具体操作流程如下:
current_physical_addr: 当前已使用尾地址;
size(i): 第i个连续空闲区长度;
g_eep_size: 当前申请长度;
found_size: 满足需求的空闲区。
step1:
从nvm起始地址到当前尾地址逐一查找空闲区并计算其连续长度和偏移。长度相等到则退出;否则记录满足条件的最小值min。
found_size=0xFFFFFFFF;//赋初值
if(g_eep_size == size(i))//长度匹配,ok
{     found_size = g_eep_size; return true;    }
else if((size(i) > g_eep_size) && (size(i) < found_size))
{     found_size = size(i);    }
i ++;
if(found_size == 0xFFFFFFFF)
{    return false;     } //未找到符合条件空闲区
else
{    return true;    } // 找到符合条件空闲区
step2:
如找到满足要求的空闲区,则将其分配(如不是完整空闲页,则查找其对应的逻辑记录序号;否则分配一个空闲逻辑记录项。
step3:
未找到满足要求的空闲区,则从当前尾址开始分配(如剩余空间足够大)。
图5是紧凑操作防掉电信息结构示意图。其中,index是紧凑防拔信息表计数器,current_logic_index是记录最后一个已使用物理块的逻辑记录指针,free_size是当前NVM剩余空闲空间字节数,后续内容是紧凑操作防拔信息。
为避免在更新紧凑防拔信息表时掉电而导致信息混乱的情况出现,在预提交之后或紧凑防拔信息计满时,紧凑防拔信息表是双份的。在任何时刻,两个表中只有一个是有效的。为区分原始表和工作表,信息表中设置一个16位计数器(index)。计数器值大的表是工作表;当两个计数器中一个为0xffff而另一个为0x0时,则0x0的表是工作表。
只在两个阶段紧凑防拔信息表有两份,其一是预提交操作之后至事务提交操作完成之前的阶段,其二是紧凑操作流程中紧凑防拔信息表计满并启用记录另一张表完成之前的操作阶段。在其它任何时刻紧凑防拔信息表只有一份。
在预提交操作前,只有一张anti_tearing_table表。在预提交操作流程中,将current_logic_index和free_size等信息写入一张新的anti_tearing_table表;在以上信息写入成功后,读出原anti_tearing_table中的index,将其加一,并连同(index+1)的反码一并写入新anti_tearing_table表中。这里采用二次写入的方式,是为了确保anti_tearing_table中的有效信息均是正确无误的。此时,有两份anti_tearing_table信息表。
在事务提交操作完成后将原anti_tearing_table表擦除,此时又恢复到只有一份anti_tearing_table信息表的状态,不过此时的信息表是更新后的信息表。
图6是在图5的紧凑操作防拔信息表基础之上描述紧凑操作流程。实际上紧凑过程分两个大的操作循环流程。
v      Step1. 在g_eep_state_table中从前到后找到第一个空闲页(free_page),如搜索到底部仍无空闲页则跳转到step7;
v      Step2. 从其下一页开始找到第一个非空闲页(used_page),如搜索到底部仍无非空闲页则跳转到step7;
v      Step3. 记录单次移动防拔信息: free_page, used_page;
v      Step4. 记录单次移动防拔标志reclaim_page(0xA5A5A5A5);
v      这里将step3和step4分开操作是为了确保防拔信息free_page和used_page的正确性;
v      Step5. 将非空闲页复制到空闲页,共计pages = used_page - free_page页:
n       5.1 将used_page页复制到free_page;
n       5.2  free_page++;
n       5.3  used_page++,向下查找一个非空页,如已到底部则转到step6;
n       5.4  pages --, 重复5.1~5.4,直至pages=0。
v      Step6. 从当前值向下查找free_page,重复step1~step5, 直至退出。
以上Step1~step6为NVM用户空间内容紧凑的操作流程;
以下step7~step15为紧凑操作中NVM管理表的处理流程。
v      Step7. 将g_eep_logic_table复制到g_eep_logic_table_ebak;
v      Step8. 将g_eep_state_table复制到g_eep_state_table_ebak;
v      Step9. 在g_eep_state_table中  从上到下找到第一个空闲页(free_page),如搜索到底部仍无空闲页则跳转到step13;
v      Step10. 从其下一页开始找到第一个非空闲页(used_page),如搜索到底部仍无非空闲页则跳转到step13;
v      Step11. 修改nvm管理表,共pages = used_page - free_page项: 
n       11.1 修改g_eep_logic_table:在g_eep_logic_table中查找used_page,将used_page所在的一页g_eep_logic_table信息复制到cache,在cache中将used_page改为free_epage;如跨页,则写入到对应的g_eep_logic_table_ebak;
n       11.2  修改g_eep_state_table:将state_table的对应页复制到cache,在state cache中修改g_eep_state_table_cache [used_page] = g_eep_state_table [free_page], g_eep_state_table_cache [free_page] = NULL;如跨页,则写入到g_eep_state_table_ebak;
n       11.3  used_page++, 向下查找一个非空页,如已到底部,则退出到step13;
n       11.4  pages --, 如pages=0,则跳转到step12。
n       11.5  重复11.1~11.4,直至退出。
v      Step12. 从当前值向下查找free_page,重复step9~step11, 直至退出;
v      Step13. 将state_cache写到g_eep_state_table_ebak; 将logic_cache写到g_eep_logic_table_ebak;
v      Step14. 记录nvm管理表备份完成确认信息:reclaim_bak;
v      Step15. 复制g_eep_logic_table_ebak到g_eep_logic_table, 复制g_eep_state_table_ebak到g_eep_state_table。
v      Step16. 至此,紧凑完成, 复制anti_tearing表头信息(不含紧凑防拔信息)到anti_tearing_bak,并擦除anti_tearing。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (10)

1.一种智能卡非易失性存储器的管理方法,其特征在于,包括以下步骤:
接收应用提交的空间申请指令,根据存储状态表中的空闲空间将合适的空闲空间分配给该应用,并更新存储状态表和逻辑分配表;
接收应用提交的空间释放请求指令,根据该空间释放请求指令执行空间释放操作,将对应存储空间的状态修改为空闲空间,并删除对应的逻辑分配表中的表项;
将释放操作所产生的碎片归集在一起形成一个连续的空闲区间,以便于后期的分配利用。
2.根据权利要求1所述的方法,其特征在于,
在分配空闲空间状态前,预先将逻辑分配表和存储状态表分别进行备份,产生各自的工作表;
在分配空间时,将备份的工作表分别复制到各自的缓存表中;更新逻辑分配表的缓存表中对应的物理块序号及逻辑表链接信息,并更新存储状态表的缓存表中对应存储空间的使用状态;然后将更新后的缓存表复制到各自的工作表中,并以工作表替换相应的原始表。
3.根据权利要求2所述的方法,其特征在于,步骤根据存储状态表中的空闲空间分配合适的空间给该应用具体为:
从存储状态表中查找与所申请的空间长度相等的空闲空间,若有,则将其分配给该应用;若没有,则将长度大于所申请的空间长度的空闲空间中长度最小的空闲空间分配给该应用;
如果所有空闲空间长度均小于所申请的空间长度,则检查存储器用户区空间底部的剩余空间是否大于或等于所申请的空间长度,若是,则从已分配空间的底部分配所申请的空间长度给该应用;否则,空间申请失败。
4.根据权利要求2所述的方法,其特征在于,执行空间释放操作时,修改逻辑分配表和存储状态表的缓存表,以最终更新存储状态表中的状态,并清除逻辑分配表中的记录。
5.根据权利要求1所述的方法,其特征在于,存储空间紧凑操作的步骤具体为:将所有已使用的空间内容都移动到存储器用户区的顶部,而将释放操作所产生的空闲空间都移动到存储器用户区的底部。
6.根据权利要求5所述的方法,其特征在于,在进行存储空间紧凑操作时,生成紧凑防拔信息原始表的备份工作表,在存储空间紧凑操作完成后,将紧凑防拔信息的备份工作表替换紧凑防拔信息原始表。
7.根据权利要求1-6中任一项所述的方法,其特征在于,还包括步骤:预先将存储器的空间划分为多个物理块,物理块的长度设置为128字节或者其整数倍。
8.根据权利要求7所述的方法,其特征在于,还包括步骤:
进一步将存储块划分为多个存储片,存储片为存储器的最小存储单元,存储状态表中的表项记录存储块以及存储片的使用状态。
9.根据权利要求2所述的方法,其特征在于,
在逻辑分配表或存储状态表的工作表完成更新后,相应原始表被替换前,若发生意外掉电,则重新上电后自动进行原始表的替换;
在逻辑分配表或存储状态表的工作表完成更新前,若发生意外掉电,且用于备份的相应工作表不完整,则重新上电后,自动清除不完整的事务,回到事务开始前的状态。
10.根据权利要求7所述的方法,其特征在于,在执行空间分配和空间释放操作时,若逻辑分配表或存储状态表的缓存表的更新超过一页,则先将更新后的缓存表复制到各自的工作表中。
CN201310619963.5A 2013-11-29 2013-11-29 智能卡非易失性存储器的管理方法 Active CN103678180B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310619963.5A CN103678180B (zh) 2013-11-29 2013-11-29 智能卡非易失性存储器的管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310619963.5A CN103678180B (zh) 2013-11-29 2013-11-29 智能卡非易失性存储器的管理方法

Publications (2)

Publication Number Publication Date
CN103678180A true CN103678180A (zh) 2014-03-26
CN103678180B CN103678180B (zh) 2017-11-24

Family

ID=50315805

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310619963.5A Active CN103678180B (zh) 2013-11-29 2013-11-29 智能卡非易失性存储器的管理方法

Country Status (1)

Country Link
CN (1) CN103678180B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105279097A (zh) * 2014-07-07 2016-01-27 北京数码视讯科技股份有限公司 一种调用瞬态对象的管理方法、设备及智能卡
CN105512342A (zh) * 2016-01-05 2016-04-20 上海交通大学 基于htm和nvram的内存事务性计算的持久性方法
CN105892938A (zh) * 2016-03-28 2016-08-24 乐视控股(北京)有限公司 一种磁盘缓存***的优化方法及***
CN106294189A (zh) * 2015-05-25 2017-01-04 中兴通讯股份有限公司 内存碎片整理方法及装置
CN107861887A (zh) * 2017-11-30 2018-03-30 科大智能电气技术有限公司 一种串行易失性存储器的控制方法
CN111143241A (zh) * 2019-12-30 2020-05-12 深圳Tcl数字技术有限公司 内存数据迁移方法、装置和存储介质
CN112527197A (zh) * 2020-12-09 2021-03-19 北京握奇智能科技有限公司 一种智能卡碎片存储空间整理方法、智能卡及***
CN113885926A (zh) * 2021-09-10 2022-01-04 北京中电华大电子设计有限责任公司 一种基于安全芯片的操作***在线升级方法
CN116126591A (zh) * 2022-12-23 2023-05-16 北京熵核科技有限公司 一种嵌入式***的事务机制

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1299096A (zh) * 2001-01-12 2001-06-13 常促宇 通用串行总线接口的大容量移动存储器及其实现方法
CN1632765A (zh) * 2004-12-31 2005-06-29 大唐微电子技术有限公司 一种闪存文件***管理方法
CN102004697A (zh) * 2010-10-21 2011-04-06 北京握奇数据***有限公司 一种Flash的回收方法和装置
CN102081577A (zh) * 2011-01-12 2011-06-01 厦门雅迅网络股份有限公司 Flash存储器的数据存储结构及其数据操作方式
US20130227207A1 (en) * 2011-05-12 2013-08-29 Densbits Technologies Ltd. Advanced management of a non-volatile memory

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1299096A (zh) * 2001-01-12 2001-06-13 常促宇 通用串行总线接口的大容量移动存储器及其实现方法
CN1632765A (zh) * 2004-12-31 2005-06-29 大唐微电子技术有限公司 一种闪存文件***管理方法
CN102004697A (zh) * 2010-10-21 2011-04-06 北京握奇数据***有限公司 一种Flash的回收方法和装置
CN102081577A (zh) * 2011-01-12 2011-06-01 厦门雅迅网络股份有限公司 Flash存储器的数据存储结构及其数据操作方式
US20130227207A1 (en) * 2011-05-12 2013-08-29 Densbits Technologies Ltd. Advanced management of a non-volatile memory

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105279097A (zh) * 2014-07-07 2016-01-27 北京数码视讯科技股份有限公司 一种调用瞬态对象的管理方法、设备及智能卡
CN105279097B (zh) * 2014-07-07 2019-06-18 北京数码视讯科技股份有限公司 一种调用瞬态对象的管理方法、设备及智能卡
CN106294189A (zh) * 2015-05-25 2017-01-04 中兴通讯股份有限公司 内存碎片整理方法及装置
CN106294189B (zh) * 2015-05-25 2020-09-25 中兴通讯股份有限公司 内存碎片整理方法及装置
CN105512342A (zh) * 2016-01-05 2016-04-20 上海交通大学 基于htm和nvram的内存事务性计算的持久性方法
CN105892938A (zh) * 2016-03-28 2016-08-24 乐视控股(北京)有限公司 一种磁盘缓存***的优化方法及***
CN107861887A (zh) * 2017-11-30 2018-03-30 科大智能电气技术有限公司 一种串行易失性存储器的控制方法
CN111143241A (zh) * 2019-12-30 2020-05-12 深圳Tcl数字技术有限公司 内存数据迁移方法、装置和存储介质
CN112527197A (zh) * 2020-12-09 2021-03-19 北京握奇智能科技有限公司 一种智能卡碎片存储空间整理方法、智能卡及***
CN113885926A (zh) * 2021-09-10 2022-01-04 北京中电华大电子设计有限责任公司 一种基于安全芯片的操作***在线升级方法
CN116126591A (zh) * 2022-12-23 2023-05-16 北京熵核科技有限公司 一种嵌入式***的事务机制
CN116126591B (zh) * 2022-12-23 2023-12-15 北京熵核科技有限公司 一种嵌入式***的事务机制

Also Published As

Publication number Publication date
CN103678180B (zh) 2017-11-24

Similar Documents

Publication Publication Date Title
CN103678180A (zh) 智能卡非易失性存储器的管理方法
TWI682278B (zh) 記憶體系統及控制方法
CN101278267B (zh) 具有经调度回收操作的非易失性存储器
US10831734B2 (en) Update-insert for key-value storage interface
TWI710900B (zh) 儲存裝置及方法
US7227788B2 (en) Memory management device and memory device
CN102841851B (zh) 闪存管理方法和闪存设备
CN101221536B (zh) 嵌入式***的内存管理方法及装置
CN101241446B (zh) 非易失数据存储装置中虚拟文件***命令调度方法和设备
CN101918913A (zh) 自动精简配置存储设备上的存储收回
CN102163175B (zh) 一种基于局部性分析的混合地址映射方法
CN102135942B (zh) 一种存储设备中实现损耗均衡的方法及存储设备
CN104424103B (zh) 固态储存装置中高速缓存的管理方法
US9213634B2 (en) Efficient reuse of segments in nonoverwrite storage systems
CN102629234B (zh) 一种单片机片内置Flash数据快速检索方法
JPWO2005106673A1 (ja) 不揮発性記憶装置及びデータ書込み方法
CN110674052B (zh) 内存管理方法、服务器及可读存储介质
CN103996412A (zh) 一种用于智能卡非易失性存储器的掉电保护方法
CN109683830A (zh) 一种全闪存列阵的数据写入方法、***及相关组件
CN103412822A (zh) 操作非易失性内存和数据操作的方法和相关装置
CN109558333B (zh) 具有可变额外存储空间的固态存储设备命名空间
CN102880553B (zh) 一种基于mcu的片外flash文件***的读写方法
WO2017022082A1 (ja) フラッシュメモリパッケージ、及び、フラッシュメモリパッケージを含むストレージシステム
CN102004697B (zh) 一种Flash的回收方法和装置
CN107678686A (zh) 基于硬件实现闪存的ftl功能的方法及其数据存储装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant