一种FLASH的回收方法和装置.pdf

上传人:n****g 文档编号:965223 上传时间:2018-03-21 格式:PDF 页数:24 大小:629.35KB
返回 下载 相关 举报
摘要
申请专利号:

CN201010520776.8

申请日:

2010.10.21

公开号:

CN102004697A

公开日:

2011.04.06

当前法律状态:

授权

有效性:

有权

法律详情:

专利权人的姓名或者名称、地址的变更IPC(主分类):G06F 12/02变更事项:专利权人变更前:北京握奇数据系统有限公司变更后:北京握奇数据股份有限公司变更事项:地址变更前:100015 北京市朝阳区东直门外西八间房万红西街2号燕东商务花园变更后:100015 北京市朝阳区东直门外西八间房万红西街2号燕东商务花园|||授权|||实质审查的生效IPC(主分类):G06F 12/02申请日:20101021|||公开

IPC分类号:

G06F12/02

主分类号:

G06F12/02

申请人:

北京握奇数据系统有限公司

发明人:

孙婉丽; 藏宏伟

地址:

100015 北京市朝阳区东直门外西八间房万红西街2号燕东商务花园

优先权:

专利代理机构:

北京同达信恒知识产权代理有限公司 11291

代理人:

黄志华

PDF下载: PDF下载
内容摘要

本发明涉及一种Flash的回收方法和装置,该方法中通过映射表中逻辑页的映射页,将可操作的空间扩展为由用户区和设定辅助区组成的映射区,确定满足设定回收条件时,从映射区中选取预回收扇区;将预回收扇区中的有效页的数据,重写到映射区中其它扇区中空闲页,有效页为已写入数据且在映射表作为映射页的页;将预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页,并对预回收扇区执行回收操作。本发明优化了现有Flash回收方法,提高了Flash的运行速度。

权利要求书

1.一种Flash的回收方法,其特征在于,包括:确定满足设定回收条件时,从映射区中选取预回收扇区,所述映射区包括由Flash中用户区和设定辅助区;将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的空闲页,所述有效页为已写入数据且在映射表中作为映射页的页,所述映射表用于建立逻辑页与映射页的映射关系;将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页,并对预回收扇区执行回收操作。2.如权利要求1所述的方法,其特征在于,确定满足设定回收条件之前,还包括:接收到写操作指令时确定写操作指向的逻辑页,并查找所述写操作指向的逻辑页在映射表中的第一映射页;根据写操作指令及所述第一映射页中数据组织要写入的数据;确定写入组织好的数据所需的空闲页数目根据所需的空闲页数目和映射区中的剩余空闲页数目,确定是否满足设定回收条件;对预回收扇区执行回收操作之后,还包括:从映射区中选取除指定页外的空闲页作为第二映射页,所述指定页为在映射区中指定的一个空闲页,初始化时用户区的所有逻辑页映射到同一指定页;在所述第二映射页上写入组织好的数据,并将映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页。3.如权利要求2所述的方法,其特征在于,根据所需的空闲页数目和剩余空闲页数目,确定是否满足设定回收条件,具体包括:所需的空闲页数目与设定阈值的和不大于所述剩余空闲页数目时,确定不满足设定回收条件;所需的空闲页数目与设定阈值的和大于所述剩余空闲页数目时,确定满足设定回收条件。4.如权利要求3所述的方法,其特征在于,所述设定阈值等于所述映射区中组成一个扇区的页数减一。5.如权利要求1所述的方法,其特征在于,所述从映射区中选取预回收扇区,具体包括:获取所述映射区中每个扇区中的无效页个数,所述无效页为已写入数据且未在映射表中被作为映射页的页;选取映射区中无效页最多的扇区为预回收扇区。6.如权利要求2所述的方法,其特征在于,所述映射表还包括第一字段和第二字段,所述第一字段用于标识无效或有效,所述第二字段用于标识映射表的流水号,写操作时使用的映射表为第一字段标识为有效的映射表,在所述第二映射页上写入组织好的数据时,还包括:新建一映射表,将第一字段标识为有效的映射表中除第一字段以外内容复制到新建映射表中,并将新建映射表中的第二字段加一;将映射表中写操作指向的逻辑页的第一映射页,修改为第二映射页,包括:在所述第二映射页上写入组织好的数据之后,将新建映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页;在新建映射表中写入标识为有效的第一字段,依据流水号将前一映射表中的第一字段标识修改为无效。7.如权利要求6所述的方法,其特征在于,将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页时,还包括:新建一映射表,将第一字段标识为有效的映射表中除第一字段以外内容复制到新建映射表中,并将新建映射表中的第二字段加一;将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页,具体包括:将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的扇区中空闲页之后,将所述预回收扇区中的有效页在新建映射表中的映射页,修改为重写该有效页数据的页;在新建映射表中写入标识为有效的第一字段,依据流水号将前一映射表中的第一字段标识修改为无效。8.如权利要求6或7所述的方法,其特征在于,所述映射表存放在映射表区时,所述映射表区的区域包括至少两个扇区,每次新建映射表时,还包括:确定映射表区中仅有一个扇区未写满,且当前新建的映射表在该未写满的扇区内不是第一个映射表,且确定此次写操作指令执行过程中未对映射区中扇区执行过回收操作或执行过回收操作但新建映射表会使映射表区写满时,对映射表区中写满映射表的扇区执行回收操作。9.一种操作Flash的回收装置,其特征在于,包括:预回收扇区选取单元,用于确定满足设定回收条件时,从映射区中选取预回收扇区,所述映射区由Flash中用户区和设定辅助区组成;重写单元,用于将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页,所述有效页为已写入数据且在映射表中作为映射页的页,所述映射表用于建立逻辑页与映射页的映射关系;第一映射关系修改单元,用于将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页;第一回收单元,用于在将有效页的数据重写到映射区中除预回收扇区外的空闲页后,对预回收扇区执行回收操作。10.如权利要求9所述的装置,其特征在于,还包括:第一映射页选取单元,用于接收到写操作指令时确定写操作指向的逻辑页,并查找所述写操作指向的逻辑页在映射表中的第一映射页;组织数据单元,用于根据写操作指令及查找到的第一映射页中数据组织要写入的数据;页数确定单元,用于确定写入组织好的数据所需的空闲页数目,及映射区中剩余空闲页数目,并触发确定是否满足设定回收条件;所述预回收扇区选取单元具体用于根据所需的空闲页数目和剩余空闲页数目,确定是否满足设定回收条件;该装置还包括:第二映射页选取单元,用于对预回收扇区执行回收操作后,从映射区中选取除指定页外的空闲页作为第二映射页,所述指定页为在映射区中指定的一个空闲页,初始化时用户区的所有逻辑页映射到同一指定页;第二映射关系修改单元,用于对预回收扇区执行回收操作后,在选取的第二映射页上写入组织好的数据,并将映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页。11.如权利要求10所述的装置,其特征在于,所述预回收扇区选取单元,具体用于在确定所需的空闲页数目与设定阈值的和不大于所述剩余空闲页数目时,确定不满足设定回收条件;确定所需的空闲页数目与设定阈值的和大于所述剩余空闲页数目时,确定满足设定回收条件。12.如权利要求9所述的装置,其特征在于,所述预回收扇区选取单元,具体包括:无效页确定单元,用于获取所述映射区中每个扇区中的无效页个数,所述无效页为已写入数据且未在映射表中被作为映射页的页;预回收扇区确定单元,选取映射区中无效页最多的扇区为预回收扇区。13.如权利要求10所述的装置,其特征在于,所述映射表还包括第一字段和第二字段,所述第一字段用于标识无效或有效,第二字段用于标识映射表的流水号,写操作时使用的映射表为第一字段标识为有效的映射表,还包括:第一新建映射表单元,用于在所述第二映射页上写入组织好的数据时,新建一映射表,将第一字段标识为有效的映射表中除第一字段以外内容复制到新建映射表中,并将新建映射表中的第二字段加一;第一映射关系修改单元,具体包括:第一修改单元,用于在所述第二映射页上写入组织好的数据之后,将新建映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页;第二修改单元,用于在新建映射表中写入标识为有效的第一字段,依据流水号将前一映射表中的第一字段标识修改为无效。14.如权利要求13所述的装置,其特征在于,还包括:第二新建映射表单元,用于将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页时,新建一映射表,将第一字段标识为有效的映射表中除第一字段以外内容复制到新建映射表中,并将新建映射表中第二字段加一;第二映射关系修改单元,具体包括:第三修改单元,用于在将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页之后,将所述预回收扇区中的有效页在新建映射表的映射页,修改为重写该有效页数据的页;第四修改单元,用于在新建映射表中写入标识为有效的第一字段,依据流水号将前一映射表中的第一字段标识修改为无效。15.如权利要求13或14所述的装置,其特征在于,所述映射表存放在映射表区时,所述映射表区的区域包括至少两个扇区,还包括:第二回收单元,用于每次新建映射表时,确定映射表区中仅有一个扇区未写满,且当前新建的映射表在该未写满的扇区内不是第一个映射表,且确定此次写操作指令执行过程中未对映射区中扇区执行过回收操作或执行过回收操作但新建映射表会使映射表区写满时,对映射表区中写满映射表的扇区执行回收操作。

说明书

一种Flash的回收方法和装置

技术领域

本发明涉及数据存储技术领域,尤其涉及一种Flash的回收方法和装置。

背景技术

闪存Flash在没有电流供应的条件下也能够长久地保存数据,其存储特性相当于硬盘,这项特性使得Flash成为各类便携型数字设备使用的存储介质。

闪存Flash通常情况下被划分为多个扇区,多个字节为一页,因此每个扇区包括多个页。对Flash进行读写时,以页为单位进行操作。在要写入数据的页为不可用状态如被其它文件数据占用时,对该页执行擦除操作。在Flash中无空闲页时,以扇区为单位执行擦除操作,因此是以扇区为单位的回收机制。

通常情况下便携型数字设备使用的Flash容量比较小,因此扇区也比较小。如智能卡芯片内部的Flash大小一般在256k以内,其扇区均在512字节以内,有64字节/128字节/256字节/512字节四种。对于这种小容量Flash的操作方式都是直接对其物理地址进行操作,具体为:

