Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
FILE SYSTEM MOUNTING METHOD, DATA MANAGEMENT METHOD AND RELATED DEVICES THEREOF
Document Type and Number:
WIPO Patent Application WO/2011/095093
Kind Code:
A1
Abstract:
The present invention provides a data management method in a flash, which establishes a management node in the flash to store the address information of a data node by the strategy of using space for time. Meanwhile, the present invention also provides a file system mounting method, flash and corresponding data management device and system mounting device, which enable when Journaling Flash File System (JFFS) file system is mounted, the address information of the data node can be directly read from the management node in a flash block, a file tree is established according to the read address information, and the mounting is completed, thus avoiding scanning the whole flash to find out each data node and read out address information from it when mounting the system. Thereby, the time required for the mounting process is shortened, the mounting speed of the JFFS file system is improved, and the user waiting time for system initialization is reduced.

Inventors:
YI RUI (CN)
Application Number:
PCT/CN2011/070593
Publication Date:
August 11, 2011
Filing Date:
January 25, 2011
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
SHENZHEN COSHIP ELECTRONICS CO (CN)
YI RUI (CN)
International Classes:
G06F17/30
Foreign References:
CN101799820A2010-08-11
CN101408880A2009-04-15
CN101233480A2008-07-30
US20060075208A12006-04-06
Attorney, Agent or Firm:
UNITALEN ATTORNEYS AT LAW (CN)
北京集佳知识产权代理有限公司 (CN)
Download PDF:
Claims:
权 利 要 求

1、 一种闪存中数据管理的方法, 其特征在于, 包括:

在闪存的各个块中,创建与该块中存储的数据节点相对应的管理节点, 所 述管理节点包括索引节点和管理索引节点,所述索引节点与所述数据节点一一 对应, 用于存储数据节点在所述块中的偏移地址, 所述管理索引节点用于存储 由索引节点构成的链表中的第一个索引节点在所述块中的偏移地址。

2、 如权利要求 1所述的方法, 其特征在于, 所述在闪存的各个块中, 创 建与该块中存储的数据节点相对应的管理节点的步骤具体是:在往闪存中写入 数据节点时,或者在扫描读取闪存中数据时,在闪存的各块中创建所述管理节 点。

3、 如权利要求 2所述的方法, 其特征在于, 所述在往闪存中写入数据节 点时, 在闪存的各块中创建所述管理节点的步骤包括:

检测待写入的闪存的块中是否有足够的空间存储待写入的下一个数据节 点、 和该数据节点及已写入该块的数据节点的管理节点, 得出第一检测结果; 在所述第一检测结果为是时,执行数据写入操作并创建一个索引节点保存 本次写入操作所写入的数据节点的偏移地址;

在所述第一检测结果为否时,检测所述块是否有足够的空间存储已写入该 块的所有数据节点的管理节点, 得出第二检测结果;

在所述第二检测结果为是时,挂起数据写入操作,创建所述块中已写入的 数据节点的管理节点并写入该块;

在所述第二检测结果为否时, 或完成上述在第二检测结果为是时的步骤 后, 放弃管理节点的写入, 激活挂起的数据写入操作, 向另一个空的块执行数 据写入操作并创建一个索引节点保存本次写入操作所写入的数据节点的偏移 地址。

4、 如权利要求 3所述的方法, 其特征在于, 所述在所述第二检测结果为 是时,挂起数据写入操作,创建所述块中已写入的数据节点的管理节点并写入 该块, 包括:

在所述第二检测结果为是时,挂起数据写入操作, 将内存中保存的所述块 中已写入的数据节点的索引节点写入该块,并在内存中创建一个管理索引节点 保存本次写入操作所写入的索引节点构成的链表中的第一个索引节点在所述 块中的偏移地址;

将所述管理索引节点写入该块。

5、 一种文件系统挂载方法, 其特征在于, 包括:

依次读取闪存中每个块,检测该块中是否存在管理索引节点,得出检测结 果, 所述块中的数据存储在数据节点中;

在所述检测结果为是时,根据所述管理索引节点找到索引节点, 并获取所 述索引节点中存储的数据节点的地址信息, 所述索引节点与数据节点一一对 应, 用于存储数据节点在所述块中的偏移地址, 所述管理索引节点用于存储由 索引节点构成的链表中的第一个索引节点在所述块中的偏移地址;

根据获取的数据节点的地址信息在内存中建立文件树。

6、 如权利要求 5所述的挂载方法, 其特征在于, 还包括:

在所述检测结果为否时, 扫描该块上的所有数据节点, 并获取数据节点的 地址信息。

7、 如权利要求 5或 6所述的挂载方法, 其特征在于, 在所述检测结果为 是时, 还包括:

校验管理索引节点数据是否完整, 若校验出管理索引节点数据完整, 则根 据所述管理索引节点找到索引节点;

校验所述找到的索引节点数据是否完整, 若校验出索引节点数据完整, 则 获取所述索引节点中存储的数据节点的地址信息;

