新闻中心

EEPW首页>嵌入式系统>设计应用> 基于Flash存储器的嵌入式文件系统设计

基于Flash存储器的嵌入式文件系统设计

作者: 时间:2012-04-06 来源:网络 收藏



内存中的文件节点不包含文件真正的数据,而使用指针。文件被打开时,在内存中创建一块新存储区域存放数据,数据指针便指向此存储区,未被打开时,此指针指向空。 对于每个目录有1 个目录层数,表示此目录的深度,如根目录的目录层数为0 ,根目录的下一级目录则为1 ,依此类推。 存储地址保存文件或目录在中的地址。文件和目录都被存在上一级目录下,所属目录指针即指向上一级目录在内存中的数据结构,根目录的所属目录指针即为空。对于同目录下的不同节点,在内存中使用链表将其串联,同目录文件指针即联成链表。 链表的首指针保存在上一级目录中,首目录项指针即指向链表的首项。为提高块擦写的效率,存储在同一个可擦写块中的各个节点在内存中也建立一个链表,块队列指针即用于连成此链表。为标识被修改的节点,利用一个未保存队列,未保存队列指针即用来建立此队列。

载入(mount ) 时,首先顺序扫描中的每个索引节点,查找出最大的索引节点更新号,此更新号对应的索引节点即为最新的索引节点。查找到最新索引节点后,将簇状态表等信息映射到内存的数据结构中。依据索引节点中的根目录信息,遍历所有节点,建立内存中的目录文件结构,并将节点添加到对应的擦写块队列中。 对一个文件编辑并保存的过程见图6。


文件打开时,先在内存中分配一块空间作为数据区,将内容写入,并定位文件节点的数据指针指向该内存中的数据区。如果文件内容被修改,就将文件节点添加到未存盘队列,依次写入中,并修改簇状态表。 保存时将内存中数据区内容写入Flash 中,释放申请的内存空间,修改节点中的数据指针和簇状态表,再将文件的所有上级目录重新写入Flash ,最后将更新后的索引节点内容写入Flash。如果文件未被修改,则只需修改数据指针即可。

节点加入未存盘队列的顺序按照目录层数的大小排列,文件节点排在队列首,目录层数最大的排在其后,目录层数为1 的排在队列末尾,根目录不加入未存盘队列。

特殊处理机制

均衡擦写机制 

为了避免任意一个可擦除块因擦写次数过多而过早报废,对Flash擦写时采用了均衡擦写机制。 考虑到系统的精简性,擦写在整片Flash 的各块中依次进行,一块擦写完后,下一个被擦写的块即为后一个块,在系统的索引节点中保存了下一个要擦除的块号。当文件系统中的剩余空间减少到设定值时,系统会擦除此块,以回收脏簇占用的空间。对应每个可擦写块都有一个节点队列,此块中包含的节点都加入其中。块擦除的流程见图7。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