在执行写操作时,根据维护的页信息表,获取要写入数据的页是否为可用状态,其中要写入数据的页是由操作系统根据特定规则确定的;

在要写入数据的页为可用状态时,根据该页物理地址将要写入的数据写入;在要写入数据的页为不可用状态时,将该页进行擦除。在Flash中无空闲页时,以扇区为单位执行擦除操作实现回收。

对Flash采用直接对其物理地址进行操作的方式,在Flash容量比较小时,执行上述页擦除及扇区擦除的频率都比较高,但因为扇区小,擦写速度快,所以即使一条指令有几次对Flash的写操作都需要进行擦除也可以满足产品的性能要求。

但是目前越来越多的便携型数字设备使用大容量的Flash如NANDFlash,NANDFlash最大的优点在于容量可以做得很大,超过512MB容量的NAND产品相当普遍,如采用较多为1M容量,扇区大小为4k的Flash。对于这些大容量大扇区的片内Flash,操作系统可用的用户区比较小,如为64K。这样对于扇区划分较大,用户区较小的片内Flash,如果采用上述直接对物理地址操作的方式进行读写,由于用户区比较小也会比较频繁地出现页擦除及扇区擦除操作。而扇区擦除操作中,由于扇区比较大因此擦除操作占用的时间长,在实际应用中速度太慢无法被用户接受,而且每操作一个扇区内的数据时都要将全部4K数据擦除对Flash的寿命也是一个很大的影响。

目前对于管理扇区较大的NANDFlash,有的采用文件系统下一层的文件分配表FAT管理机制如FAT16、FAT32等。文件分配表FAT管理机制功能强大,适于管理存储空间比较大、文件管理复杂的场景,多应用于计算机。但是在智能卡应用中,对于扇区划分较大,用户区较小的片内Flash来说,采用FAT管理机制复杂有余,又不能物尽其用。

发明内容

本发明实施例提供一种Flash的回收方法及装置,用以优化现有Flash回收机制,减少回收次数和提高操作Flash的速度。

本发明提供一种Flash的回收方法,包括:

确定满足设定回收条件时,从映射区中选取预回收扇区,所述映射区包括由Flash中用户区和设定辅助区;

将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的空闲页,所述有效页为已写入数据且在映射表中作为映射页的页,所述映射表用于建立逻辑页与映射页的映射关系;

将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页,并对预回收扇区执行回收操作。

本发明还提供一种操作Flash的回收装置,包括:

预回收扇区选取单元,用于确定满足设定回收条件时,从映射区中选取预回收扇区,所述映射区由Flash中用户区和设定辅助区组成;

重写单元,用于将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页,所述有效页为已写入数据且在映射表中作为映射页的页,所述映射表用于建立逻辑页与映射页的映射关系;

第一映射关系修改单元,用于将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页;

第一回收单元,用于在将有效页的数据重写到映射区中除预回收扇区外的空闲页后,对预回收扇区执行回收操作。

利用本发明的Flash的回收方法及装置,具有以下有益效果:在将操作Flash的空间扩展到映射区的情况下,减少了Flash的回收时间间隔,因此不会影响操作Flash的数据读写速度,且提高了Flash的寿命。

附图说明

图1为本发明提供的Flash的回收方法流程图;

图2为依照本发明实施例中示例的对Flash划分后的物理结构;

图3为依照本发明实施例中采用动态建立映射方式时对应的Flash的回收方法流程图;

图4为依照本发明实施例中Flash的回收方法中实现删除操作的流程图;

图5为依照本发明实施例中Flash的回收方法中实现读取操作的流程图;

图6A、图6B为依照本发明实施例中Flash的回收方法的详细过程流程图;

图7为依照本发明实施例中Flash的回收装置的结构图。

具体实施方式

下面结合附图和实施例对本发明提出的Flash的回收方法和装置进行更详细地说明。

本发明能够避免现有智能卡操作系统运行时,使用复杂的Flash管理模式实现其操作的同时,又能够快速地进行Flash的操作,并保证Flash的损耗在一定程度上均衡。

对于智能卡操作Flash时,虽然Flash的容量非常大,例如有1M,但是对于智能卡操作系统来说,能够进行操作的区域即用户区是有限,如用户区为64K,因此进行Flash操作时,是针对这64K可见的用户区进行数据读写。本发明将对Flash中用户区划分得到的页作为逻辑页,操作Flash时只面向这些逻辑页进行Flash操作。

本发明提供的Flash的回收方法包括:确定满足设定回收条件时,从映射区中选取预回收扇区,所述映射区由Flash中用户区和设定辅助区组成;将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的空闲页,所述有效页为已写入数据且在映射表中作为映射页的页,所述映射表用于建立反映所有逻辑页的与映射页的映射关系,即反映所有逻辑页的映射页;将所述预回收扇区中的有效页在映射表中的映射页,即所述映射表中是所述预回收扇区中有效页的逻辑页的映射页,修改为重写该有效页数据的页,并对预回收扇区执行回收操作。本发明在映射区中空闲页不够时再进行上述回收操作,大大延迟了回收的时间间隔,保证运行速度的同时,又能够不失时机地回收足够页作为映射页来满足写操作的需要;由于回收机制中将有效页的数据首先读取到其它扇区空闲页中且会更新映射关系,因此不会写操作的正常运行。

依照本发明的实施例中,提供一种Flash的回收方法,如图1所示,该方法包括:

步骤S101,接收到写操作指令时确定写操作指向的逻辑页,所述逻辑页为对Flash中用户区划分得到的页;

写操作指令中对数据的写操作是以页为单位的,每次写操作都会指向一个要写入数据的逻辑页。

步骤S102,查找所确定的逻辑页在映射表中的第一映射页,该映射表用于反映所有逻辑页的映射页,初始化时所有逻辑页映射到空闲页中的同一指定页;

在映射表中建立所有逻辑页的映射页,这样,实际进行写操作时指向的页为其映射页,本发明在初始化时,将所有逻辑页映射到同一个指定空闲页。

步骤S103,根据查找到的第一映射页中数据及写操作指令组织要写入的数据;

由于写操作中既包含向一个空闲页中写入数据的操作,也包括对之前写入的某页数据进行修改的操作。因此,在查找到的第一映射页为空闲页时,说明操作系统还未向此次写操作指向的逻辑页写入数据,组织数据具体为将要写入的数据作为写入数据;在查找到第一映射页中有数据时,说明操作系统之前针对此次写操作指向的逻辑页写入过数据,对应地要修改这些数据,因此组织数据为对写操作指向的逻辑页的第一映射页中数据根据写操作指令进行修改。

步骤S104,确定写入组织好的数据所需的空闲页数目,及对映射区划分得到的页中剩余空闲页数目,映射区由用户区和Flash中除用户区外的设定辅助区组成;

步骤S105,根据所需的空闲页数目和剩余空闲页数目,确定是否满足设定回收条件,若不满足,执行步骤S106,否则执行步骤S108;

步骤S106,说明当前空闲页够用,从对所述映射区划分得到的页中,选取除指定页外的空闲页作为第二映射页;

组织好数据要写入时,应将组织好的数据写入到空闲页中。如果映射页是指定页,说明是针对该逻辑页第一次写入数据,将数据写入到除指定页外的空闲页中。优选地,如果写操作指向的逻辑页是空闲页时,可以将该逻辑页本身作为其映射页。如果映射页是除指定页外的页,说明是针对该逻辑页进行数据修改,修改后将修改好的数据写入到选取的空闲页中。

步骤S107,在第二映射页上写入组织好的数据,并将映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页,执行完该写操作指令。

因此,更新了逻辑页和映射页之间的映射关系。下次对该逻辑页中数据进行操作时,可以根据映射关系找到上次写入的数据。

本发明映射表中一个逻辑页对应一个映射页,上述第一映射页指未进行任何操作前查找到的映射页,第二映射页为进行相关操作后修改后的映射页。

步骤S108,确定满足设定回收条件时,从所述映射区中选取预回收扇区;

步骤S109,将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的扇区中空闲页;

步骤S110,将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页,对预回收扇区执行回收操作。

如果预回收扇区中的某页写入数据且是映射表中的映射页,不能直接将该页数据擦除,否则下次通过映射表会找不到该页数据,因此需要将这些页内的内容读取到其他扇区的空闲页中,并建立写入数据的页与之前逻辑页的映射关系,则下次对之前逻辑页进行操作时,还可以根据新的映射关系找到这些数据。

本发明提供的上述Flash的回收方法中,基于对Flash的写操作中将写操作实际可用的空间扩展到为映射区,映射区要大于用户区,因此对于大扇区的Flash,用户区较小的智能卡来说,充分了Flash中空闲空间;在映射区中空闲页不够时再进行上述回收操作,大大延迟了回收的时间间隔,保证运行速度的同时,又能够不失时机地回收足够页作为映射页来满足写操作的需要;由于回收机制中将有效页的数据首先读取到其它扇区空闲页中且会更新映射关系,因此不会写操作的正常运行。

基于上述回收机制中的写操作,在写操作写入修改好的数据时,不用再像以前一样先将所在的页擦除再写,这样就大大提高了写Flash的速度;由于Flash应用中多数操作都是针对用户区前部分,不需要每次写都擦就意味着大大增强了Flash的使用寿命,使损耗均衡和整个区域的使用效率得到了保证。

优选地,该方法中,在步骤S110完成对预回收扇区的回收操作后,返回步骤S106,在空闲页足够用的情况下执行完写操作指令。

优选地,本实施例中所需的空闲页数目与设定阈值的和不大于所述剩余空闲页数目时,确定不满足设定回收条件。所需的空闲页数目与设定阈值的和大于所述剩余空闲页数目时,确定满足设定回收条件。设置设定阈值的目的是为了防止剩余空闲页不够写入预回收扇区中的有效页数据。

另外,预回收扇区的选取原则是有效页越少越好,而无效页越多越好,其中无效页为已写入数据且未在映射表中被作为映射页的页,即操作系统不再使用而又不是空闲页的页。因此所选取的预回收扇区中至少有一个无效页,本实施例中设定阈值等于所述映射区中组成一个扇区的页数减一。可以保证有足够的空闲页存放有效页数据。

本实施例中设定辅助区采用与所述用户区相同的空间划分方式,所述设定辅助区的区域由Flash中除用户区外的闲置空间确定;所述映射表存放在映射表区,所述映射表区的区域由Flash中除映射区外的闲置空间确定。