当校验到管理索引节点数据和 /或索引节点数据不完整时, 扫描该块上的 所有数据节点, 并获取数据节点的地址信息。 8、 一种用于闪存的数据管理装置, 其特征在于, 包括管理节点创建单元, 用于在闪存的各个块中,创建与该块中存储的数据节点相对应的管理节点; 所 述管理节点包括索引节点和管理索引节点,所述索引节点与所述数据节点一一 对应, 用于存储数据节点在所述块中的偏移地址, 所述管理索引节点用于存储 由索引节点构成的链表中的第一个索引节点在所述块中的偏移地址。

9、 如权利要求 8所述的用于闪存的数据管理装置, 其特征在于, 所述管 理节点创建单元, 包括数据写入装置, 所述数据写入装置包括:

第一检测单元,用于检测待写入的闪存的块中是否有足够的空间存储待写 入的下一个数据节点、和该数据节点及已写入该块的数据节点的管理节点,得 出第一检测结果;

第二检测单元, 用于在所述第一检测结果为否时,检测所述块是否有足够 的空间存储已写入该块的所有数据节点的管理节点, 得出第二检测结果;

写入单元, 分别与所述第一检测单元、所述第二检测单元和管理节点创建 单元相连, 用于当所述第一检测结果为是时,在当前块执行数据节点的写入操 作; 当所述第二检测结果为否时, 在另一个空的块执行写入操作; 且在所述第 二检测结果为是时,挂起数据写入操作,将所述管理节点创建单元创建的该块 中已写入的数据节点的管理节点, 写入该块。 10、 如权利要求 9所述的用于闪存的数据管理装置, 其特征在于, 所述数 据写入装置还包括:

与所述写入单元相连的写入操作激活单元,用于当所述第二检测结果为否 时,或在写入单元将所述管理节点创建单元创建的该块中已写入的数据节点的 管理节点, 写入该块之后, 激活挂起的数据写入操作;

则所述写入单元, 还用于在写入操作激活单元激活挂起的数据写入操作 后, 向另一个空的块执行数据写入操作, 并将所述管理节点创建单元创建的保 存本次写入操作所写入的数据节点的偏移地址的索引节点写入该块。

11、 一种闪存, 包括数据节点, 其特征在于, 还包括与数据节点相对应的 管理节点, 所述管理节点包括索引节点和管理索引节点, 所述索引节点与所述 数据节点一一对应, 用于存储数据节点在所述块中的偏移地址, 所述管理索引 节点用于存储由索引节点构成的链表中的第一个索引节点在所述块中的偏移 地址。

12、 如权利要求 11所述的闪存, 其特征在于, 还包括用于闪存的数据管 理装置, 其包括管理节点创建单元, 用于在闪存的各个块中, 创建与该块中存 储的数据节点相对应的管理节点。 13、 一种文件系统挂载装置, 其特征在于, 包括:

检测单元,用于依次读取闪存中每个块的数据,且在读取某块中的数据时, 检测该块中是否存在管理索引节点,得出检测结果, 所述块中的数据存储在数 据节点中;

与所述检测单元相连的第一获取单元,用于在所述检测单元得出的检测结 果为是时,根据所述管理索引节点找到索引节点, 并获取所述索引节点中存储 的数据节点的地址信息, 所述索引节点与数据节点一一对应, 用于存储数据节 点在所述块中的偏移地址,所述管理索引节点用于存储由索引节点构成的链表 中的第一个索引节点在所述块中的偏移地址;

文件树建立单元, 与所述第一获取单元相连, 用于根据获取的数据节点的 地址信息在内存中建立文件树。

14、 如权利要求 13所述的挂载装置, 其特征在于, 还包括:

分别与所述检测单元和所述文件树建立单元相连的第二获取单元,用于在 所述检测结果为否时,扫描该块上的所有数据节点, 并获取数据节点的地址信 息。

15、 如权利要求 14所述的挂载装置, 其特征在于, 还包括:

校验单元, 分别与所述检测单元、 第一获取单元和第二获取单元相连, 用 于在所述检测单元得出的检测结果为是时,校验所述管理索引节点和所述索引 节点是否完整,

当校验到管理索引节点数据完整且索引节点数据完整时,指示第一获取单 元根据所述管理索引节点找到索引节点,并获取所述索引节点中存储的数据节 点的地址信息;

当校验到管理索引节点数据和 /或索引节点数据不完整时, 指示第二获取 单元扫描该块上的所有数据节点, 并获取数据节点的地址信息。

Description:
文件系统挂载方法、 数据管理方法及相关装置

本申请要求于 2010年 2月 8日提交中国专利局、申请号为 2010101114656、 发明名称为"闪存、 文件系统挂载方法及装置、数据管理方法及装 置 "的中国专 利申请的优先权, 其全部内容通过引用结合在本申请中。

技术领域

本发明涉及计算机领域, 尤其涉及一种文件系统挂载方法、 闪存数据管理 方法及相关装置。 背景技术

