山东大学操作系统课设lab4
实验四 扩展文件系统(lab4)
概念欠缺
- ifdef else 两个类名一样,用参数来确定使用哪个
实验目的
扩展Nachos的文件系统。Nachos的文件系统是一个简单并且能力有限的系统,限制之一就是文件的大小是不可扩展的。通过扩展,使得文件的大小是灵活可变的。
实验环境:
虚拟机下Ubuntu Linux 16.04 LTS系统,nachos-3.4内核管理模块和MIPS CPU软件模拟模块,文件系统模块,代码在lab4文件夹下面实现。
实验思路:
看filesys.h&filesys.cc。 filesys.h里是两种情况下的FileSystem类,里面方法都差不多,Create(),open(),remove()。情况为FileSys时,多了一个方法void List(),以及两个private属性freeMapFile,directoryFile。然后在filesys.cc里主要看这3个方法的内部实现和不同的属性、方法到底起了什么作用。Filesys.cc里引用了bitmap.h、directory.h,于是先去看bitmap.h&directory.h&directory.cc。 filehdr.h里所引用的disk.h和bitmap.h,分别在machine文件夹和userprog文件夹里。我对位图这个概念未有了解,搜到这个网页:https://www.jianshu.com/p/bf9dbbc147ed,我没有很详细地看那个例子的代码,只是大概看了一下BitMap算法,是用bit代替真实的数,这样节省了大量空间,很适合大量数据的排序、查询等问题。
其中disk.h里是:
Bitmap.h里是:
看到directory.h的代码,方法与bitmap.h类似。
两者都有FetchFrom()和WriteBack()方法。
回到filehdr.h的代码,只有一个类FileHeader,里面