仍以1M容量,用户区为64K的Flash为例,如图2所示,设定辅助区采用与用户区相同的空间划分方式,具体为4K为一个扇区(sector),256字节为一个页(page),用户区内有16个sector,每个sector内是16个page。设定辅助区包括3个sector,用来扩展用户区的映射关系,设定辅助区的区域的设计在Flash总空间充足的情况下可以任意分配其数量。映射表区包括2个sector,以页为单位进行映射,建立逻辑页对应的映射页。

从上面逻辑页的映射过程可以看出,写操作会使实际被使用的页作为映射页被记录在映射表中,因此,初始化应将所有逻辑页映射到同一空闲的指定页,代表所有的其它所有页都可以使用。优选地,初始化时所有逻辑页映射的同一指定页为对Flash中用户区划分得到的第一个扇区的第一页,当然,也可以是其它空闲页。

建立映射表的目的是反映逻辑页对应的映射页,下面给出依照本发明实施例的一种优选的映射表反映逻辑页的映射页方式,本实施例中映射表包括与所有逻辑页总数相等数量个映射项,每个映射项反映一个逻辑页的一个映射页,如有256个逻辑页时,对应256个映射项;每个映射项由扇区号(sector号)和页号(page号)组成,且所有映射项中扇区号占用的字节数相等及页号占用的字节数相等,每个映射项反映的逻辑页由该映射项在映射表中的偏移确定,反映的映射页由该映射项中的扇区号和页号确定。

每个页的物理地址可以由其在Flash中所在sector及在sector内的page号确定,因此通过上述映射项的内容(扇区号和页号)可以唯一索引到映射页的物理地址。由于每个映射项占用的字节数是相同的,因此可以通过映射项的偏移确定其反映的逻辑页。具体地,映射项中扇区号占用的字节数,由对映射区划分得到的页组成的扇区个数总数确定,映射项中页号占用的字节数由组成一个扇区的页数确定。

优选地,本实施例中映射表还包括第一字段(本实施例称T1字段)和第二字段(本实施例称T2字段),T1字段用于标识无效或有效,T2字段用于标识映射表的流水号,写操作时使用的映射表即查找逻辑页的第一映射页的映射表,具体为T1字段标识为有效的映射表,如图3所示,依照本发明另一实施例的Flash的回收方法,包括:

步骤S301,接收到写操作指令时确定写操作指向的逻辑页;

步骤S302,查找所确定的逻辑页在映射表中的第一映射页,该映射表具体为T1字段标识为有效的映射表,初始化时建立的映射表中T1字段标识为有效;

步骤S303,根据查找到的第一映射页中数据及写操作指令组织要写入的数据;

步骤S304,确定写入组织好的数据所需的空闲页数目,及对映射区划分得到的页中剩余空闲页数目;

步骤S305,根据所需的空闲页数目和剩余空闲页数目,确定是否满足设定回收条件,若不满足,执行步骤S306,否则执行步骤S310;

步骤S306,说明当前空闲页够用,从对所述映射区划分得到的页中,选取除指定页外的空闲页作为第二映射页,在第二映射页上写入组织好的数据;

步骤S307,新建一映射表,将T1字段标识为有效的映射表中除T1字段以外内容复制到新建映射表中,并将新建映射表中T2字段加一;

步骤S308,在所述第二映射页上写入组织好的数据之后,将新建映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页;

步骤S309,在新建映射表中写入标识为有效的T1字段,依据流水号将前一映射表中的T1字段标识修改为无效,执行完该写操作指令。

步骤S310,确定满足设定回收条件时,从所述映射区中选取预回收扇区;

步骤S311,将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的扇区中空闲页;

步骤S312,新建一映射表,将T1字段标识为有效的映射表中除T1字段以外内容复制到新建映射表中,并将新建映射表中T2字段加一;

步骤S313,将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的扇区中空闲页之后,将所述预回收扇区中有效页在新建映射表中的映射页,修改为重写该有效页数据的页;

步骤S314,在新建映射表中写入标识为有效的T1字段,依据流水号将前一映射表中的T1字段标识修改为无效,并执行扇区回收操作,并返回步骤S306。

上述T1字段和T2字段用来在创建新映射表完成后和去使能前一个映射表之前断电后再次上电时判断使用,操作过程保证了在写映射表断电时,再次上电时保证了数据不会因断电被找错。

由于在映射表区中每执行一次写操作指令,会涉及到映射表的新建,因此需要提供一种对映射表区的回收机制,本实施例提供的Flash回收方法中,映射表存放在映射表区时,映射表区的区域包括至少两个扇区,每次新建映射表时,还包括:

确定映射表区中仅有一个扇区未写满,且当前新建的映射表在该未写满的扇区内不是第一个映射表,且确定此次写操作指令执行过程中未对映射区中扇区执行过回收操作时,对映射表区中写满映射表的扇区执行回收操作。

这里不以最后一个未写满的扇区的第一次被写为映射表区回收判断条件,是为了防止断电后找不到前一个流水号的映射表引起数据混乱。

优选地,还包括:确定映射表区中仅有一个扇区未写满,且当前新建的映射表在该未写满的扇区内不是第一个映射表,且确定此次写操作指令执行过程中对映射区中扇区执行过回收操作,在当前新建映射后映射表区所有扇区已写满时,对映射表区中之前写满映射表的扇区执行回收操作。上述方法从很大程度上避免了一起回收,如果到最后都没有机会回收映射表区域,那么强制一起回收,这种事件发生概率极小,对性能影响不会很大。

本发明实施例一方面保证了FLASH在执行过程中不会因为需要回收而降低执行指令的速度,另一方面保证了在异常情况发生的时候能够有效的恢复原数据,在没有特殊额外断电保护的情况下实现了断电保护的效果。动态回收空间的机制也使得FLASH的回收效率更高。

本实施例中确定空闲页所依据的信息除了映射表中的映射页以外,还利用了页信息表,页信息表用于标识页的使用信息,所标识的页的使用信息通过上电时遍历映射区获得,随着页的使用和回收及而更新,如在上述选取了空闲页写入数据后,页信息表中相应地将这些空闲页标识为已写入数据。优选地,本实施例中确定映射区中空闲页具体包括:将映射区中在页信息表中标识为空闲页且未在映射表中作为映射页的页,确空为映射区中的空闲页。

本实施例中在断电再次上电后接收到写操作指令时,确定写操作中查找逻辑页的第一映射页使用的映射表,即确定有效映射表的步骤,具体包括:

依据流水号查找两个最新建立的映射表;在这两个映射表中:

1)较老的映射表中T1字段标识为无效,且较新的映射表中T1字段标识为有效时,确定较新的映射表为写操作使用的映射表;

说明上次写操作及修改映射表的步骤已完成,因此使用最新的映射表。

2)两个映射表中T1字段均标识为有效,确定较新的映射表为写操作使用的映射表,并将较老的映射表T1字段修改为无效;

说明上次写操作及修改映射表的步骤已完成但未将较老映射表修改为无效时发生断电,因此可以使用最新的映射表。

3)较老的映射表中T1字段标识为有效,且较新的映射表中T1字段未填写时,确定较老的映射表为写操作使用的映射表。

这种情况下,断电有可能是在数据写入未完成或在数据写入完成而映射关系未修改时断电,也可能是在映射关系修改完后断电的,因为不确定断电时机,因而采用较老的映射表查找数据。

优选地,本实施例中上述映射表还包括校验字段XOR,所述校验字段XOR的取值由所述映射表中除T1字段外的内容累加和确定,这样,在上述确定写操作中使用的映射表的步骤中,还包括对上述两个最新的映射表,根据映射表中校验字段XOR进行校验的步骤,如对于3)这种情况,如果最新的映射表中的校验字段XOR与较老的映射表校验字段XOR不同,说明已完映射关系修改而填入新的校验字段,因此可以确定最新的映射表为有效的映射表。这种操作过程保证了在写映射表断电时,再次上电,可以根据有效的映射表,及其信息项中的校验值来判断当前最新的映射表是否正确,若不正确,采用流水号较老的用,保证了数据不会因断电被找错。

在文件系统的操作中,对Flash的操作一般为读操作、写操作和擦除操作。在上述实施例给出的写操作的基础上,优选地,本实施例中映射表还包括V字段,所述V字段用于记录初始化时所有逻辑页映射到的同一指定页,如图4所示,还包括:

步骤S401,接收到删除操作指令时,确定删除操作指向的逻辑页;

步骤S402,查找删除操作指向的逻辑页在映射表中的第一映射页;

在采用上述动态建立映射表的方式时,这里使用的映射表为当前T1字段标识有效的映射表。

步骤S403,在查找到的第一映射页中写入使该第一映射页视为空闲页的数据;

现有Flash初始化时被格式化为全FF,因此数据为全FF的页为被视为空闲页。这样,本实施例中可以将要删除的文件实际占用的页执行一次数据写入操作,即将该页数据修改为全FF。由于将该页更新为空闲页,页信息表该页的使用信息由已写入数据更新为空闲页。

步骤S404,将映射表中删除操作指向的逻辑页的第一映射页,修改为所述映射表中V字段记录的指定页。

这样下次对该逻辑页进行写操作时,发现当前映射页为空闲页且之前的映射页已不在映射表中,说明还未被使用而可以列入空闲页中。

本发明实施例中擦除实事上只是一个虚拟操作,不会真正擦除。跟写的过程类似,只是将写的数据写为全FF,在写到整页都为FF的时候,将该逻辑页映射在指定页上即可。这样即节约了擦的时间,又能够极大地节约flash的存储空间,提高了FLASH的存储效率,并且能够延长Flash的回收时间,从性能、效率、和延长使用寿命上都起到了作用。

本实施例中基于上述实施例中给出的操作Flash方法中的写操作,如图5所示,还包括:

步骤S501,接收到读操作指令时确定读操作指向的逻辑页;

步骤S502,查找读操作指向的逻辑页在映射表中的第一映射页;

在采用上述动态建立映射表的方式时,这里使用的映射表为当前T1字段标识有效的映射表

步骤S503,根据所述读操作指令在所述第一映射页的相应位置读取数据。因此实现了Flash的读操作。

