坏块管理的另外一个任务就是决定何时对新产生的坏块进行标记。YAFFS2 采用产生即标记的策略,对于新产生的坏块马上进行标记处理。该方法可以保证坏块表的实时更新,是采用额外存储介质保存坏块表的比较理想的方案。但是本方案的坏块标记采用直接写入 FLASH 的策略,实时标记坏块会降低系统的数据处理能力,有可能造成数据的丢失。因而本方案不对坏块进行实时标记,而是首先在内存中将新产生坏块记录下来,等到系统空闲的 时候才进行坏块标记。
3.3 垃圾回收策略
NAND FLASH 只能在空闲块中写入数据,对于已经使用过的块必须进行擦除使之成为空闲块才能再次使用,这个过程称为垃圾回收。垃圾回收涉及到对块的擦除操作以及块内有效数据页的重新写入,对系统性能影响较大,因而合适的回收时机与策略是垃圾回收的关键。 YAFFS2 采用的垃圾回收策略为:每次在数据写入之前判断当前可用的空闲块,如果可用空闲块数量较少,则马上进行垃圾回收;如果空闲块较多,则采用松弛的回收算法,写多次再 进行一次垃圾回收。YAFFS2 垃圾回收以剩余空闲块数目作为是否回收的依据,而没有考虑 数据流存储的特点,因而在数据写入的时候经常会碰到需要垃圾回收的情况,导致数据存储速率的大幅下降。针对不同的应用环境,还存在一些其它的垃圾回收算法[4]。这些算法的共同特点是尽量寻找合适的回收时机减小对数据写入的影响,同时选择合适的回收策略提高系 统性能,但这些算法策略过于复杂,不适合空间应用。
考虑到星载存储器运行模式及卫星对数据实时存储要求苛刻的特点,本方案不在写入数据时进行垃圾回收,而选择在系统空闲时由用户主动进行垃圾回收。当容量不足的时候文件系统给出提示信息,告知用户需要进行垃圾回收,用户也可以随时查询文件系统的状态信息。该方案设计最为简单,对数据写入的影响也最小,只是每当系统容量不足的时候需要用户主 动进行垃圾回收。
4. 系统实现与测试
以某星载存储器项目为背景,本文实现了一个如图 1 所示结构的星载存储器演示系统。 该系统采用Samsung K9F1G08U0A 芯片组成4*4 的存储阵列作为存储空间,采用Xilinx xc2vp40 FPGA 芯片作为控制芯片,同时选用FPGA 内嵌软核MicroBlaze 完成CPU 功能 [5]。FPGA 同时负责完成FLASH 驱动层的功能,降低软件的控制复杂度,提高FLASH 的访 问效率。对于输入输出数据流的控制也使用FPGA 逻辑完成。本系统利用FLASH 存储芯片 和FPGA 控制芯片实现了一个SOPC 的存储系统,极大地简化了存储器的硬件结构,并且 具有很大的灵活性。
演示系统采用 2 路SPI 实时视频流模拟数据输入,通过自定义协议传输存储数据至地面 数据接收卡实现数据输出。由于原始YAFFS2 文件系统只能对单片FLASH 进行管理,因而 首先在单片FLASH 上对原始YAFFS2 进行测试,然后修改FLASH 底层驱动使得YAFFS2 能 够管理4 片并行存储结构,最后对实际的修改后方案进行测试。测试结果显示,采用原始 YAFFS2 文件系统的数据实时输入速率小于12.5Mbps,改进为并行结构后数据输入速率也不会超过50Mbps,否则会造成输入数据的部分丢失。而采用本文改进方案的设计,实时数 据输入速率达到200Mbps,数据存储稳定可靠。
上述测试结果表明,改进后的方案不但很好地实现了数据的文件化管理,数据实时输入 速率也比原始YAFFS2 系统至少提高了16 倍。该系统的数据指标已经能够满足部分星载存 储器的要求,为了进一步提高数据处理能力,可以考虑增加并行的芯片数目以及采用多级流 水线的设计结构。
5. 结束语
以 NAND FLASH 为存储介质的大容量存储器在空间应用中得到越来越广泛的重视,但 是由于FLASH 使用的特殊性,目前国内的FLASH 星载存储器普遍尚未采用文件系统进行数据管理,而是采用直接访问存储芯片的方式,数据管理复杂且使用缺乏灵活性。本文以商用 文件系统YAFFS2 为基础,针对空间应用数据存储的特点,提出了YAFFS2 文件系统的改进方案,并且实现了一个实际的星载存储器系统,对改进后的方案进行了验证。实验表明,改进后的文件系统很好地完成了数据的文件化管理,并且满足了空间应用大容量、高实时数据 率存储的要求。