操作系统目录与文件系统---21

x33g5p2x  于2022-08-17 转载在 其他  
字(1.1k)|赞(0)|评价(0)|浏览(297)

文件,抽象成一个磁盘块集合

单个文件映射到磁盘上,靠的是对应的映射表,通过映射表就可以知道该文件被映射到了那几个磁盘块进行存储。

文件系统,抽象成整个磁盘(第四层抽象)

要将整个文件系统都映射到磁盘上去,那么就需要在磁盘上维护相关数据结果来记录文件系统的结构,并且需要确保这些数据结构也能被其他机器识别,这样就可以让同一块磁盘可以被不同的机器解析并被使用。

下面的关键就是如何让一堆文件映射到磁盘了

故事先从多个文件开始…

如果将所有文件都放在一起,那么无论怎么划分,文件数量还是会很大,不方便管理。

引入目录树

实现目录成为了关键问题…

首先需要回答:目录怎么用?

  • 用“/my/data/a”定位文件a

问题:更准确的说,是要干什么?

  • 根据/my/data/a,得到文件a的FCB

现在的关键就是如何完成目录名到对应文件FCB的映射

问题:那么目录中应该存什么?

存放目录下的所有文件的FCB吗? 如果是,解析my要干什么?

我们的目的只是查找my目录下的某个文件,并且在进行查找过程中,也只是根据文件名进行挨个匹配,如果每个文件名都需要保存其对应文件的FCB(FCB平均每个也有几百个字节),那么显然这样太浪费磁盘空间,毕竟大部分的文件的FCB都是不被需要的。

问题:有什么办法(目录存什么)让系统效率更高?

最直接的想法,就是能不能不直接存储对应文件的FCB,而是只存储对应FCB在磁盘中的位置,或者某一个编号,而通过磁盘中维护的某个数组,可以快速查找到该编号对应的FCB。

树状目录的完整实现

在磁盘中某个固定位置,我们需要维护一个FCB数组,当我们需要查询某个目录名时,首先需要从根目录开始查询起(根目录位置应该是固定的),通过根目录数据块维护的文件名和对应FCB索引映射关系,查询到对应一级目录的FCB。

然后再通过一级目录的FCB定位到对应的数据块,再通过数据块查询到下一级目录对应的FCB索引,然后依次往复,直到查询到最终的文件…

关键是起始的根目录位置,如果让操作系统知晓呢?

要使整个系统能自举,还需存一些信息

超级块可以记录两个位图有多大,包括自身有多大,通过这些信息就可以计算出存放节点的区域起始位置在哪里,然后就可以定位到根节点的位置,因为根节点是节点区域中的第一个节点,并且每个节点的大小也应该是固定的。

一个磁盘想要使用,需要mount到一个系统中,所谓mount就是读取超级块,超级块可以通过换算找到根目录,而如果要将磁盘挂载到当前系统的/usr/local目录下面,则当操作系统需要遍历/usr/local目录时,对应定位到的就是当前磁盘的根目录

“完成全部映射下”的磁盘使用

相关文章