下面仍以1M容量,用户区为64K的Flash为例,说明本发明实施例中上述映射表的结构,如表1所示,该映射表中包括256个映射项,由于每个扇区有16页,所以采用4bit的页号;由于用户区有16个扇区,设定辅助区有3个扇区,因此最少要5bit扇区号,为了方便表示,本实施例中扇区号采用一个字节。这样每个映射项占用1.5个字节,其中扇区号占用前一个字节,页号占用后半个字节。每个映射项在映射表中的偏移除以1.5字节,就是其所代表的逻辑页,这样映射项的前一个字节表示该逻辑页的映射页所在的sector,后半个字节代表该逻辑页的映射页所在sector内的page号。在初始化后的状态下,由于Flash全部区域为FF状态,映射表的每一映射项的映射页都指向第一个全FF的page。

表1  映射表的结构

表1中,T1字段用于标识该映射表为有效还是无效,T2字段标识映射表的流水号,V1-V5为V字段,记录初始化时所有逻辑页映射到的同一指定页,本实施例中也将该指定页称为多映射页。该字段还可以记录映射到多映射页的逻辑页个数,并在映射页动态更新时相应进行更新。校验字段XOR是当前映射表所有数据的累加和的值,用来判断当前映射表是否完全正确。

本实施例中映射表结构中包含8字节映射信息项(即T1、T2、V1-V5和XOR)及512*8字节映射关系项,即本实施例为每个表的映射关系分配的空间大于其实际占用的空间如为每个映射表分配256*2个字节,以方便管理。

如表2所示,为初始化状态下的映射项,每1.5个字节表示一个映射关系,被映射的逻辑页由映射表的偏移决定,每1.5个字节偏移,被映射的逻辑页号增一,第一个代表逻辑页扇区的page 0,其映射页为物理扇区的page 1,page1内的数据为全FF,依次类推。

表2  初始状态下映射项

本发明上述实施例中,接收到写操作指令时执行写操作,通常情况下,一个写操作指令中可能包含多次写操作,如对于多个逻辑页涉及到写操作的情况包括跨页修改数据的情况。本发明实施例中接收到写操作指令时,对写操作指令进行解析,每解析到一次写操作,执行上述步骤S101~步骤S103完成一次写操作,在执行完写操作指令中的所有写操作后,再执行步骤S104。

依照本发明的优选实施例中,在接收到写操作指令时,具体是先在RAM中缓存中组织好数据,每次执行写操作时,在查找到的第一映射页中有数据时,将所述第一映射页中数据首先读取到RAM中进行缓存;根据读取的数据及写操作指令,在RAM中组织此次写操作要写入的数据,并在RAM记录此次写操作指向的逻辑页。对于第一映射页为空闲页的情况,直接在RAM中组织此次写操作要写入的数据,并记录此次写操作指向的逻辑页。

本实施例中在执行完写操作指令中的所有写操作后,根据所记录的不同逻辑页的个数,确定要选取的空闲页数目;从对所述映射区划分得到的页中,选取所确定的数目个除指定页外的空闲页作为第二映射页;将每次写操作在RAM中缓存的组织好的数据,写入一个空闲的第二映射页;并根据此次写操作中在RAM中记录的逻辑页,在映射表中将此次写操作指向的逻辑页的第一映射页,修改为写入此次写操作组织好的数据的第二映射页。这种操作方法是以每条指令为单位进行写操作启动的,指令执行过程中不直接在Flash中进行逐个的写操作,而是先在RAM中组织好此次要写入Flash所有数据后再进行数据写入,很大的提高了操作的效率,节约了指令执行时间,提高了设备性能。本实施例中如果采用映射表流水号的控制,可以省去了对断电保护的操作,可以通过这种机制直接实现指令执行的数据完整性。

另外,在解析写操作指令过程中,可能会涉及到对一个逻辑页的多次写操作,本实施例中对于这种情况,每次执行写操作时,在查找此次写操作指向的逻辑页在映射表中的第一映射页之前,还包括:确定RAM中记录有此次写操作指向的逻辑页时,在RAM中查找记录该逻辑页时所缓存的组织好的数据;根据查找到的所缓存的组织好的数据及写操作指令,在查找到的所缓存的组织好的数据位置,重新组织此次写操作要写入的数据;重新组织好数据时,确定执行完此次写操作。即直接在RAM中完成该条写操作指令中对相应页的数据修改,而不需要去Flash修改再存放然后再修改。

另外,在使用页信息表时,所述页信息表存放在RAM中,在上电时确定写操作中使用的映射表后,为了进一步方便操作,将确定的写操作使用的映射表区中的映射表缓存在RAM,在执行写操作时使用的映射表具体为RAM中缓存中的映射表,而不采用Flash中的有效映射表。在执行完所有写操作后,在将映射表区中新建映射表中写操作指向的逻辑页的第一映射页,修改为第二映射页;同时也将所述RAM中缓存的映射表中写操作指向的逻辑页的第一映射页,修改为第二映射页,实现同步更新。在确定满足设定回收条件将有效页内容读取到其它扇区空闲页后,将映射表区的新建映射表中是所述预回收扇区中有效页的映射页,修改为重写该有效页数据的页的同时,将RAM中缓存的映射表中是所述预回收扇区中有效页的映射页,修改为重写该有效页数据的页。

这样,下次接收到写操作指令时,可以直接使用RAM缓存的的页信息表和映射表进行写操作。修改完RAM和映射表区中新建映射表的映射关系之后,清空执行所述写操作指令中写操作时在RAM中缓存的组织好的数据和记录的逻辑页;发送指令返回码指示写操作指令执行完毕。

如图6A所示,给出本发明实施中在上电后接收到写操作指令时执行写操作的详细过程,该实施例中,以映射表区有两个扇区为例,具体包括:

步骤S601,上电后遍历映射区,获得这些区域内页的使用信息并将其保存在RAM中的页信息表中,确定映射表区中有效的映射表,并将映射表区中有效的映射表缓存到RAM中;

该步骤中,确定映射表区中有效映射表具体根据映射表中T1字段和T2字段,确定方法如前所述。

步骤S602,接收到写操作指令时,对写操作指令解析过程中解析到写操作时,执行步骤S603;

步骤S603,确定此次写操作指向的逻辑页是否已记录在RAM中,若是,执行步骤S604’,否则执行步骤S604;

步骤S604’,在RAM中查找记录该逻辑页时所缓存的组织好的数据;根据查找到的所缓存的组织好的数据及写操作指令,在查找到的所缓存的组织好的数据位置,重新组织此次写操作要写入的数据,执行步骤S608;

步骤S604,查找此次写操作指向的逻辑页在RAM中的映射表中的第一映射页;

步骤S605,确定查找到的第一映射页是否为空闲页,若不是空闲页,执行步骤S606,否则执行步骤S607;

步骤S606,将所述第一映射页中数据首先读取到RAM中;

本实施例中,具体为读出到RAM的data缓存中。

步骤S607,在RAM中组织此次写操作要写入的数据,并在RAM中记录此次写操作指向的逻辑页。

如果读出了第一映射页数据的情况下,根据读取的数据及写操作指令,在RAM中组织此次写操作要写入的数据,而对于第一映射页为空闲页的情况,直接在RAM中组织此次写操作要写入的数据,并在RAM中记录此次写操作指向的逻辑页。

步骤S608,在指令还没有完成时,继续进行指令解析,解析过程中确定是否执行完所有写操作,若是,执行步骤S609,否则返回步骤S603执行下一次写操作;

这里的未执行完所有写操作包括写操作中对一个文件的写入需要跨页写入的情况。

如图6B所示,步骤S609,根据RAM中所记录的不同逻辑页的个数,确定所需的空闲页数目n3,根据映射表和页信息表确定及对映射区中剩余空闲页数目n2;

步骤S610,根据所需的空闲页数目n3和剩余空闲页数目n2,确定不满足设定回收条件时,执行步骤S611,否则执行步骤S620;

仍以上述示例说明,将设定阈值n1为15,在n1+n3>n2时启动回收。

步骤S611,从对所述映射区划分得到的页中,选取所确定的数目个除指定页外的空闲页作为第二映射页,将每次写操作在RAM中缓存的组织好的数据,写入一个空闲的第二映射页;

步骤S612,在映射表区查找空闲区域,并新建一映射表,将T1字段标识为有效的映射表中除T1字段以外内容复制到新建映射表中,并将新建映射表中T2字段加一;

步骤S613,判断新建的映射表是否是在当前扇区中第一个映射表,若是,执行步骤S616,否则执行步骤S614;

步骤S614,判断映射表区中另一扇区是否已被回收,即另一个扇区是否为全FF,若是,执行步骤S616,否则,执行步骤S615;

步骤S615,对映射表区中的另一个扇区执行回收操作;

步骤S616,在所有第二映射页上写入组织好的数据之后,将映射表区中新建映射表中及RAM中映射表中,每次写操作指向的逻辑页的第一映射页,修改为写入此次写操作组织好的数据的第二映射页;

优选地,本实施例中上述页信息表是缓存在RAM中的pagebuf数据结构中,pagebuf数据结构里面存放的数据代表页的使用信息,例如对于上述示例的16个扇区用户区和3个扇区设定辅助空间的情况,pagebuf数据结构的大小是(16*16+16*3)/8=38字节,也就是说,页信息表中的每个bit代表映射表区中一个page的使用情况,为1代表该页为空闲页,即该页数据为全ff,为0代表该页已不可用,即该页数据不为全ff。当需要分配新的映射页的时候,先在pagebuf中找到为1的页,再看该页是否是多映射页或在映射表作为映射页,如果既不是多映射页,也不映射表的映射页,代表该页可以被分配为新的映射页并可以直接写入数据,写入数据后更新pagebuf中该页为不可用。

步骤S617,在新建映射表中写入标识为有效的T1字段,依据流水号将前一映射表中的T1字段标识修改为无效;

步骤S618,清空执行所述写操作指令中写操作时在RAM中缓存的组织好的数据和记录的逻辑页;

步骤S619,发送指令返回码指示写操作指令执行完毕。

步骤S620,选取映射区中无效页最多的扇区为预回收扇区;

步骤S621,将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的扇区中空闲页,然会对预回收扇区执行回收操作;

