设为首页
收藏本免费论文网
老版首页
老版首页2
经济学论文 财政税收论文 证券金融论文 管理学论文 会计审计论文 工商管理论文 财务管理论文 公共管理论文 法学论文
理学论文 医药学论文 政治论文 社会学论文 教育类论文 工学论文 计算机论文 艺术类论文 哲学论文
文化论文 英语论文 应用文论文 论文指导论文 文学论文 老版免费论文 老版2免费论文 本站导航
本站已收录十余万免费论文,并不断增加中,想要什么论文资料,轻松一搜便得! 关键词:
免费理学论文免费论文网首页 --> 理学论文 --> 微电子学论文 -->嵌入式系统中的线性flash文件系统设计

嵌入式系统中的线性flash文件系统设计

 作者: WuYJ@263.net.cn 摘要:设计一种能够在典型嵌入式环境下应用的线性文件系统,为嵌入式系统Flash空间的管理提供一种非常有效的手段。它包装和通用文件系统类似的API接口,设计的实现独立于实时操作系统(RTOS)和具体的Flash典型,可方便移植到不同的嵌入式应用中。在嵌入式系统中,为了便于对闪存(Flash)空间进行管理,会采用文件的形式来访问Flash。目前,可以购买到的Flash文件系统一般都是兼容DOS的文件系统(Flash File System,FFS),这对需要一个具有复杂的目录层次,并且DDS文件兼容的系统来说是必要的;但是对大多数的嵌入式应用来说,这种文件系统太过奢侈。笔者在参与嵌入式系统项目的时候,设计了一种线性文件系统,它适用于大多数的嵌入式应用对Flash文件系统的需求。线性文件系统设计基于三个目标:一是提供给应用程序通过文件名而不是物理地址访问系统Flash的能力;二是文件系统的设计独立于实时操作系统(RTOS),这样可以很容易移植到不同的嵌入式应用中;三是设计统一的底层接口,适应不同的Flash类型。本文设计的线性文件系统为典型的嵌入式系统提供了所需的类文件系统能力。需要注意的是,本文件系统不支持复杂的Flash扇区擦写次数均衡算法,没有目录层次,并且和其它的文件系统不兼容。1 线性文件系统线性文件系统的设计思路是这样的:文件分为文件头和文件数据区两个部分,每个文件按照顺序存放在Flash中,以单向链表来链接文件。文件的起始部分是文件头,包含文件的属性、指向下一个文件头的指针、文件头和文件数据区的32位循环冗余校验和(CRC32)等。文件头用一个32位的字来表示文件属性,每位表示一种属性,如数据文件或者是可执行文件,是否已删除的文件等,具体可以根据应用的需要来定义文件的属性;文件头和文件数据区维护独立的CRC32校验,使文件系统能更精确检测文件的完整性。文件的起始地址没有特殊需求,分配给文件系统的Flash大小限制了文件的大小。另外,线性文件系统作为嵌入式系统的一个功能模块,它为应用程序提供与标准文件系统类似的API接口,如:read()、write()、open()、close()、stat()和seek()等。对于同时在多片Flash的系统而言,每片Flash相当于一个目标,文件都可存储在任何一片中(当然受物理空间限制),但不能跨片存储。