JFFS ( Journalling Flash File System, 闪存设备日志型文件系统 )是最初由 瑞典的 Axis Communication AB 公司设计的一种日志型文件系统, 并在 linux 下实现了该文件系统。

JFFS不存在类似超级块的这种结构, JFFS以节点的方式来管理整个文件 系统上的数据。 保存在 Flash闪存上的节点又称为数据实体, JFFS在 Flash上 只有一种类型的数据实体 jffs_raw_inode ( Flash上保存数据的节点, 筒称数据 节点), 它包含文件的管理信息及描述文件在文件系统 中的位置。 而真正的数 据信息就保存在 jffs_raw_inode节点的后面, 大部分管理信息都是在系统挂载 之后建立起来的。

目前, 这种实现策略的缺点是在每次挂载整个文件系 统时, 就需要扫描整 个 Flash并在 RAM 中逐步建立索引机制, 因此, 挂载系统时间与节点的数量 成正比, 这在存储器规模较小时似乎还是可以接受的, 但当存储器规模大到一 定程度时, 尤其当它应用到对实时性要求较高的嵌入式系 统中时, 系统挂载所 经历的时间过长会成为嵌入式系统的明显缺陷 。 发明内容

鉴于上述现有技术所存在的问题,本发明实施 例提供了一种文件系统挂载 方法、 闪存数据管理的方法及相关的装置, 其可缩短挂载过程所经历的时间, 提高 JFFS文件系统挂载的速度, 减少系统初始化时用户等待时间。

为了达到上述技术效果, 本发明实施例提供了一种闪存中数据管理的方 法, 包括: 在闪存的各个块中, 创建与该块中存储的数据节点相对应的管理节 点, 所述管理节点包括索引节点和管理索引节点, 所述索引节点与所述数据节 点一一对应, 用于存储数据节点在所述块中的偏移地址, 所述管理索引节点用 于存储由索引节点构成的链表中的第一个索引 节点在所述块中的偏移地址。

相应的, 本发明实施例还提供了一种文件系统挂载方法 , 包括:

依次读取闪存中每个块,检测该块中是否存在 管理索引节点,得出检测结 果, 所述块中的数据存储在数据节点中;

在所述检测结果为是时,根据所述管理索引节 点找到索引节点, 并获取所 述索引节点中存储的数据节点的地址信息, 所述索引节点与数据节点一一对 应, 用于存储数据节点在所述块中的偏移地址, 所述管理索引节点用于存储由 索引节点构成的链表中的第一个索引节点在所 述块中的偏移地址;

根据获取的数据节点的地址信息在内存中建立 文件树。

相应的, 本发明实施例还提供了一种用于闪存的数据管 理装置, 包括管理 节点创建单元, 用于在闪存的各个块中,创建与该块中存储的 数据节点相对应 的管理节点; 所述管理节点包括索引节点和管理索引节点, 所述索引节点与所 述数据节点——对应, 用于存储数据节点在所述块中的偏移地址, 所述管理索 引节点用于存储由索引节点构成的链表中的第 一个索引节点在所述块中的偏 移地址。

相应的, 本发明实施例还提供了一种闪存, 包括数据节点、 管理节点和数 据管理装置, 所述数据管理装置包括管理节点创建单元, 所述管理节点创建单 元用于在闪存的各个块中, 创建与该块中存储的数据节点相对应的管理节 点 , 所述管理节点包括索引节点和管理索引节点, 所述索引节点与所述数据节点一 一对应, 用于存储数据节点在所述块中的偏移地址, 所述管理索引节点用于存 储由索引节点构成的链表中的第一个索引节点 在所述块中的偏移地址。

相应的, 本发明实施例还提供了一种文件系统挂载装置 , 包括:

检测单元,用于依次读取闪存中每个块的数据 ,且在读取某块中的数据时, 检测该块中是否存在管理索引节点,得出检测 结果, 所述块中的数据存储在数 据节点中;

与所述检测单元相连的第一获取单元,用于在 所述检测单元得出的检测结 果为是时,根据所述管理索引节点找到索引节 点, 并获取所述索引节点中存储 的数据节点的地址信息, 所述索引节点与数据节点一一对应, 用于存储数据节 点在所述块中的偏移地址,所述管理索引节点 用于存储由索引节点构成的链表 中的第一个索引节点在所述块中的偏移地址;

文件树建立单元, 与所述第一获取单元相连, 用于根据获取的数据节点的 地址信息在内存中建立文件树。 实施本发明实施例, 利用空间换时间的策略, 在 Flash的各个块中, 预先 创建与存储的数据节点相对应的管理节点,所 述管理节点包括索引节点和管理 索引节点, 所述索引节点与所述数据节点一一对应, 用于存储数据节点在所述 块中的偏移地址,所述管理索引节点用于存储 由索引节点构成的链表中的第一 个索引节点在所述块中的偏移地址,使得下次 挂载时, 可以直接从管理节点中 读取挂载所需要的数据节点的地址信息,根据 读取到的数据节点的地址信息建 立文件树, 完成挂载, 从而避免扫描整个 Flash, 以寻找到各数据节点并从中 读取出地址信息, 缩短了挂载过程所经历的时间, 提高了 JFFS文件系统挂载 的速度, 减少系统初始化时用户等待时间。 附图说明

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

