一、文件系统实现
在一个IO设备(块设备)实现所有文件系统API
bread(int id, char *buf)
bwrite(int id, const char* buf)
二、数据结构的实现
Block device提供的设备抽象
struct block blocks[NBLK]; // 磁盘
void bread(int id, struct block *buf) {
memcpy(buf, &blocks[id], sizeof(struct block));
}
void bwrite(int id, const struct block *buf) {
memcpy(&blocks[id], buf, sizeof(struct block));
}
在bread/bwrite上实现块设备的分配和回收(类似pmm)
int balloc();
void bfree(int id);
三、FAT文件系统
扇区格式
格式1
struc block
{
int *data;
int *nextBlock;
};
(data|nextBlock)(data|nextBlock)(data|nextBlock)
1、优点:实现简单、无须单独开辟空间
2、缺点:数据大小不是2^k,单独的lseek需要读取整块数据
格式2
next[0]next[1]next[2] (data0)(data1)(data2)
1、优点:局部性好,lseek快
2、缺点:集中存放受损,整个数据受损
FAT-12/16/32(FAT entry,指的是“next”的大小)
四、ext2/UNIX文件系统
按对象方式集中存储文件/目录元数据
1、增强局部性
2、支持链接
为大小文件区分 fast/slow path
1、文件小的时候,使用数组
2、大的时候应该用树,快速的随机访问