二十七、FAT和UNIX文件系统(数据结构视角的文件系统;FAT手册和目录树遍历)

一、文件系统实现

在一个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、大的时候应该用树,快速的随机访问

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值