图 1是本发明实施例中文件系统挂载方法的流程 ;

图 2是本发明实施例中闪存中数据管理方法中, 往闪存中写入数据节点 时创建管理节点的流程图;

图 3是创建管理节点后, Flash中数据节点及管理节点的存放位置关系图 图 4是本发明文件系统挂载方法的另一实施例流 图;

图 5是本发明实施例中数据写入装置结构示意图

图 6是本发明实施例中文件系统挂载装置的结构 意图; 图 Ί是本发明另一实施例中文件系统挂载装置的 构示意图。 具体实施方式

本发明实施例提供了一种 JFFS文件写入闪存的方法、 JFFS文件系统挂载 方法及对应的装置, 利用空间换时间的策略,将数据节点的位置信 息通过管理 节点写入 Flash ,使得下次挂载时,可以直接从 Flash的块中的管理节点中直接 读取到数据节点的地址信息, 根据读取到的数据节点的地址信息建立文件树 , 完成挂载, 从而避免扫描整个 Flash, 以寻找到各数据节点并从中读取出地址 信息, 缩短了挂载过程所经历的时间, 提高了 JFFS文件系统挂载的速度, 减 少系统初始化时用户等待时间。

通常 Flash由多个块组成, 在本发明实施例中设计为在每个块中创建管理 节点以保存该块中所有已写入的数据节点(jff s_raw_inode )的相关信息, 所述 管理节点包括索引节点 jffs_raw_snode和管理索引节点 jffs_raw_blockend, 所 述索引节点 jffs_raw_snode结构主要存储数据节点 jffs_raw_inode在该块中的 地址信息, 如果该块中有多个数据节点则用多个索引节点 结构存储,每个索引 节点结构存储一个数据节点的地址信息, 这些索引节点构成一个链表, 所述管 理索引节点 jffs_raw_blockend结构位于所述索引节点结构之后 即位于该块的 最后, 该结构记录了第一个索引节点在该块中的偏移 地址, 用于管理前面的索 引节点结构。

下面结合附图详细说明本发明的实施例。

本发明实施例首先提出了一种闪存中数据管理 的方法, 在闪存的各个块 中,创建与该块中存储的数据节点相对应的管 理节点, 所述管理节点包括索引 节点和管理索引节点, 所述索引节点与所述数据节点一一对应, 用于存储数据 节点在所述块中的偏移地址,所述管理索引节 点用于存储由索引节点构成的链 表中的第一个索引节点在所述块中的偏移地址 , 以便在系统挂载时, 能直接从 管理节点中读取挂载所需要的数据节点的地址 信息, 避免扫描整个 Flash, 从 而缩短挂载过程所经历的时间, 提高 JFFS文件系统挂载的速度, 减少系统初 出的系统挂载方法做准备。所述管理节点的创 建方式有多种, 可以是往闪存中 写入数据时创建, 也可以是在扫描读取闪存中数据时创建, 方式不限, 实际应 用时, 可将管理节点创建于闪存各块末尾, 方便挂载时查找。

闪存中创建了管理节点后,就可以根据本发明 实施例提出的文件系统挂载 方法快速实现挂载系统文件,下面将结合图 1对本发明实施例中文件系统挂载 方法进行说明。

参见图 1 , 为本发明实施例中文件系统挂载方法的流程图 , 主要运用于 JFFS 文件系统的挂载, 利用该方法挂载 JFFS 文件系统可以避免扫描整个 Flash, 从而缩短挂载过程所经历的时间, 具体包括如下步骤:

步骤 101 : 依次读取闪存中每个块的数据, 在读取某块中的数据时, 检测 该块中是否存在管理索引节点,得出检测结果 , 所述块中的数据存储在数据节 点中;

步骤 102:在所述检测结果为是时,根据所述管理索 节点找到索引节点, 并获取所述索引节点中存储的数据节点的地址 信息,所述索引节点与数据节点 一一对应, 用于存储数据节点在所述块中的偏移地址, 所述管理索引节点用于 存储由索引节点构成的链表中的第一个索引节 点在所述块中的偏移地址;

在所述检测结果为否时, 通过现有技术方案对 Flash中该块上的所有数据 节点进行扫描, 并获取数据节点的地址信息, 本步骤可视为对现有技术的一个 兼容步骤。

在所述检测结果为是时, 在本发明实施例中, 还可以包括一个校验步骤, 当设计了校验步骤时, 校验步骤具体可为下面步骤:

a: 校验管理索引节点数据是否完整, 若校验出管理索引节点数据完整, 则才艮据所述管理索引节点找到索引节点;

b: 校验索引节点数据是否完整, 若校验出索引节点数据完整, 则获取所 述索引节点中存储的数据节点的地址信息;

