1.7 KiB
1.7 KiB
文件系统
鉴于SD卡多是FAT32文件系统,我们将xv6原本的文件系统替换成了FAT32文件系统,并且尽可能地与原文件系统的接口保持一致或类似。目前在qemu平台上可以运行用户程序,包括shell。
修改了什么
对于文件系统,我们保留了xv6的disk、buf和file descriptor这几层的实现,而大体上做了以下修改:
- FAT32不支持日志系统,我们去掉了xv6文件系统的log层(log.c);
- FAT32没有inode,文件的元数据直接存放在目录项中,因此我们去掉了
struct inode
,替换为目录项struct dirent
(directory entry); - FAT32没有link,因此删除了相关的系统调用;
- 重新实现xv6文件系统(fs.c)中的各个函数,将函数接口中的inode替换成了entry,函数命名上保留原函数的特征但也做了修改以示区分,如
ilock
变为elock
、writei
变为ewrite
等等; - 关于buf层,由于FAT32的一个簇的大小较大,并且依不同的存储设备而变,因此我们目前以扇区为单位作缓存。
存在的问题
对FAT32的支持只是一个简单的实现,还未经过严格的测试,存在许多不足。这里需要说明几点。
- 为了简单起见,目前新建文件时无法生成时间戳,将长文件名转换到短文件名时未排重(这会影响较低版本的 FAT 系统);
- FAT32的文件属性不支持设备类型,而原xv6文件系统中有
mknod
系统调用新建一个设备,并可以使用open
打开。控制台输入输出就是这样打开的。为打开控制台标准输入输出,我们改用了另一种实现,即直接在内存中初始化控制台。