步骤S622,在映射表区查找空闲区域,并新建一映射表,将T1字段标识为有效的映射表中除T1字段以外内容复制到新建映射表中,并将新建映射表中T2字段加一;

步骤S623,判断新建的映射表是否是在当前扇区中第一个映射表,若是,执行步骤S627,否则执行步骤S624;

步骤S624,判断映射表区中另一扇区是否已被回收,即另一个扇区是否为全FF,若是,执行步骤S625,否则,执行步骤S627;

步骤S625,判断在此次写操作指令中是否执行过映射表区回收及映射表区是否已写满,在未执行过映射表区回收或执行过映射表区回收在当前新建映射后映射表区所有扇区是否已写满,执行步骤S626,否则执行步骤S627;

步骤S626,对映射表区中的另一个扇区执行回收操作;

步骤S627,将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的扇区中空闲页之后,将新建映射表中是所述预回收扇区中有效页的映射页,修改为重写该有效页数据的页;

步骤S628,在新建映射表中写入标识为有效的T1字段,依据流水号将前一映射表中的T1字段标识修改为无效,返回执行步骤611。

依照本发明实施例中还提供一种操作Flash的回收装置,如图7所示,包括:预回收扇区选取单元701,用于确定满足设定回收条件时,从映射区中选取预回收扇区,所述映射区由Flash中用户区和设定辅助区组成;重写单元702,用于将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页,所述有效页为已写入数据且在映射表中作为映射页的页,所述映射表用于建立逻辑页与映射页的映射关系;第一映射关系修改单元703,用于将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页;第一回收单元704,用于在将有效页的数据重写到映射区中除预回收扇区外的空闲页后,对预回收扇区执行回收操作。

优选地,该装置还包括:第一映射页选取单元705,用于接收到写操作指令时确定写操作指向的逻辑页,并查找所述写操作指向的逻辑页在映射表中的第一映射页;组织数据单元706,用于根据写操作指令及查找到的第一映射页中数据组织要写入的数据;页数确定单元707,用于确定写入组织好的数据所需的空闲页数目,及映射区中剩余空闲页数目,并触发确定是否满足设定回收条件;所述预回收扇区选取单元701具体用于根据所需的空闲页数目和剩余空闲页数目,确定是否满足设定回收条件;该装置还包括:

第二映射页选取单元708,用于对预回收扇区执行回收操作后,从映射区中选取除指定页外的空闲页作为第二映射页,所述指定页为在映射区中指定的一个空闲页,初始化时用户区的所有逻辑页映射到同一指定页;

第二映射关系修改单元709,用于对预回收扇区执行回收操作后,在选取的第二映射页上写入组织好的数据,并将映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页。

所述预回收扇区选取单元701,具体用于在确定所需的空闲页数目与设定阈值的和不大于所述剩余空闲页数目时,确定不满足设定回收条件;确定所需的空闲页数目与设定阈值的和大于所述剩余空闲页数目时,确定满足设定回收条件。

优选地,所述预回收扇区选取单元701,具体包括:无效页确定单元,用于获取所述映射区中每个扇区中的无效页个数,所述无效页为已写入数据且未在映射表中被作为映射页的页;预回收扇区确定单元,选取映射区中无效页最多的扇区为预回收扇区。

优选地,所述映射表还包括第一字段和第二字段,所述第一字段用于标识无效或有效,所述第二字段用于标识映射表的流水号,写操作时使用的映射表为第一字段标识为有效的映射表,该装置还包括:

第一新建映射表单元710,用于在所述第二映射页上写入组织好的数据时,新建一映射表,将第一字段标识为有效的映射表中除第一字段以外内容复制到新建映射表中,并将新建映射表中第二字段加一;第一映射关系修改单元703,具体包括:第一修改单元,用于在所述第二映射页上写入组织好的数据之后,将新建映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页;第二修改单元,用于在新建映射表中写入标识为有效的第一字段,依据流水号将前一映射表中的第一字段标识修改为无效。

优选地,该装置还包括:第二新建映射表单元711,用于将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页时,新建一映射表,将第一字段标识为有效的映射表中除第一字段以外内容复制到新建映射表中,并将新建映射表中第二字段加一;第二映射关系修改单元709,具体包括:第三修改单元第三修改单元,用于在将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页之后,将所述预回收扇区中的有效页在新建映射表的映射页,修改为重写该有效页数据的页;第四修改单元,用于在新建映射表中写入标识为有效的第一字段,依据流水号将前一映射表中的第一字段标识修改为无效。

优选地,所述映射表存放在映射表区时,所述映射表区的区域包括至少两个扇区,还包括:第二回收单元712,用于每次新建映射表时,确定映射表区中仅有一个扇区未写满,且当前新建的映射表在该未写满的扇区内不是第一个映射表,且确定此次写操作指令执行过程中未对映射区中扇区执行过回收操作或执行过回收操作但新建映射表会使映射表区写满时,对映射表区中写满映射表的扇区执行回收操作。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

一种FLASH的回收方法和装置.pdf_第1页
第1页 / 共24页
一种FLASH的回收方法和装置.pdf_第2页
第2页 / 共24页
一种FLASH的回收方法和装置.pdf_第3页
第3页 / 共24页
点击查看更多>>
资源描述