c: 当校验到管理索引节点数据或索引节点数据不 完整时, 扫描该块上的 所有数据节点, 并获取数据节点的地址信息,校验到管理索引 节点数据或索引 节点数据不完整可能是系统正在进行保存。

步骤 103: 根据获取的数据节点的地址信息在内存中建立 文件树, 数据节 点地址信息的获取可以是上面 102步骤中所说的在检测结果为是时,通过管理 节点获取, 也可以是在检测结果为否时, 通过扫描整个 Flash上的所有数据节 点获取。

上面,用原理的方式介绍本发明实施例中闪存 中数据管理的方法和文件系 统挂载的方法, 下面结合图 2、 图 3和图 4详细介绍本发明实施例中闪存中数 据管理的方法和 JFFS文件系统挂载的方法。

下面结合附图 2介绍本发明实施例中一种管理节点的创建方 ,该创建方 式是在往闪存中写入数据节点时创建所述管理 节点,本实施例中的管理节点创 建方式为在往闪存中写入数据节点的同时,在 内存中生成管理节点后直接将其 写入闪存中, 当然, 本创建方式为一种具体的创建方式举例, 创建方式可以有 多种,最终实现的目的就是在闪存的各个块中 创建与该块中存储的数据节点相 对应的管理节点。

参见图 2, 为本发明实施例中 JFFS文件写入闪存时在闪存中创建管理节 点的方法流程图, 本方法主要是在闪存的一个块中, 先写入数据节点, 在块中 通过写入的方式创建管理节点, 管理节点可以创建在块的任意位置,在本实施 例中, 设计为将管理节点写入到块的末尾位置, 以便挂载时, 系统能更好的读 取管理节点内的信息。 在图 2中, jffs_raw_inode为数据节点, 它包含文件的 管理信息及文件在文件系统中的位置, 真正的数据信息就保存在 jffs_raw_inode节点的后面; jffs_raw_snode为本发明实施例中管理节点中的索 引节点, 用于记载 jffs_raw_inode在 Flash相关块中的重要信息, 所述重要信 息主要指 jffs_raw_inode在 Flash相关块中的偏移地址,如果一个 Flash的一个 块中保存有多个 jffs_raw_inode , 则用多个索引节点结构存储所述 jffs_raw_inode的偏移地址,每个索引节点结构存 一个 jffs_raw_inode的偏移 地址信息, 这些索引节点构成一个链表; jffs_raw_blockend为本发明实施例中 管理索引节点, 存储于 Flash块的最末位置, 该结构用于存储记录索引节点构 成的链表中第一个索引节点在该块中的偏移地 址, 本实施例在 JFFS文件写入 闪存时在闪存中创建管理节点的方法包括如下 步骤:

步骤 301 : 在启动执行写操作后, 首先检测该块是否有足够的空间存储待 写入的下一个数据节点 jffs_raw_inode、该数据节点 jffs_raw_inode及已写入该 块的其他数据节点 jffs_raw_inode的管理节点, 得出第一检测结果。 所述数据 节点 jffs_raw_inode 用于存储要写入的数据, 所述管理节点包括索引节点 jffs_raw_snode 及管理索 引 节点 j ff s_raw_blockend , 所述索 引 节点 jffs_raw_snode 与所述数据节点 jffs_raw_inode——对应, 用于存储数据节点 jffs_raw_inode 在所述块中的偏移地址, 所述管理索引节点 jffs_raw_blockend 用于存储由索引节点 jffs_raw_snode构成的链表中的第一个索引节点在 述块 中的偏移地址; 在所述第一检测结果为是时, 则进入步骤 302; 在所述第一检 测结果为否时, 则进入步骤 303;

步骤 302: 当步骤 301中检测到有足够的空间, 即在所述第一检测结果为 是时,则执行数据写入操作,即将所述待写入 的下一个数据节点 jffs_raw_inode 写入当前块, 并在内存中创建一个索引节点 jffs_raw_snode保存本次写入操作 所写入的数据节点的 jffs_raw_inode的偏移地址。

在本实施例中, 索引节点 jffs_raw_snode仅先保存在系统内存中, 暂时不 写入块中, 继续返回步骤 301检测空间是否足够写入另外一个 jffs_raw_inode 和相关管理节点;

步骤 303: 当步骤 301中检测到没有足够的空间, 即在所述第一检测结果 为否时,则检测该块是否有足够的空间存储已 写入该块的所有数据节点的管理 节点, 得出第二检测结果;

当步骤 303中检测到有足够的空间, 即在所述第二检测结果为是时, 则进 入步骤 304, 当步骤 303中检测到没有足够的空间, 即在所述第二检测结果为 否时, 则进入步骤 305;

