最近一直在研究yaffs,准备写个专题系列,当然现在的整理有点零散,而且一些我理解的想法不一定正确,现在先以笔记的形式把我的理解过程记录下来,之后会整理成一个更系统的关于yaffs的专题。
2009 04 10
yaffs的缓存机制
由于nandflash是有一定的读写次数的,所以在对一个文件进行操作的时候往往是先通过缓冲进行,对最后一次性写入nandflash,这有效的减少了用户对nandflash的频繁操作,延长了nandflash的寿命。
下面大致说一下yaffs的缓存机制:
1.首先在yaffs_mount的时候会对yaffs_dev这个结构体进行注册,和缓冲部分相关的有:
dev->nShortOpCaches//这个变量决定了有多少个缓冲,因为缓冲会大量的占用堆栈的空间,所以在yaffs不建议缓冲的数量很大,即使你填一个很大的数,系统也不会超过YAFFS_MAX_SHORT_OP_CACHES的总数。
yaffs_ChunkCache *srCache;//缓冲区的首地址,dev->srCache = YMALLOC( dev->nShortOpCaches * sizeof(yaffs_ChunkCache));
下面介绍一下缓冲区这个结构体的组成:
typedef struct
{
struct yaffs_ObjectStruct *object;//一个缓冲区对应一个文件
int chunkId;
int lastUse; //通过lastUse来
int dirty; //标志了这一个缓冲区是否被使用
int nBytes;
__u8 data[YAFFS_BYTES_PER_CHUNK];//数据区
} yaffs_