本文循序渐进讲解Coffee文件系统的缘由,即为什么需要文件系统、Flash文件系统特性、WSN文件系统的特性,最后列出一些学习Coffee文件系统可参考的资料。
1. 概述
1.1 为什么需要文件系统
(1)便于数据管理和组织
无线传感器网络主要用于采集数据,并且数据通过网络传递给观察者。基于以下两个需求,需要将采集到的数据进行本地存储。
- 数据传递时中断(受硬件和环境因素影响,发生概率还是很高的),需要重传
- 合并多次采集到的数据,集中发出,以减少通信,进而降低功耗
(2)重编程的需要
考虑这样的情况,节点需要升级,一种思路就是将需要升级的节点全部回收回来,升级过后,再布置回去。这种思路缺点很明显也很致命,费时又费力,极端的情况,布置的结点就无法再取回了或者节点的工作不能被中断。
节点重编程恰解决了这个问题(也可以理解成动态加载),即通过无线传感器网络WSN将需要系统映像或者配置文件甚至是一个新的服务,传递到节点,进而更新。
1.2 Flash文件系统特性
嵌入式系统(当然也包括传感器节点)的外存是Flash,相对于磁盘,Flash有其自身的特性,这也决定了Flash文件系统需要考虑额外的问题,比如耗损平衡(Flash擦除块数限制)、坏块管理、掉电保护、垃圾回收、映射机制等,详情见博文《FLASH文件系统设计需考虑FLASH固有特性》。
1.3 WSN文件系统特性
无线传感器网络文件系统除了要考虑上述Flash文件系统的特性外(WSN节点的外存通常也是Flash),还需结合WSN的特点进行设计。
- 内存受限,这就要求不能设计很大的数据结构驻留内存,也不能划出很大一块来做cache。
- 被采集数据特点,被采集数据量的大小、频率等都会影响整个文件系统的设计。
1.4 Coffee
现有的基于Flash文件系统主要应用于嵌入式系统(内存往往没有那么受限、外存容量也比较大),不太适合无线传感器网络节点。我想,Contiki大概也是考虑到这些,所以自己写了个文件系统Coffee File System。其最大的两个特点:减少内存使用、大规模存储。
2. 学习资料
[1] Enabling Large-Scale Storage in Sensor Networks with the Coffee File System.pdf
[2]
[3]
[4]
[5] 源代码(主要集中在contiki/core/cfs、contiki/cpu/platform文件夹下)
文档[1]是实现Coffee的人发表的论文,[4]是Coffee文件系统的API描述,而[2]则是API详细描述,还介绍部分原理,[3]集中讲CFS测试的例子。资料[1]~[4](我目前所能找到的)远不够了解Coffee,只能阅读源代码[5]。