步骤 304: 当步骤 303中检测到有足够的空间, 即在所述第二检测结果为 是时, 则挂起数据写入操作,创建该块已写入的数据 节点的管理节点并写入当 前块。 其中, 索引节点 jffs_raw_snode是在执行数据写入操作时, 在系统内存 中生成的。索引节点 jffs_raw_snode生成后,先存储于系统内存中,待 骤 301 中检测到空间不足而步骤 303中检测到空间足够时, 才将其依次写入 Flash的 对应块中;而管理索引节点 jffs_raw_blockend是在执行索引节点写入操作时在 内存中生成的, 当索引节点 jffs_raw_snode写入块中后, 内存中会生成相应的 管理索引节点 jffs_raw_blockend并将其写入该块末尾。在步骤 304中将管理节 点写入当前块后,进入步骤 305 , 当然在实际运用中,也可设计为返回步骤 301 进行新一轮的检测。 内存中存储的索引节点和 jffs_raw_blockend在写入 Flash 后, 可以进行清除, 以释放系统内存, 当然不清除对系统影响也不大。

步骤 305: 当步骤 303中检测到空间不足时, 即在所述第二检测结果为否 时, 或步骤 304完成管理节点的写入后, 进入本步骤, 放弃管理节点的写入, 激活挂起的数据写入操作,向另一个空的块执 行数据写入操作并创建索引节点 保存本次写入操作所写入的数据节点的偏移地 址。 其中, 索引节点是在执行数 据写入操作时,在系统内存中生成的。索引节 点生成后,先存储于系统内存中, 再将其依次写入 Flash的对应块中; 而管理索引节点是在执行索引节点写入操 作时在内存中生成的, 当索引节点写入块中后, 内存中会生成相应的管理索引 节点并将其写入该块末尾。

然后,再进入下一个块的数据写入,如此循环 , 当数据全部写入 Flash后, 写操作就结束。

本发明实施例中的管理节点都是系统在向闪存 中写入数据节点 jffs_raw_inode 时, 在系统内存中生成后通过写入的方式在闪存中 创建的, 该 创建方式仅为本发明实施例列举的一种创建方 式, 在实际应用中, 管理节点的 创建还可以是在往闪存中写入数据节点时,边 写入数据节点边直接在闪存中创 建。

本发明实施例中将索引节点和管理索引节点用 jffs_raw_snode 和 jffs_raw_blockend 结构表示, JFFS 文件系统进行垃圾回收时, 会将标识为 jffs_raw_snode及 jffs_raw_blockend的节点视为脏数据, 这样在进行垃圾回收 时, 即对一个全是脏数据的块执行擦除操作时, 本发明实施例中所设计的存储 在 Flash的块的末尾的 jffs_raw_snode及 jffs_raw_blockend也会被擦除掉(因 为它们作为脏数据处理), 不会对 Flash 的擦除操作造成任何影响, 也不需要 专门设计擦除方案来清除这些信息, 与现有擦除技术兼容。

按照图 2中的方法进行数据写入操作后, 在 Flash中数据节点及管理节点 的存放位置关系可参见图 3。 从图 3中可以看出, Flash是由多个块组成, 如 图中的第一块 blockl、 第二块 block2等, 在图中, 第一块 blockl中写入了数 据节点和管理节点, 如图, 数据节点 jffs_raw_inode存储在第一块 blockl的前 端, 管理节点中的索引节点 jffs_raw_snode与所述数据节点 jffs_raw_inode一 一对应, 存储在第一块 blockl的末端位置, 而管理索引节点 jffs_raw_blockend 存储于索引节点之后, 位于第一块 blockl的最末位置。

在 Flash中创建了管理节点后, 进行 JFFS系统文件挂载时, 便可根据本 发明实施例中的方法进行挂载, 下面结合图 4 进行详细介绍本发明实施例中 JFFS文件系统挂载的方法, 包括如下步骤:

步骤 401 : 当启动 JFFS文件系统挂载后, 依次读取每个块, 检测该块的 末尾是否存在管理索引结点 jffs_raw_blocked, 得出检测结果, 若存在则进入 步骤 402, 若不存在则进入步骤 403。 在读取块的过程中, 要判断是否每个块 都读取完成, 如果判断出没有读取完所有的块, 则进入继续读取下一个块, 如 果判断到读取完所有的块, 则结束挂载。

步骤 402 : 当步骤 401 中检测到该块的末尾存在管理索引结点 jffs_raw_blocked , 即所述检测结果为是时, 则根据管理索引结点 jffs_raw_blockend 找到索引节点 jffs_raw_snode 并读取其中的数据节点 jffs_raw_inode的地址信息。 执行完本步骤后, 进步骤 404。 所述索引节点与数 据节点——对应, 用于存储数据节点在所述块中的偏移地址, 所述管理索引节 点用于存储由索引节点构成的链表中的第一个 索引节点在所述块中的偏移地 址;

步骤 403 : 当步骤 401 中检测到该块的末尾不存在管理索引结点 jffs_raw_blocked, 即所述检测结果为否时, 则表示该块中还没有按照本发明实 施例中的 JFFS数据写入方法写入数据, 则需要根据现有技术方案扫描整个该 块上的数据节点 jffs_raw_inode, 以获取数据节点 jffs_raw_inode的地址信息, 此步骤的设计为一个现有技术的兼容步骤。 执行完本步骤后, 进步骤 404。