图1 Flash文件系统空间
在第一个文件创建之前,必须进行初始化,将所有分配给文件系统的Flash空间擦除。当创建第一个文件时,起始位置从文件系统的起始地址开始,文件头指针指向下一个空文件的起始位置(链表尾部);第二个文件的位置从当前的链表尾部开始,同时文件头中的链表指针指向新的尾部。删除文件时,仅仅是简单地把文件头的标识位中的活动文件标识位置0,表示删除。这样,在经过多次删除之后,就有必要运行碎片整理模块来进行文件系统Flash空间的碎片整理。碎片整理模块还需要在文件系统Flash空间尾部留一个扇区来数据备份,以便当碎片整理被打断时(如下电或者复位)可以恢复文件系统。这个保留的扇区称空闲扇区。它必须放在文件系统空间之后,这样可以保证文件系统的所有文件在所占用的Flash空间是连续的。整个文件空间的分配如图1所示。阴影部分是文件头,数据结构如下:struct hdr{unsigned short hdrsize; /*文件头字节数*/long filsize; /*文件头版本*/long filsize; /*文件大小*/long flags; /*描述文件的标识*/unsigned long filcrc; /*文件数据的CRC32的值*/unsigned long hdrcec; /*文件的最后修改时间*/struct hdr *next; /*指向下一个文件头的指针*/char name[NAMESIZE]; /*文件名*/char info[INFOSIZE]; /*文件描述信息*/};碎片整个记录区包含两种数据类型:碎片整理文件头信息表defraghdr和文件区扇区整理前后的CRC值备份表sectorcre。具体的地址分配从空闲扇区的起始地址减1开始,往前分配文件系统扇区数乘以4字节作为sectorcrc的空间;从sectorcrc起始地址减1开始,往前分配活动文件个数乘以64字节作为碎片整理文件头信息表。这两个结构定义如下:struct defraghdr{struct hdr *ohdr; /*文件头的原始位置指针*/struct hdr *nextfile; /*指向下一个文件的指针*/long filsize; /*文件大小*/unsigned long crc; /*这个头的CRC32值*/unsigned long ohdrcrc; /*原始文件头CRC32值的拷贝*/long idx; /*碎片整理表头的索引*/long nesn; /*新的文件尾的扇区号*/long neso; /*新的文件尾的扇区偏移量*/char *nda; /*新的文件起始地址*/char fname[NAMESIZE]; /*文件名*/};struct sectorcrc{unsigned long precrc; /*碎片整理前扇区数据CRC32的值*/unsigned long postcrc; /*碎片整理后扇区数据CRC32的值*/};从上面介绍可知,除了文件数据之外,文件系统还需要如下4种额外的开销。①文件头:这是每个文件必须的开销,如果文件名和信息域各24字节,那么整个文件头共76字节。②碎片整理文件头信息表:每个活动(非删除)的文件在进行碎片整理时在这个表里创建一个表项,每个表项64字节。③碎片整理前后的扇区CRC32值表:保存文件整理前后的CRC32值,总的字节数约为文件所占扇区数的4倍。④空闲块:用来在碎片整理过程中备份当前整理扇区数据。它必须不小于文件系统其它所有扇区。可以用下面方程计算系统开销的总和:overhead=(FTOT*(HDRSIZE+64))+SPARESIZE+(SECTORCOUNT*8)其中:FTOT是总的文件数;HDRSIZE是文件头字节数(目前为76字节);SPARESIZE是空闲块的大小;SECTORCOUNT是分配给文件系统的Flash扇区数,不包括空闲块。

   
嵌入式系统中的线性flash文件系统设计 来自: 免费论文网www.paper800.com  
图2 文件碎片整理
2 碎片整理创建新文件需要占用文件系统空间;但是,由于Flash的底层技术不允许Flash中的任意地址空间被删除,而是按照扇区为单位删除,为此在删除一个文件的时候,暂时没有把整个文件所占的空间删除,仅仅是在文件头的标识里作一个删除标识,并保留在Flash中。这样,被删除文件积累到一定的数量时,就会占用相当大的空间。因此,需要整理文件系统Flash空间,使被删除文件占用的空间重新使用。图2显示了碎片整理过程。文件F1、F2和F5已经被删除,并且在碎片整理之后从Flash中被清除。进行碎片整理的方法可以有多种。对于嵌入式系统来说,选择哪种方法,衡量的依据是复杂性和功能之间的平衡。下面讨论两种不同的方法:第一种方法相当简单,但是有缺陷;第二种方法功能强大得多,笔者在线性文件实现中即采用这种方法。当然,存在更加复杂的解决办法,但通常的情况是,所添加的复杂性会使整个文件系统的实现更加复杂。目标是保持文件存储的简单和线性,保证所有的文件都是以连续的空间存储在Flash中。最简单的方法是将活动的文件备份在RAM中,删除分配给文件系统的Flash空间,然后将RAM中备份的所有文件拷贝回Flash。这种方法很简单,并且不需要分配一个扇区作为空闲区;但问题是,需要有一整块和分配给文件系统的空间一样大的RAM来完成这项工作。更糟的是,如果此时系统被复位,或者在删除扇区内容却还没有将文件拷贝回Flash的时候被断电,文件系统将会崩溃。因为RAM中的内容会随之选择,文件内容会被破坏掉。我们在文件系统实现设计了一种碎片整理方法,可以防止在碎片整理过程中系统复位导致文件崩溃的情况。采用这种方法,不需要大块的RAM,但是需要预选先分配给碎片整理过程一个Flash扇区作为备份区。这个扇区的字节数不小于任何分配给文件系统的扇区。在整个文件系统中,这个扇区位于分配给文件系统最后一个扇区的下一个扇区。因为扇区可能比需要分配给非删除文件的备份的空间要小,所以它必须逐个扇区进行处理,而不是一下就把所有的碎片整理完。采用备份扇区的好处是,在碎片整理过程中,无论断电或者复位都不会破坏文件系统。当下次系统重新恢复时,会根据在碎片整理前记录的每个扇区碎片整理前后CRC值,来判断当前的文件碎片整理状态。如果上次文件整理没有完成,就会继续上次的整理。这种技术的一个缺陷是空闲扇区的擦写次数会较多。这样空闲扇区就可能因为达到擦写寿命而失败。达到这一点的关键依赖于使用的Flash、所分配给文件系统的扇区数、文件删除和重建的频率。一个可行的解决办法采用电池备份的RAM来替换空闲扇区,可以增加Flash的整体寿命,但是对那些预算紧张的应用来说太过奢移。具体的碎片整理过程是,首先建立碎片整理区。①为每个扇区建立2个CRC32表项;第一个CRC32是这个扇区在碎片整理前的CRC值;第二个CRC32值是计算出来的碎片整理后的CRC32值。这些CRC是当碎片整理过程被打断时,用来重新恢复整理用的。②创建碎片整理文件头信息表,每个活动的文件占用一个表项。③计算①和②的CRC值,并保存。①~③的数据保存在图1中的碎片整理记录区。第二步是文件重定位;遍历文件系统的每个扇区,处理重新定位后存储空间和该扇区相覆盖的文件。在每个扇区被重写之前,扇区原来的信息被保存在空闲扇区里。第三步,擦除Flash;遍历未使用的扇区,确认所有的扇区被删除。第四步,完整性检测:对新的文件进行检测,保证所有重定位的文件都是完整的。3 应用分析Flash的扇区有最大擦写次数。当前的Flash芯片一般支持10万~100万次的擦除。文件系统的应用各不相同,所以这里不能下结论说采用线性文件系统Flash的寿命会有多长。下面解释文件系统访问Flash的方法。这样用户可以根据应用来判断Flash的预期寿命。我们所设计的线性文件系统并不进行扇区删除次数均衡,以延长Flash的使用寿命。如果所需要的文件系统频繁修改并需要扇区删除次数均衡,可以购买现成的Flash文件系统。扇区删除均衡算法大大增加了底层实现的复杂性,并且超出本文的讨论范围。一般来说,通过文件系统来管理Flash的需求远大于对Flash扇区擦写次数均衡的需求,特别是现在越来越多的Flash扇区都支持100万次的擦写。如上面所提到的,文件系统本身提供给编程者的接口API与标准OS提供的接口类似。这可能误导开发者认为文件系统可以看作是一个硬盘,以任意的频率进行读写操作。事实并不是这样,线性文件系统碎片整理同制并没有进行擦写次数均衡,这意味着空闲扇区可能会是最早损坏的Flash扇区。因为在碎片整理过程中,空闲扇区被用作其它所有扇区的暂时存放扇区。例如在设计里,有13个扇区Flash用来作线性文件系统区,有1个扇区作为空闲扇区。假设对于最坏情况的碎片整理(13个扇区都影响到),如果每天进行1次碎片整理,对于100 000次擦写次数的Flash而言,可用期能够超过20年(100 000/13/365=21)。20年是基于每天进行1次碎片整理,并且所有扇区都影响到的情况。碎片整理的频率和整理所影响到的扇区数受应用程序使用文件的限制。用户可以根据文件系统的应用来估算Flash扇区的磨损情况,并作相应的处理。下面讨论文件系统是如何使用扇区的。Flash扇区仅仅在碎片整理时候才被擦除。当删除文件的时候,只是简单地作一个标识(文件头的一个位)。如果一个存在的文件以写的方式打开,实际的修改步骤是,删除原有的文件,并在当前文件系统的最后一个文件之后重写该文件。最后,这个过程会使文件系统的Flash空间被耗尽,这要就需要运行碎片整理程序。碎片整理程序会使已被删除文件所占用的空间被清除,所有活动的文件在Flash中的位置以连续的方式存放。每个扇区的整理过程是,扇区被拷贝到空闲扇区作备份,然后原来的扇区被删除,计算出该扇区在文件整理后的内容,写入扇区,之后删除空闲扇区的备份。文件系统从头到尾每个扇区重复这样作。在碎片整理时,如果一个扇区不需要进行碎片整理,碎片整理程序就不会动这个扇区因此,受碎片整理程序影响的扇区数目依赖于当前被文件系统占用的Flash扇区数和被删除文件在Flash中的位置。在一个典型的嵌入式应用里,文件系统中的可执行文件本身就是应用程序。可执行文件一般是最大的文件,也是最不可能经常改变的文件。这意味着执行文件所占用的空间是相对固定的,将会减少空闲扇区因为碎片整理而进行的擦写次数。另外一方面,如果有任何文件需要定期改动,碎片整理将会更加频繁运行。结语本文所设计的线性文件系统已经成功应用在笔者参加的嵌入式系统的产品,并且在实践中证明是一种比较有效的管理Flash的方式。当然,线性文件系统不是解决所有嵌入式应用管理Flash空间问题的答案,但是它对于那些不能判断是否要购买现成的Flash文件系统的项目提供了一个非常有用的选择方案。有关线性文件系统实现的C源代码,可以通过E-Mail:WuYJ@263.net.cn直接与笔者联系。

   
嵌入式系统中的线性flash文件系统设计 来自: 免费论文网www.paper800.com

 如果觉得本篇论文可以,添加到收藏夹! [返回顶部↑
搜 索 其 它
相 关 论 文
干式气柜密封油过量损耗的综合防治措施
中学生拖延行为及对策研究
浅谈我院信息管理网络系统实施经验
windows的新安装技术
学生玩电脑游戏心理的初探与思考
地址重映射在s3c4510b系统中的实现
浅谈亲子关系与心理健康
佳木斯市图书馆加强地方文献工作的新探索
相 关 类 别
物理学论文
统计学论文
数学论文
农林学类论文
地理地质论文
理学其它论文
微电子学论文
生物技术论文
应用化学论文
电子信息科学与技术论文
环境科学论文
生态学论文
材料物理论文
材料化学论文
心理学论文
生物科学论文
资源环境与城市规划管理论文
地理科学论文
应用心理学论文
海洋科学论文

免费论文网包含:各类免费毕业论文下载、免费法律论文、免费计算机论文、免费会计论文、免费英语论文、免费经济论文、免费管理论文、免费金融论文、大学生社会实践论文、三个代表论文、三农问题论文等所有论文均来源于网上的共享资源以及一些期刊杂志,所有论文仅供网友间相互学习交流之用,请特别注意勿做其他非法用途!如果我们有侵犯你的版权或其他有损您利益的行为,请联系我们指出,我们会立即进行改正或删除有关内容!
广告服务 | 关于我们 | 加盟合作 | 免责条款 | 人才招聘 | 联系我们