您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

TrueFFS原理及其在CF卡上的实现

时间:2007-1-20栏目:电子通信论文

被轮循使用,其它区域就会被更频繁地使用,这将降低Flash期望的生命值。TrueFFS通过强制转移静态区域的方法成功克服了静态文件锁定问题。因为映射表是动态的,TrueFFS能够以对文件系统不可见的方式转移这些静态数据区域。由于绝对强制损耗均衡方式会对性能产生一些负面影响,所以TrueFFS采取了一种非绝对损耗均衡算法。它保证了所有空间的使用近似平等而不影响性能。

2.2 碎片回收

块数据的修改使得Flash的一些块区域中的数据不再有效,并且这些区域在擦除之前变得不可写。如果没有机制来回收这些区域,Flash很快就会变成只读的状态了

。不幸的是由于这些块不可能单独擦除,回收这些块就有些复杂了。单次擦除被限制在一个叫作擦除单元的较大范围内,如对于AMD的Am29LV065D芯片来说是64KB。

TrueFFS使用一种被称为碎片回收的机制来回收那些不再包含有效数据的块。该机制从一个预擦除单元内复制所有的有效数据块到另一个新的被称为转移单元的擦除单元。然后,TrueFFS更新映射表,再擦除这个废旧的预擦除单元。这样,原来的块出现在外界时仍然包含了原来的数据,虽然这些数据现在已经存放在Flash存储器的其它空间。

碎片回收算法会找到并回收与下面标准最吻合的擦除单元:

①废块最多;

②擦除次数最少;

③最静态的区域。

2.3 块分配和关联数据集结

为了提高数据的读取效率,TrueFFS使用一种灵活的空间分配策略:将关联的数据(如由同一个文件的内容组成的多个块)集结到同一个单独擦除单元内的一段连续的区域中。为此,TrueFFS尽量在同一个擦除单元内维持一个由多个物理上连续的自由块组成的存储池。如果这样连续的存储池无法实现,TrueFFS分尽量保证池中的所有块是在同一个擦除单元内。如果连这样的情况也不可能的话,TrueFFS会尽量把块池分配到一个拥有最多可用空间的擦除单元内。

这种集结关联数据的途径有几个好处。首先,如果TrueFFS必须从一个小的存储窗口来访问Flash,那么这样集结了的关联数据可以减少调用映射物理块到该窗口的次数,加快了文件继续访问速度。其次,这种策略可以减少碎片的产生。这是因为删除一个文件可以释放掉更容易回收的完整块,意味着碎片回收会变得更快。另外,它可以使属于静态文件的多个块存放在同一地址,这样当损耗均稀算法决定移动静态区域时,转移这些块就变得更加容易了。

2.4 错误恢复

向Flash写数据有时可能会出错,比如在响应文件系统写请求时、碎片回收期间甚至在TrueFFS格式化或擦除Flash时。在这些情况下,TrueFFS能够从错误中恢复过来;但在新数据第一次写入Flash时如果出错就会丢失这些数据。然而,TrueFFS非常仔细地保证所有已经存放在Flash上的数据是可恢复的,甚至能够避免用户由于不耐烦或好奇而猛地拔出Flash卡而可能造成的灾难性后果。

TrueFFS健壮的关键是它使用了一种“先写后擦”的策略。当更新Flash一个扇区的数据时,只有在更新操作完成并且新存储的数据校验成功后,先前的数据才会被允许擦掉。这样的结果是数据扇区不能处于部分写状态。操作成功的话新扇区的数据有效,否则老扇区的数据有效。很明显,这样有利于用户已经写到Flash上的数据的稳定性。

3 编程

TrueFFS的编程主要在MTD层和Socket层。首先必须在当前VxWorks生成目录的配置文件(config.h)中定义:INCLUDE_TFFS(包含TrueFFS系统)、和INCLUDE_TFFS_SHOW(包含TrueFFS系统的显示函数)。

3.1 翻译层

翻译层根据Flash的实现技术来选择。设计中选用了SST公司的型号为SST49CF064的CF卡,64MB容量。它是基于NAND的Flash技术,所以在文件中定义INCLUDE_TL_NFTL;如果是NOR技术,则定义INCLUDE_TL_FTL。

3.2 MTD层

文件cfCardMTD.c实现了MTD层的功能。在本设计中,MTD层主要实现4个函数:读、写、擦除和ID识别。

上一页  [1] [2] [3] [4] 下一页

下页更精彩:1 2 3 4 下一页