基于虚拟扇区的Flash存储管理技术
针对以上情况,作如下分配:
每个扇区大小为181字节;
SAT大小为1432字节,每个SAT单元用16位(2字节);
分为716个扇区,也相当于1个block能存716条名片记录,则131072-1432-716×181=44字节为空闲。
常数定义部分修改如下:
#define blockSIZE 128*1024 //每个block大小
#define SECTORSIZE 181 //每个扇区大小
#define MAX_SI_1B 716 //每个可擦除块中有SI个数
#define SATSIZE 1432 //扇区分配表大小
#define VSS_MASK 0XC000 //VSS属性屏蔽值
#define VSS_FREE 0XC000 //VSS为未使用的属性值
#define VSS_VALID 0X4000 //VSS为有效的属性值
#define VSS_INVALID 0X0000 //VSS为无效的属性值
约定:首先对名片进行编号,且约定名片的编号对应于VSS ID逻辑号。
a) 记录增加。增加一个记录时,根据提供的VSS ID号,首先查找这个记录号是否在使用。如果还没有使用,首先查找这个记录号是否在使用。如果还没有使用,则申请一个未使用的VSS,把相在内容写入这个VSS,修改其对应的SAT单元,写入有效属性值和VSSID号;否则,进入记录修改过程。
b) 记录删除。要删除一个记录时,根据提供的VSS ID号,查找SAT表。如果找到,修改其对应的SAT属性为无效;否则,说明这个记录不存在。
c) 记录查找。①由VSS ID号进行的查找:根据提供的VSS ID号,查找所有的SAT表中属性为有效的VSS ID,返回相应的BI及SI。②根据名片的用户名查找:检测所有的SAT表中属性为有效的VSS ID,得到相应的BI及SI,由BI及SI定位到指定Flash物理地址读入用户各到RAM中,比较是否相等。如果相等,读取并返回SAT单元的VSS ID;否则,继续查找。
d) 记录修改。当要修改一名片记录时,由VSS ID先把这个记录读入到RAM中,然后修改其内容,重新找一个未使用的扇区,把修改后的内容写入到这个新扇区中,并拷贝其VSS ID
号到这个新扇区对应的SAT单元,修改其属性为高,修改原来的扇区属性为无效。
结语
本文提出的Flash存储管理技术原理简单实用。它是对那些复杂的Flash文件管理系统的一种剪裁、简化和定制。对于那些不需要复杂的文件管理系统,而又使用了Flash作为存储介质的嵌入式系统有很好的借鉴意义和使用价值,如手机电话号码簿管理、短信管理等都可以利用这种技术进行管理。
《基于虚拟扇区的Flash存储管理技术(第4页)》