步骤 404 : 当步骤 402 或 403 中获得了 Flash 中存储的数据节点 jffs_raw_inode的地址信息后,根据所述获取的地 信息在内存中建立文件树, 完成挂载。

在实际运用时, 在步骤 401 中检测到该块的末尾存在管理索引结点 jffs_raw_blocked后, 可增加一个校验步骤, 避免在通过图 2所示的方法进行 数据写入且创建管理节点过程中, 断电造成索引节点 jffs_raw_snode和管理索 引节点 jffs_raw_blockend数据写入不完整而读不出需要的 息,如果校验到索 引节点和 jffs_raw_blockend 均完整, 则通过校验, 进入步骤 402 , 则根据 jffs_raw_blockend 找到索引节点读取其中的地址信息; 若校验到索引节点和 jffs_raw_blockend其中的一个不完整或两个都不完 时, 则校验失败, 将该块 中的索引节点和 jffs_raw_blockend信息作为垃圾数据等待下次垃圾 收时回 收掉, 同时进入步骤 403 , 扫描整个该块上的 jffs_raw_inode , 以获取 jffs_raw_inode的地址信息。 法和文件系统挂载的方法, 下面结合图 5、 图 6、 图 7详细介绍与上述方法对 应的装置结构。

本发明实施例提供了一种用于闪存的数据管理 装置,包括一个管理节点创 建单元, 用于在闪存的各个块中,创建与该块中存储的 数据节点相对应的管理 节点, 所述管理节点包括索引节点和管理索引节点, 所述索引节点与所述数据 节点一一对应, 用于存储数据节点在所述块中的偏移地址, 所述管理索引节点 用于存储由索引节点构成的链表中的第一个索 引节点在所述块中的偏移地址。 在闪存中写入或读取数据节点时,该数据管理 装置就会在闪存的各个块中创建 与各块中存储的数据节点对应的管理节点, 以便在系统挂载时, 能直接从管理 节点中读取挂载所需要的数据节点的地址信息 , 避免扫描整个 Flash, 从而缩 短挂载过程所经历的时间, 提高 JFFS文件系统挂载的速度, 减少系统初始化 时用户等待时间, 为系统挂载做好了准备。该数据管理装置可以 是闪存中的装 置, 也可以是内存中的装置。

在闪存中创建管理节点可以通过上述的管理节 点创建单元进行创建, 也 可以是系统在往闪存中写入数据时,系统内的 写入装置通过写入的方式在闪存 中创建管理节点, 此时, 所述数据写入装置结构可结合图 5进行详细说明。

本发明实施例中在往闪存中写入数据节点时, 通过写入方式创建管理节点 的应用于闪存的数据管理装置还包括一数据写 入装置, 其结构示意图,请参见 图 5。 该装置包括如下单元:

第一检测单元 10, 用于检测待写入的闪存的块中是否有足够的空 间存储 待写入的另一个数据节点、 和该数据节点及已写入该块的数据节点的管理 节 点, 得出第一检测结果, 其中, 所述数据节点用于存储要写入的数据, 数据节 点用 jffs_raw_inode表示, 所述管理节点包括索引节点 jffs_raw_snode和管理 索引节点 j ffs_raw_blockend , 所述索引节点 j ffs_raw_snode 与所述数据节点 jffs_raw_inode——对应,用于存储数据节点 jffs_raw_inode在所述块中的偏移 地址,所述管理索引节点 jffs_raw_blockend用于存储由索引节点 jffs_raw_snode 构成的链表中的第一个索引节点在所述块中的 偏移地址;

第二检测单元 11 , 在所述第一检测结果为否时, 检测所述块是否有足够 的空间存储已写入该块的数据节点的管理节点 , 得出第二检测结果;

写入单元 12, 分别与所述第一检测单元 10和所述第二检测单元 11相连, 当所述第一检测结果为是时, 在当前块执行数据节点 jffs_raw_inode的写入操 作, 当所述第二检测结果为否时, 在另一个空的块执行 jffs_raw_inode写入操 作; 且在所述第二检测结果为是时, 挂起 jffs_raw_inode写入操作, 将内存中 保存的所述块中 已写入的数据节点的管理节点 jffs_raw_snode 和 j ffs_raw_blockend和写入该块。

管理节点创建单元 13 , 与所述写入单元 12相连, 用于在所述写入单元 12 执行 jffs_raw_inode写入操作时, 在闪存的各个块中, 创建所述管理节点。 具 体地, 先在内存中创建索引节点 jffs_raw_snode以保存所述写入操作所写入的 jffs_raw_inode 的偏移地址; 且在将内存中保存的所述块中已写入的 jffs_raw_inode的索引节点 jffs_raw_snode写入该块时,在内存中创建一个管 索引节点 jffs_raw_blockend 来保存本次写入操作所写入的索引节点 jffs_raw_snode构成的链表中的第一个索引节点 jffs_raw_snode在所述块中的 偏移地址。

所述数据写入装置还包括:

