嵌入式
环境
下以
FLASH
作为
MTD
设备使用时的技术瓶颈,
开发背景:
FLASH
特性:
FLASH
是一类电可擦出可编程存储体,在使用方式上与硬磁盘最大不同是:
FLASH
文件系统所必须的关键技术:
1.
由于
FLASH
的“先擦除后写”的特性决定,必须(或者说所被公认为)采用
异地更新策略(
out-of-place update)
。相关问题讨论可参考:
2.
采用异地更新策略就必须(或者说所被公认为)采用日志文件系统来管理。
3.
采用日志文件系统就必须(或者说所被公认为)实现垃圾回收(
garbage
collection)
4.
由于
FLASH
的物理擦除块(
Physical Erase Block
)只有有限次有效擦除,
所以必须
(或者说所被公认为)
采用“负载平衡”
(我比较喜欢翻译为“损益均
衡”——一个经济学术语)
(Wear-
Leveling)
技术,
即保证上的
(几乎)
所有
PEB
的擦除次数趋向于均衡化,从而避免小部分
PEB
大大先于其他
PEB
而”坏“掉。
当前嵌入式
FLASH
解决方案多采用:
1.
无文件系统直接使用
FLASH
:缺点很明显
2.
采用传统文件系统,如
ext2,ext3, FAT16/32, dos
,
Cramfs
等:这些文件
系统本来是为传统的磁盘体开发的,
他们无法高效的管理以
FLASH
作为介质的文
件系统,特别是在
FLASH
的使用寿命上。于是出现了第
3
中方案。
3.
采用
FTL
/
NFTL
(
flash
转换层/
nand
flash
转换层)
+
传统文件系统:
FTL
的使用就是针对
FLASH
的特有属性,
通过硬件的方式来实现日志管理、
损益均衡
等技术。但实践证明,由于各方面因素导致本方案有一定的局限性。
4.
FLASH
专用文件系统,
如
JFFS1
/
2
,
YAFFS
等,
他们从一定程度上缓解了
flash
使用上的技术瓶颈。但也仍然存在诸多问题:如内存消耗大,对
FLASH
容量、
文件系统大小、内容、访问模式等的线性依赖,损益均衡能力差活过渡损益。随
作
FLASH
容量逐渐暴涨(我见到的资料已经有
64GFLASH
已经实用化),
JFFS
,
YAFFS
几乎无法管理如此大的
FLASH
——虽然
JFFS
目前还在改进中,
但前途不看
好,一个很好的例子
JFFS
的主要开发者大多倒向了
UBIFS
。:)
UBI
:一种类似于
LVM
的逻辑卷管理层。主要实现损益均衡,逻辑擦除块、卷管
理,坏块管理等。
UBIFS
:基于
UBI
的
FLASH
日志文件系统。