MIT6.S081学习总结-lab9:file system

lab9 是文件系统相关,主要实现大文件的支持和软链接。

Large files

实现对大文件的支持
文件分配策略就是国内操作系统教材上讲的索引分配。原本xv6中每个文件有13个地址索引,前12个是直接地址索引,对应的数据块直接存储数据,最后一个是一级间接地址索引,对应的数据块存储地址索引,因此最大文件为 256 + 12 = 268 256+12=268 256+12=268个数据块。
增大支持的最大文件大小,可以增加一个二级间接地址索引,变为前11个直接地址索引,第12个一级间接地址索引,最后一个是二级间接地址索引,因此最大文件为 11 + 256 + 256 ∗ 256 = 65803 11+256+256*256=65803 11+256+256256=65803个数据块

实现:
fs.h添加二级间接地址索引
MIT6.S081学习总结-lab9:file system_第1张图片
fs.c的bmap增加二级间接地址索引的实现
MIT6.S081学习总结-lab9:file system_第2张图片
itrunc里实现释放二级间接地址索引的数据块
MIT6.S081学习总结-lab9:file system_第3张图片
别忘了file.h里的inode也要修改为与dinode一样。
MIT6.S081学习总结-lab9:file system_第4张图片

Symbolic links

实现符号链接。符号链接就是一个文件,这个文件数据块内容就是指向的文件名字。

实现
先创建一个文件,再把指向的文件路径写入数据块即可
MIT6.S081学习总结-lab9:file system_第5张图片
sys_open函数里添加打开符号链接文件时的处理,O_NOFOLLOW表示将该符号链接文件当做普通文件来打开。
MIT6.S081学习总结-lab9:file system_第6张图片

一些问题
总体实现不是很难,但是我在符号链接实验一个panic: virtio_disk_intr status卡了很久,打断点调试发现释放打开的文件时,ip->addr最后一个地址竟然有值,找了半天发现file.h里的inode没有修改。出现问题还是得仔细阅读lab的hint,看有没有漏下没有考虑到的。

make grade出现超时,然后qemu-system-riscv64: terminating on signal 15 from pid 45444 (make)。可以通过直接增大文件grade-lab-fs里timeout的时间解决。

你可能感兴趣的:(Linux,操作系统,linux,6.S081)