写入操作激活单元 14, 与所述写入单元 12相连, 当所述第二检测结果为 否时, 或在写入单元将管理节点创建单元创建的所述 块中已写入的 jffs_raw_inode的管理节点 ( jffs_raw_snode和 jffs_raw_blockend )写入该块之 后, 用于激活挂起的数据写入操作, 以使所述写入单元 12向另一个空的块执 行数据写入操作, 并将所述管理节点创建单元 13创建的保存本次写入操作所 写入的数据节点的偏移地址的索引节点写入该 块。

参见图 7, 为本发明实施例中文件系统挂载装置的结构示 意图, 主要运用 于 JFFS文件系统挂载, 所述装置用于包括:

检测单元 21 , 用于依次读取闪存中每个块的数据, 且在读取某块中的数 据时, 检测该块中是否存在管理索引节点 jffs_raw_blockend, 得出检测结果, 所述块中的数据存储在数据节点中;

第一获取单元 22, 与所述检测单元 21相连, 用于在所述检测单元得出的 检测结果为是时, 根据所述管理索引节点 jffs_raw_blockend 找到索引节点 jffs_raw_snode , 并菝取所述索引节点 jffs_raw_snode 中存储的数据节点 jffs_raw_inode的地址信息, 所述索引节点与 jffs_raw_inode—一对应, 用于存 储 jffs_raw_inode在所述块中的偏移地址, 所述 jffs_raw_blockend用于存储由 索引节点构成的链表中的第一个索引节点在所 述块中的偏移地址;

文件树建立单元 24, 与所述第一获取单元 22相连, 用于根据获取的数据 节点 jffs_raw_inode的地址信息在内存中建立文件树。

所述文件系统挂载装置还包括:

第二获取单元 23 , 分别与所述检测单元 21和所述文件树建立单元 24相 连, 用于在所述检测结果为否时, 扫描该块上的所有数据节点, 并获取数据节 点的地址信息, 通过该单元实现 JFFS文件系统的挂载时, 与现有技术方案一 致, 此单元是一个兼容设计。

为了避免在利用图 6 中的装置进行数据写入过程中, 断电造成索引节点 jffs_raw_snode和管理索引节点 jffs_raw_blockend数据写入不完整而读不出需 要的信息的情况, 在 JFFS文件系统挂载装置中可以设计一个校验单 , 在检 测单元 21 检测到该块的末尾是否存在 jffs_raw_blockend 时, 校验索引节点 jffs_raw_snode和管理索引节点 jffs_raw_blockend是否均完整,当 JFFS文件系 统挂载装置中设计了校验单元时, JFFS 文件系统挂载装置的结构图可参见图

8。

参见图 8, 为本发明实施例中文件系统挂载装置的另一结 构示意图, 除了 图 7中所述的检测单元 21、 第一获取单元 22、文件树建立单元 24和第二获取 单元 23外, 还包括校验单元 25:

所述校验单元 25 , 分别与所述检测单元 21、第一获取单元 22和第二获取 单元 23相连, 用于在所述检测单元 21得出的检测结果为是时,校验所述管理 索引节点 j ff s_raw_blockend和所述索引节点 jffs_raw_snode是否完整, 当校验到 jffs_raw_blockend数据完整且索引节点数据完整时 校验成功, 指示第一获取单元 22根据所述 jffs_raw_blockend找到索引节点, 并获取所述 索引节点中存储的 jffs_raw_inode的地址信息;

当校验到 jffs_raw_blockend数据或索引节点数据不完整时, 验失败, 将 该块中的索引节点和 jffs_raw_blockend信息作为垃圾数据等待下次垃圾 收 时回收掉, 同时指示第二获取单元 23扫描该块上的所有 jffs_raw_inode, 并获 取 jffs_raw_inode的地址信息。

实施本发明实施例, 利用空间换时间的策略,将数据节点的位置信 息通过 管理节点写入 Flash,使得下次挂载时,可以直接从 Flash的块中的管理节点中 直接读取到数据节点的地址信息,根据读取到 的数据节点的地址信息建立文件 树, 完成挂载, 从而避免扫描整个 Flash, 以寻找到各数据节点并从中读取出 地址信息,缩短了挂载过程所经历的时间,提 高了 JFFS文件系统挂载的速度, 减少系统初始化时用户等待时间。

以上所揭露的仅为本发明一种较佳实施例而已 ,当然不能以此来限定本发 明之权利范围, 因此依本发明权利要求所作的等同变化, 仍属本发明所涵盖的 范围。

通过以上的实施方式的描述,本领域的技术人 员可以清楚地了解到本发明 可借助软件加必需的硬件平台的方式来实现, 当然也可以全部通过硬件来实 施。基于这样的理解, 本发明的技术方案对背景技术做出贡献的全部 或者部分 可以以软件产品的形式体现出来, 该计算机软件产品可以存储在存储介质中, 如 ROM/RAM、 磁碟、 光盘等, 包括若干指令用以使得一台计算机设备(可以 是个人计算机, 服务器, 或者网络设备等)执行本发明各个实施例或者 实施例 的某些部分所述的方法。