您的位置:首页 > 其它

杭州电子科技大学操作系统课程设计:简单文件系统的实现

2017-12-25 17:54 495 查看
本实验的代码地址:https://github.com/yjc567/HDU_OS_Assignment_2017_SimpleFileSystem,如有需要,欢迎自行取用,但是不建议你拿着这个代码去验收,自己的知识永远是自己的,好好学习才是王道!

emmmm想写一个操作系统的课程设计说明,因为自己写的时候也遇到了好多问题,外加感觉对实验指导书的说明有些疑问,觉得写出来可以给别人看看。但是感觉写出来的东西……没什么好看的。

因为这个系统还是有点复杂,但是自己又没有太多的时间和能力把这个复杂的系统说清楚。

存储功能的接口实现

课程设计的文件系统是个类似fat的文件系统结构。fat的结构可以大致参考一下课程设计书或者上课ppt的内容,如下图。磁盘被分为若干块相同大小的磁盘块,一个文件的fcb会记录一个文件的大小和这个文件对应的fat起始物理块号,fat表会标记出一个物理块号的下一个物理块号,如果是EOF,则表明这个物理块是一个文件的最后一个物理块。这些物理块号的二进制文件串联起来后,就是一个文件的内容。



每次文件系统程序运行的时候,程序会申请一个大小为1024000字节的内存空间,作为虚拟的磁盘空间。申请完成后,程序就会试图打开一个名为
myfsys
的文件,这个文件是上一次程序运行结束时,内存中的虚拟磁盘空间的备份。如果
myfsys
文件不存在,或者
myfsys
的前八个字节不是二进制数01010101的话,程序就会进行系统的初始化,反之会通过
fread()
函数把
myfsys
读进内存空间。

那么怎么把fcb结构体或字符串写进虚拟磁盘空间或者从虚拟磁盘空间读出fcb结构体或字符串呢?利用
memcpy()
函数就好了,这个函数可以自行地把各种变量的内存写到其它内存上。因此,如果我们要读出一个目录文件下有哪些文件,只要根据这个目录文件的fcb从虚拟磁盘上读出相应的信息,然后把信息加载到一个个fcb结构体中,就得到了其目录下的fcb文件。

文件系统基础功能的分析和实现

创建文件功能

不管是创建文件夹还是创建文件,其实都是在其父目录对应的文件目录下新增一个新的fcb,只不过fcb的内容稍有不同,所以自己用
my_touch()
函数来创建对应的文件(其实Linux下就有
touch
命令,就是用来创建文件的),然后再根据这个文件的类型进行其它的相应操作。

打开文件功能

与上同理,不管是打开文件夹还是打开文件,其实就是打开一个文件fcb并读取相关信息。于是
my_cd()
函数和
my_open()
函数其实都是一样的功能,写一个,调用一个就好了。

指导书中的一些问题和疑惑

文件夹fcb中的
.
..
文件项有什么用

没用,真的没用,至少我认为用了这两个文件项会出bug,因为当你用
./
这个目录打开当前目录的时候,当前目录会把
./
当成自己的父目录,当当前目录发生了修改,需要把修改后的信息写入父目录时,其实际父目录不会发生修改。

然后自己是写了一个
rewrite_dir()
函数来把输入的目录改写成一个完整的目录,每次从根目录打开文件夹,避免使用
.
..
文件项。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  操作系统 作业