《一种FLASH的回收方法和装置.pdf》由会员分享,可在线阅读,更多相关《一种FLASH的回收方法和装置.pdf(24页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN102004697A43申请公布日20110406CN102004697ACN102004697A21申请号201010520776822申请日20101021G06F12/0220060171申请人北京握奇数据系统有限公司地址100015北京市朝阳区东直门外西八间房万红西街2号燕东商务花园72发明人孙婉丽藏宏伟74专利代理机构北京同达信恒知识产权代理有限公司11291代理人黄志华54发明名称一种FLASH的回收方法和装置57摘要本发明涉及一种FLASH的回收方法和装置,该方法中通过映射表中逻辑页的映射页,将可操作的空间扩展为由用户区和设定辅助区组成的映射区,确定满足设定回收。

2、条件时,从映射区中选取预回收扇区;将预回收扇区中的有效页的数据,重写到映射区中其它扇区中空闲页,有效页为已写入数据且在映射表作为映射页的页;将预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页,并对预回收扇区执行回收操作。本发明优化了现有FLASH回收方法,提高了FLASH的运行速度。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书4页说明书13页附图6页CN102004710A1/4页21一种FLASH的回收方法,其特征在于,包括确定满足设定回收条件时,从映射区中选取预回收扇区,所述映射区包括由FLASH中用户区和设定辅助区;将预回收扇区中有效页的数据。

3、,重写到映射区中除预回收扇区外的空闲页,所述有效页为已写入数据且在映射表中作为映射页的页,所述映射表用于建立逻辑页与映射页的映射关系;将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页,并对预回收扇区执行回收操作。2如权利要求1所述的方法,其特征在于,确定满足设定回收条件之前,还包括接收到写操作指令时确定写操作指向的逻辑页,并查找所述写操作指向的逻辑页在映射表中的第一映射页;根据写操作指令及所述第一映射页中数据组织要写入的数据;确定写入组织好的数据所需的空闲页数目根据所需的空闲页数目和映射区中的剩余空闲页数目,确定是否满足设定回收条件;对预回收扇区执行回收操作之后,还包括。

4、从映射区中选取除指定页外的空闲页作为第二映射页,所述指定页为在映射区中指定的一个空闲页,初始化时用户区的所有逻辑页映射到同一指定页;在所述第二映射页上写入组织好的数据,并将映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页。3如权利要求2所述的方法,其特征在于,根据所需的空闲页数目和剩余空闲页数目,确定是否满足设定回收条件,具体包括所需的空闲页数目与设定阈值的和不大于所述剩余空闲页数目时,确定不满足设定回收条件;所需的空闲页数目与设定阈值的和大于所述剩余空闲页数目时,确定满足设定回收条件。4如权利要求3所述的方法,其特征在于,所述设定阈值等于所述映射区中组成一个扇区的页数减一。5如权。

5、利要求1所述的方法,其特征在于,所述从映射区中选取预回收扇区,具体包括获取所述映射区中每个扇区中的无效页个数,所述无效页为已写入数据且未在映射表中被作为映射页的页;选取映射区中无效页最多的扇区为预回收扇区。6如权利要求2所述的方法,其特征在于,所述映射表还包括第一字段和第二字段,所述第一字段用于标识无效或有效,所述第二字段用于标识映射表的流水号,写操作时使用的映射表为第一字段标识为有效的映射表,在所述第二映射页上写入组织好的数据时,还包括新建一映射表,将第一字段标识为有效的映射表中除第一字段以外内容复制到新建映射表中,并将新建映射表中的第二字段加一;将映射表中写操作指向的逻辑页的第一映射页,修。

6、改为第二映射页,包括权利要求书CN102004697ACN102004710A2/4页3在所述第二映射页上写入组织好的数据之后,将新建映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页;在新建映射表中写入标识为有效的第一字段,依据流水号将前一映射表中的第一字段标识修改为无效。7如权利要求6所述的方法,其特征在于,将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页时,还包括新建一映射表,将第一字段标识为有效的映射表中除第一字段以外内容复制到新建映射表中,并将新建映射表中的第二字段加一;将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页,具体包括将预。

7、回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的扇区中空闲页之后,将所述预回收扇区中的有效页在新建映射表中的映射页,修改为重写该有效页数据的页;在新建映射表中写入标识为有效的第一字段,依据流水号将前一映射表中的第一字段标识修改为无效。8如权利要求6或7所述的方法,其特征在于,所述映射表存放在映射表区时,所述映射表区的区域包括至少两个扇区,每次新建映射表时,还包括确定映射表区中仅有一个扇区未写满,且当前新建的映射表在该未写满的扇区内不是第一个映射表,且确定此次写操作指令执行过程中未对映射区中扇区执行过回收操作或执行过回收操作但新建映射表会使映射表区写满时,对映射表区中写满映射表的扇区执行。

8、回收操作。9一种操作FLASH的回收装置,其特征在于,包括预回收扇区选取单元,用于确定满足设定回收条件时,从映射区中选取预回收扇区,所述映射区由FLASH中用户区和设定辅助区组成;重写单元,用于将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页,所述有效页为已写入数据且在映射表中作为映射页的页,所述映射表用于建立逻辑页与映射页的映射关系;第一映射关系修改单元,用于将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页;第一回收单元,用于在将有效页的数据重写到映射区中除预回收扇区外的空闲页后,对预回收扇区执行回收操作。10如权利要求9所述的装置,其特征在于,还包。

9、括第一映射页选取单元,用于接收到写操作指令时确定写操作指向的逻辑页,并查找所述写操作指向的逻辑页在映射表中的第一映射页;组织数据单元,用于根据写操作指令及查找到的第一映射页中数据组织要写入的数据;页数确定单元,用于确定写入组织好的数据所需的空闲页数目,及映射区中剩余空闲页数目,并触发确定是否满足设定回收条件;所述预回收扇区选取单元具体用于根据所需的空闲页数目和剩余空闲页数目,确定是权利要求书CN102004697ACN102004710A3/4页4否满足设定回收条件;该装置还包括第二映射页选取单元,用于对预回收扇区执行回收操作后,从映射区中选取除指定页外的空闲页作为第二映射页,所述指定页为在映。

10、射区中指定的一个空闲页,初始化时用户区的所有逻辑页映射到同一指定页;第二映射关系修改单元,用于对预回收扇区执行回收操作后,在选取的第二映射页上写入组织好的数据,并将映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页。11如权利要求10所述的装置,其特征在于,所述预回收扇区选取单元,具体用于在确定所需的空闲页数目与设定阈值的和不大于所述剩余空闲页数目时,确定不满足设定回收条件;确定所需的空闲页数目与设定阈值的和大于所述剩余空闲页数目时,确定满足设定回收条件。12如权利要求9所述的装置,其特征在于,所述预回收扇区选取单元,具体包括无效页确定单元,用于获取所述映射区中每个扇区中的无效页个数。

11、,所述无效页为已写入数据且未在映射表中被作为映射页的页;预回收扇区确定单元,选取映射区中无效页最多的扇区为预回收扇区。13如权利要求10所述的装置,其特征在于,所述映射表还包括第一字段和第二字段,所述第一字段用于标识无效或有效,第二字段用于标识映射表的流水号,写操作时使用的映射表为第一字段标识为有效的映射表,还包括第一新建映射表单元,用于在所述第二映射页上写入组织好的数据时,新建一映射表,将第一字段标识为有效的映射表中除第一字段以外内容复制到新建映射表中,并将新建映射表中的第二字段加一;第一映射关系修改单元,具体包括第一修改单元,用于在所述第二映射页上写入组织好的数据之后,将新建映射表中写操作。

12、指向的逻辑页的第一映射页,修改为所述第二映射页;第二修改单元,用于在新建映射表中写入标识为有效的第一字段,依据流水号将前一映射表中的第一字段标识修改为无效。14如权利要求13所述的装置,其特征在于,还包括第二新建映射表单元,用于将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页时,新建一映射表,将第一字段标识为有效的映射表中除第一字段以外内容复制到新建映射表中,并将新建映射表中第二字段加一;第二映射关系修改单元,具体包括第三修改单元,用于在将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页之后,将所述预回收扇区中的有效页在新建映射表的映射页,修改为重写该有效页数。

13、据的页;第四修改单元,用于在新建映射表中写入标识为有效的第一字段,依据流水号将前一映射表中的第一字段标识修改为无效。15如权利要求13或14所述的装置,其特征在于,所述映射表存放在映射表区时,所述映射表区的区域包括至少两个扇区,还包括第二回收单元,用于每次新建映射表时,确定映射表区中仅有一个扇区未写满,且当前权利要求书CN102004697ACN102004710A4/4页5新建的映射表在该未写满的扇区内不是第一个映射表,且确定此次写操作指令执行过程中未对映射区中扇区执行过回收操作或执行过回收操作但新建映射表会使映射表区写满时,对映射表区中写满映射表的扇区执行回收操作。权利要求书CN10200。

14、4697ACN102004710A1/13页6一种FLASH的回收方法和装置技术领域0001本发明涉及数据存储技术领域,尤其涉及一种FLASH的回收方法和装置。背景技术0002闪存FLASH在没有电流供应的条件下也能够长久地保存数据,其存储特性相当于硬盘,这项特性使得FLASH成为各类便携型数字设备使用的存储介质。0003闪存FLASH通常情况下被划分为多个扇区,多个字节为一页,因此每个扇区包括多个页。对FLASH进行读写时,以页为单位进行操作。在要写入数据的页为不可用状态如被其它文件数据占用时,对该页执行擦除操作。在FLASH中无空闲页时,以扇区为单位执行擦除操作,因此是以扇区为单位的回收机。

15、制。0004通常情况下便携型数字设备使用的FLASH容量比较小,因此扇区也比较小。如智能卡芯片内部的FLASH大小一般在256K以内,其扇区均在512字节以内,有64字节/128字节/256字节/512字节四种。对于这种小容量FLASH的操作方式都是直接对其物理地址进行操作,具体为0005在执行写操作时,根据维护的页信息表,获取要写入数据的页是否为可用状态,其中要写入数据的页是由操作系统根据特定规则确定的;0006在要写入数据的页为可用状态时,根据该页物理地址将要写入的数据写入;在要写入数据的页为不可用状态时,将该页进行擦除。在FLASH中无空闲页时,以扇区为单位执行擦除操作实现回收。0007。

16、对FLASH采用直接对其物理地址进行操作的方式,在FLASH容量比较小时,执行上述页擦除及扇区擦除的频率都比较高,但因为扇区小,擦写速度快,所以即使一条指令有几次对FLASH的写操作都需要进行擦除也可以满足产品的性能要求。0008但是目前越来越多的便携型数字设备使用大容量的FLASH如NANDFLASH,NANDFLASH最大的优点在于容量可以做得很大,超过512MB容量的NAND产品相当普遍,如采用较多为1M容量,扇区大小为4K的FLASH。对于这些大容量大扇区的片内FLASH,操作系统可用的用户区比较小,如为64K。这样对于扇区划分较大,用户区较小的片内FLASH,如果采用上述直接对物理地。

17、址操作的方式进行读写,由于用户区比较小也会比较频繁地出现页擦除及扇区擦除操作。而扇区擦除操作中,由于扇区比较大因此擦除操作占用的时间长,在实际应用中速度太慢无法被用户接受,而且每操作一个扇区内的数据时都要将全部4K数据擦除对FLASH的寿命也是一个很大的影响。0009目前对于管理扇区较大的NANDFLASH,有的采用文件系统下一层的文件分配表FAT管理机制如FAT16、FAT32等。文件分配表FAT管理机制功能强大,适于管理存储空间比较大、文件管理复杂的场景,多应用于计算机。但是在智能卡应用中,对于扇区划分较大,用户区较小的片内FLASH来说,采用FAT管理机制复杂有余,又不能物尽其用。说明书。

18、CN102004697ACN102004710A2/13页7发明内容0010本发明实施例提供一种FLASH的回收方法及装置,用以优化现有FLASH回收机制,减少回收次数和提高操作FLASH的速度。0011本发明提供一种FLASH的回收方法,包括0012确定满足设定回收条件时,从映射区中选取预回收扇区,所述映射区包括由FLASH中用户区和设定辅助区;0013将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的空闲页,所述有效页为已写入数据且在映射表中作为映射页的页,所述映射表用于建立逻辑页与映射页的映射关系;0014将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页,。

19、并对预回收扇区执行回收操作。0015本发明还提供一种操作FLASH的回收装置,包括0016预回收扇区选取单元,用于确定满足设定回收条件时,从映射区中选取预回收扇区,所述映射区由FLASH中用户区和设定辅助区组成;0017重写单元,用于将预回收扇区中的有效页的数据,重写到映射区中除预回收扇区外的空闲页,所述有效页为已写入数据且在映射表中作为映射页的页,所述映射表用于建立逻辑页与映射页的映射关系;0018第一映射关系修改单元,用于将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页;0019第一回收单元,用于在将有效页的数据重写到映射区中除预回收扇区外的空闲页后,对预回收扇区执。

20、行回收操作。0020利用本发明的FLASH的回收方法及装置,具有以下有益效果在将操作FLASH的空间扩展到映射区的情况下,减少了FLASH的回收时间间隔,因此不会影响操作FLASH的数据读写速度,且提高了FLASH的寿命。附图说明0021图1为本发明提供的FLASH的回收方法流程图;0022图2为依照本发明实施例中示例的对FLASH划分后的物理结构;0023图3为依照本发明实施例中采用动态建立映射方式时对应的FLASH的回收方法流程图;0024图4为依照本发明实施例中FLASH的回收方法中实现删除操作的流程图;0025图5为依照本发明实施例中FLASH的回收方法中实现读取操作的流程图;0026。

21、图6A、图6B为依照本发明实施例中FLASH的回收方法的详细过程流程图;0027图7为依照本发明实施例中FLASH的回收装置的结构图。具体实施方式0028下面结合附图和实施例对本发明提出的FLASH的回收方法和装置进行更详细地说明。0029本发明能够避免现有智能卡操作系统运行时,使用复杂的FLASH管理模式实现其说明书CN102004697ACN102004710A3/13页8操作的同时,又能够快速地进行FLASH的操作,并保证FLASH的损耗在一定程度上均衡。0030对于智能卡操作FLASH时,虽然FLASH的容量非常大,例如有1M,但是对于智能卡操作系统来说,能够进行操作的区域即用户区是有。

22、限,如用户区为64K,因此进行FLASH操作时,是针对这64K可见的用户区进行数据读写。本发明将对FLASH中用户区划分得到的页作为逻辑页,操作FLASH时只面向这些逻辑页进行FLASH操作。0031本发明提供的FLASH的回收方法包括确定满足设定回收条件时,从映射区中选取预回收扇区,所述映射区由FLASH中用户区和设定辅助区组成;将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的空闲页,所述有效页为已写入数据且在映射表中作为映射页的页,所述映射表用于建立反映所有逻辑页的与映射页的映射关系,即反映所有逻辑页的映射页;将所述预回收扇区中的有效页在映射表中的映射页,即所述映射表中是所述预回。

23、收扇区中有效页的逻辑页的映射页,修改为重写该有效页数据的页,并对预回收扇区执行回收操作。本发明在映射区中空闲页不够时再进行上述回收操作,大大延迟了回收的时间间隔,保证运行速度的同时,又能够不失时机地回收足够页作为映射页来满足写操作的需要;由于回收机制中将有效页的数据首先读取到其它扇区空闲页中且会更新映射关系,因此不会写操作的正常运行。0032依照本发明的实施例中,提供一种FLASH的回收方法,如图1所示,该方法包括0033步骤S101,接收到写操作指令时确定写操作指向的逻辑页,所述逻辑页为对FLASH中用户区划分得到的页;0034写操作指令中对数据的写操作是以页为单位的,每次写操作都会指向一个。

24、要写入数据的逻辑页。0035步骤S102,查找所确定的逻辑页在映射表中的第一映射页,该映射表用于反映所有逻辑页的映射页,初始化时所有逻辑页映射到空闲页中的同一指定页;0036在映射表中建立所有逻辑页的映射页,这样,实际进行写操作时指向的页为其映射页,本发明在初始化时,将所有逻辑页映射到同一个指定空闲页。0037步骤S103,根据查找到的第一映射页中数据及写操作指令组织要写入的数据;0038由于写操作中既包含向一个空闲页中写入数据的操作,也包括对之前写入的某页数据进行修改的操作。因此,在查找到的第一映射页为空闲页时,说明操作系统还未向此次写操作指向的逻辑页写入数据,组织数据具体为将要写入的数据作。

25、为写入数据;在查找到第一映射页中有数据时,说明操作系统之前针对此次写操作指向的逻辑页写入过数据,对应地要修改这些数据,因此组织数据为对写操作指向的逻辑页的第一映射页中数据根据写操作指令进行修改。0039步骤S104,确定写入组织好的数据所需的空闲页数目,及对映射区划分得到的页中剩余空闲页数目,映射区由用户区和FLASH中除用户区外的设定辅助区组成;0040步骤S105,根据所需的空闲页数目和剩余空闲页数目,确定是否满足设定回收条件,若不满足,执行步骤S106,否则执行步骤S108;0041步骤S106,说明当前空闲页够用,从对所述映射区划分得到的页中,选取除指定页外的空闲页作为第二映射页;00。

26、42组织好数据要写入时,应将组织好的数据写入到空闲页中。如果映射页是指定页,说明是针对该逻辑页第一次写入数据,将数据写入到除指定页外的空闲页中。优选地,如果说明书CN102004697ACN102004710A4/13页9写操作指向的逻辑页是空闲页时,可以将该逻辑页本身作为其映射页。如果映射页是除指定页外的页,说明是针对该逻辑页进行数据修改,修改后将修改好的数据写入到选取的空闲页中。0043步骤S107,在第二映射页上写入组织好的数据,并将映射表中写操作指向的逻辑页的第一映射页,修改为所述第二映射页,执行完该写操作指令。0044因此,更新了逻辑页和映射页之间的映射关系。下次对该逻辑页中数据进行。

27、操作时,可以根据映射关系找到上次写入的数据。0045本发明映射表中一个逻辑页对应一个映射页,上述第一映射页指未进行任何操作前查找到的映射页,第二映射页为进行相关操作后修改后的映射页。0046步骤S108,确定满足设定回收条件时,从所述映射区中选取预回收扇区;0047步骤S109,将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的扇区中空闲页;0048步骤S110,将所述预回收扇区中的有效页在映射表中的映射页,修改为重写该有效页数据的页,对预回收扇区执行回收操作。0049如果预回收扇区中的某页写入数据且是映射表中的映射页,不能直接将该页数据擦除,否则下次通过映射表会找不到该页数据,因此需。

28、要将这些页内的内容读取到其他扇区的空闲页中,并建立写入数据的页与之前逻辑页的映射关系,则下次对之前逻辑页进行操作时,还可以根据新的映射关系找到这些数据。0050本发明提供的上述FLASH的回收方法中,基于对FLASH的写操作中将写操作实际可用的空间扩展到为映射区,映射区要大于用户区,因此对于大扇区的FLASH,用户区较小的智能卡来说,充分了FLASH中空闲空间;在映射区中空闲页不够时再进行上述回收操作,大大延迟了回收的时间间隔,保证运行速度的同时,又能够不失时机地回收足够页作为映射页来满足写操作的需要;由于回收机制中将有效页的数据首先读取到其它扇区空闲页中且会更新映射关系,因此不会写操作的正常。

29、运行。0051基于上述回收机制中的写操作,在写操作写入修改好的数据时,不用再像以前一样先将所在的页擦除再写,这样就大大提高了写FLASH的速度;由于FLASH应用中多数操作都是针对用户区前部分,不需要每次写都擦就意味着大大增强了FLASH的使用寿命,使损耗均衡和整个区域的使用效率得到了保证。0052优选地,该方法中,在步骤S110完成对预回收扇区的回收操作后,返回步骤S106,在空闲页足够用的情况下执行完写操作指令。0053优选地,本实施例中所需的空闲页数目与设定阈值的和不大于所述剩余空闲页数目时,确定不满足设定回收条件。所需的空闲页数目与设定阈值的和大于所述剩余空闲页数目时,确定满足设定回收。

30、条件。设置设定阈值的目的是为了防止剩余空闲页不够写入预回收扇区中的有效页数据。0054另外,预回收扇区的选取原则是有效页越少越好,而无效页越多越好,其中无效页为已写入数据且未在映射表中被作为映射页的页,即操作系统不再使用而又不是空闲页的页。因此所选取的预回收扇区中至少有一个无效页,本实施例中设定阈值等于所述映射区中组成一个扇区的页数减一。可以保证有足够的空闲页存放有效页数据。0055本实施例中设定辅助区采用与所述用户区相同的空间划分方式,所述设定辅助区说明书CN102004697ACN102004710A5/13页10的区域由FLASH中除用户区外的闲置空间确定;所述映射表存放在映射表区,所述。

31、映射表区的区域由FLASH中除映射区外的闲置空间确定。0056仍以1M容量,用户区为64K的FLASH为例,如图2所示,设定辅助区采用与用户区相同的空间划分方式,具体为4K为一个扇区SECTOR,256字节为一个页PAGE,用户区内有16个SECTOR,每个SECTOR内是16个PAGE。设定辅助区包括3个SECTOR,用来扩展用户区的映射关系,设定辅助区的区域的设计在FLASH总空间充足的情况下可以任意分配其数量。映射表区包括2个SECTOR,以页为单位进行映射,建立逻辑页对应的映射页。0057从上面逻辑页的映射过程可以看出,写操作会使实际被使用的页作为映射页被记录在映射表中,因此,初始化应。

32、将所有逻辑页映射到同一空闲的指定页,代表所有的其它所有页都可以使用。优选地,初始化时所有逻辑页映射的同一指定页为对FLASH中用户区划分得到的第一个扇区的第一页,当然,也可以是其它空闲页。0058建立映射表的目的是反映逻辑页对应的映射页,下面给出依照本发明实施例的一种优选的映射表反映逻辑页的映射页方式,本实施例中映射表包括与所有逻辑页总数相等数量个映射项,每个映射项反映一个逻辑页的一个映射页,如有256个逻辑页时,对应256个映射项;每个映射项由扇区号SECTOR号和页号PAGE号组成,且所有映射项中扇区号占用的字节数相等及页号占用的字节数相等,每个映射项反映的逻辑页由该映射项在映射表中的偏移。

33、确定,反映的映射页由该映射项中的扇区号和页号确定。0059每个页的物理地址可以由其在FLASH中所在SECTOR及在SECTOR内的PAGE号确定,因此通过上述映射项的内容扇区号和页号可以唯一索引到映射页的物理地址。由于每个映射项占用的字节数是相同的,因此可以通过映射项的偏移确定其反映的逻辑页。具体地,映射项中扇区号占用的字节数,由对映射区划分得到的页组成的扇区个数总数确定,映射项中页号占用的字节数由组成一个扇区的页数确定。0060优选地,本实施例中映射表还包括第一字段本实施例称T1字段和第二字段本实施例称T2字段,T1字段用于标识无效或有效,T2字段用于标识映射表的流水号,写操作时使用的映射。

34、表即查找逻辑页的第一映射页的映射表,具体为T1字段标识为有效的映射表,如图3所示,依照本发明另一实施例的FLASH的回收方法,包括0061步骤S301,接收到写操作指令时确定写操作指向的逻辑页;0062步骤S302,查找所确定的逻辑页在映射表中的第一映射页,该映射表具体为T1字段标识为有效的映射表,初始化时建立的映射表中T1字段标识为有效;0063步骤S303,根据查找到的第一映射页中数据及写操作指令组织要写入的数据;0064步骤S304,确定写入组织好的数据所需的空闲页数目,及对映射区划分得到的页中剩余空闲页数目;0065步骤S305,根据所需的空闲页数目和剩余空闲页数目,确定是否满足设定回。

35、收条件,若不满足,执行步骤S306,否则执行步骤S310;0066步骤S306,说明当前空闲页够用,从对所述映射区划分得到的页中,选取除指定页外的空闲页作为第二映射页,在第二映射页上写入组织好的数据;0067步骤S307,新建一映射表,将T1字段标识为有效的映射表中除T1字段以外内容复制到新建映射表中,并将新建映射表中T2字段加一;0068步骤S308,在所述第二映射页上写入组织好的数据之后,将新建映射表中写操作说明书CN102004697ACN102004710A6/13页11指向的逻辑页的第一映射页,修改为所述第二映射页;0069步骤S309,在新建映射表中写入标识为有效的T1字段,依据流。

36、水号将前一映射表中的T1字段标识修改为无效,执行完该写操作指令。0070步骤S310,确定满足设定回收条件时,从所述映射区中选取预回收扇区;0071步骤S311,将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的扇区中空闲页;0072步骤S312,新建一映射表,将T1字段标识为有效的映射表中除T1字段以外内容复制到新建映射表中,并将新建映射表中T2字段加一;0073步骤S313,将预回收扇区中有效页的数据,重写到映射区中除预回收扇区外的扇区中空闲页之后,将所述预回收扇区中有效页在新建映射表中的映射页,修改为重写该有效页数据的页;0074步骤S314,在新建映射表中写入标识为有效的T1字。

37、段,依据流水号将前一映射表中的T1字段标识修改为无效,并执行扇区回收操作,并返回步骤S306。0075上述T1字段和T2字段用来在创建新映射表完成后和去使能前一个映射表之前断电后再次上电时判断使用,操作过程保证了在写映射表断电时,再次上电时保证了数据不会因断电被找错。0076由于在映射表区中每执行一次写操作指令,会涉及到映射表的新建,因此需要提供一种对映射表区的回收机制,本实施例提供的FLASH回收方法中,映射表存放在映射表区时,映射表区的区域包括至少两个扇区,每次新建映射表时,还包括0077确定映射表区中仅有一个扇区未写满,且当前新建的映射表在该未写满的扇区内不是第一个映射表,且确定此次写操。

38、作指令执行过程中未对映射区中扇区执行过回收操作时,对映射表区中写满映射表的扇区执行回收操作。0078这里不以最后一个未写满的扇区的第一次被写为映射表区回收判断条件,是为了防止断电后找不到前一个流水号的映射表引起数据混乱。0079优选地,还包括确定映射表区中仅有一个扇区未写满,且当前新建的映射表在该未写满的扇区内不是第一个映射表,且确定此次写操作指令执行过程中对映射区中扇区执行过回收操作,在当前新建映射后映射表区所有扇区已写满时,对映射表区中之前写满映射表的扇区执行回收操作。上述方法从很大程度上避免了一起回收,如果到最后都没有机会回收映射表区域,那么强制一起回收,这种事件发生概率极小,对性能影响。

39、不会很大。0080本发明实施例一方面保证了FLASH在执行过程中不会因为需要回收而降低执行指令的速度,另一方面保证了在异常情况发生的时候能够有效的恢复原数据,在没有特殊额外断电保护的情况下实现了断电保护的效果。动态回收空间的机制也使得FLASH的回收效率更高。0081本实施例中确定空闲页所依据的信息除了映射表中的映射页以外,还利用了页信息表,页信息表用于标识页的使用信息,所标识的页的使用信息通过上电时遍历映射区获得,随着页的使用和回收及而更新,如在上述选取了空闲页写入数据后,页信息表中相应地将这些空闲页标识为已写入数据。优选地,本实施例中确定映射区中空闲页具体包括将映射区中在页信息表中标识为空。

40、闲页且未在映射表中作为映射页的页,确空为映射区中的空闲页。说明书CN102004697ACN102004710A7/13页120082本实施例中在断电再次上电后接收到写操作指令时,确定写操作中查找逻辑页的第一映射页使用的映射表,即确定有效映射表的步骤,具体包括0083依据流水号查找两个最新建立的映射表;在这两个映射表中00841较老的映射表中T1字段标识为无效,且较新的映射表中T1字段标识为有效时,确定较新的映射表为写操作使用的映射表;0085说明上次写操作及修改映射表的步骤已完成,因此使用最新的映射表。00862两个映射表中T1字段均标识为有效,确定较新的映射表为写操作使用的映射表,并将较老。

41、的映射表T1字段修改为无效;0087说明上次写操作及修改映射表的步骤已完成但未将较老映射表修改为无效时发生断电,因此可以使用最新的映射表。00883较老的映射表中T1字段标识为有效,且较新的映射表中T1字段未填写时,确定较老的映射表为写操作使用的映射表。0089这种情况下,断电有可能是在数据写入未完成或在数据写入完成而映射关系未修改时断电,也可能是在映射关系修改完后断电的,因为不确定断电时机,因而采用较老的映射表查找数据。0090优选地,本实施例中上述映射表还包括校验字段XOR,所述校验字段XOR的取值由所述映射表中除T1字段外的内容累加和确定,这样,在上述确定写操作中使用的映射表的步骤中,还。

42、包括对上述两个最新的映射表,根据映射表中校验字段XOR进行校验的步骤,如对于3这种情况,如果最新的映射表中的校验字段XOR与较老的映射表校验字段XOR不同,说明已完映射关系修改而填入新的校验字段,因此可以确定最新的映射表为有效的映射表。这种操作过程保证了在写映射表断电时,再次上电,可以根据有效的映射表,及其信息项中的校验值来判断当前最新的映射表是否正确,若不正确,采用流水号较老的用,保证了数据不会因断电被找错。0091在文件系统的操作中,对FLASH的操作一般为读操作、写操作和擦除操作。在上述实施例给出的写操作的基础上,优选地,本实施例中映射表还包括V字段,所述V字段用于记录初始化时所有逻辑页。

43、映射到的同一指定页,如图4所示,还包括0092步骤S401,接收到删除操作指令时,确定删除操作指向的逻辑页;0093步骤S402,查找删除操作指向的逻辑页在映射表中的第一映射页;0094在采用上述动态建立映射表的方式时,这里使用的映射表为当前T1字段标识有效的映射表。0095步骤S403,在查找到的第一映射页中写入使该第一映射页视为空闲页的数据;0096现有FLASH初始化时被格式化为全FF,因此数据为全FF的页为被视为空闲页。这样,本实施例中可以将要删除的文件实际占用的页执行一次数据写入操作,即将该页数据修改为全FF。由于将该页更新为空闲页,页信息表该页的使用信息由已写入数据更新为空闲页。0。

44、097步骤S404,将映射表中删除操作指向的逻辑页的第一映射页,修改为所述映射表中V字段记录的指定页。0098这样下次对该逻辑页进行写操作时,发现当前映射页为空闲页且之前的映射页已不在映射表中,说明还未被使用而可以列入空闲页中。说明书CN102004697ACN102004710A8/13页130099本发明实施例中擦除实事上只是一个虚拟操作,不会真正擦除。跟写的过程类似,只是将写的数据写为全FF,在写到整页都为FF的时候,将该逻辑页映射在指定页上即可。这样即节约了擦的时间,又能够极大地节约FLASH的存储空间,提高了FLASH的存储效率,并且能够延长FLASH的回收时间,从性能、效率、和延长。

45、使用寿命上都起到了作用。0100本实施例中基于上述实施例中给出的操作FLASH方法中的写操作,如图5所示,还包括0101步骤S501,接收到读操作指令时确定读操作指向的逻辑页;0102步骤S502,查找读操作指向的逻辑页在映射表中的第一映射页;0103在采用上述动态建立映射表的方式时,这里使用的映射表为当前T1字段标识有效的映射表0104步骤S503,根据所述读操作指令在所述第一映射页的相应位置读取数据。因此实现了FLASH的读操作。0105下面仍以1M容量,用户区为64K的FLASH为例,说明本发明实施例中上述映射表的结构,如表1所示,该映射表中包括256个映射项,由于每个扇区有16页,所以。

46、采用4BIT的页号;由于用户区有16个扇区,设定辅助区有3个扇区,因此最少要5BIT扇区号,为了方便表示,本实施例中扇区号采用一个字节。这样每个映射项占用15个字节,其中扇区号占用前一个字节,页号占用后半个字节。每个映射项在映射表中的偏移除以15字节,就是其所代表的逻辑页,这样映射项的前一个字节表示该逻辑页的映射页所在的SECTOR,后半个字节代表该逻辑页的映射页所在SECTOR内的PAGE号。在初始化后的状态下,由于FLASH全部区域为FF状态,映射表的每一映射项的映射页都指向第一个全FF的PAGE。0106表1映射表的结构01070108表1中,T1字段用于标识该映射表为有效还是无效,T2。

47、字段标识映射表的流水号,V1V5为V字段,记录初始化时所有逻辑页映射到的同一指定页,本实施例中也将该指定页称为多映射页。该字段还可以记录映射到多映射页的逻辑页个数,并在映射页动态更新时相应进行更新。校验字段XOR是当前映射表所有数据的累加和的值,用来判断当前映射表是否完全正确。0109本实施例中映射表结构中包含8字节映射信息项即T1、T2、V1V5和XOR及5128字节映射关系项,即本实施例为每个表的映射关系分配的空间大于其实际占用的空间如为每个映射表分配2562个字节,以方便管理。0110如表2所示,为初始化状态下的映射项,每15个字节表示一个映射关系,被映射的逻辑页由映射表的偏移决定,每1。

48、5个字节偏移,被映射的逻辑页号增一,第一个代表逻辑页扇区的PAGE0,其映射页为物理扇区的PAGE1,PAGE1内的数据为全FF,依次类推。说明书CN102004697ACN102004710A9/13页140111表2初始状态下映射项01120113本发明上述实施例中,接收到写操作指令时执行写操作,通常情况下,一个写操作指令中可能包含多次写操作,如对于多个逻辑页涉及到写操作的情况包括跨页修改数据的情况。本发明实施例中接收到写操作指令时,对写操作指令进行解析,每解析到一次写操作,执行上述步骤S101步骤S103完成一次写操作,在执行完写操作指令中的所有写操作后,再执行步骤S104。0114依照。

49、本发明的优选实施例中,在接收到写操作指令时,具体是先在RAM中缓存中组织好数据,每次执行写操作时,在查找到的第一映射页中有数据时,将所述第一映射页中数据首先读取到RAM中进行缓存;根据读取的数据及写操作指令,在RAM中组织此次写操作要写入的数据,并在RAM记录此次写操作指向的逻辑页。对于第一映射页为空闲页的情况,直接在RAM中组织此次写操作要写入的数据,并记录此次写操作指向的逻辑页。0115本实施例中在执行完写操作指令中的所有写操作后,根据所记录的不同逻辑页的个数,确定要选取的空闲页数目;从对所述映射区划分得到的页中,选取所确定的数目个除指定页外的空闲页作为第二映射页;将每次写操作在RAM中缓存的组织好的数据,写入一个空闲的第二映射页;并根据此次写操作中在RAM中记录的逻辑页,在映射表中将此次写操作指向的逻辑页的第一映射页,修改为写入此次写操作组织好的数据的第二映射页。这种操作方法是以每条指令为单位进行写操作启动的,指令执行过程中不直接在FLASH中进行逐个的写操作,而是先在RAM中组织好此次要写入FLASH所有数据后再进行数据写入,很大的提高了操作的效率,节约了指令执行时间,提高了设备性能。本实施例中如果采用映射表流水号的控制,可以省去了对断电保护的操作,可以通过这种机制直接实现指令执行的数据完整性。0116另外,在解析写操作指令过程中,可能会涉及到对一个逻辑页的多次写操作,本。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1