单个文件映射到磁盘上,靠的是对应的映射表,通过映射表就可以知道该文件被映射到了那几个磁盘块进行存储。
要将整个文件系统都映射到磁盘上去,那么就需要在磁盘上维护相关数据结果来记录文件系统的结构,并且需要确保这些数据结构也能被其他机器识别,这样就可以让同一块磁盘可以被不同的机器解析并被使用。
下面的关键就是如何让一堆文件映射到磁盘了
如果将所有文件都放在一起,那么无论怎么划分,文件数量还是会很大,不方便管理。
首先需要回答:目录怎么用?
问题:更准确的说,是要干什么?
现在的关键就是如何完成目录名到对应文件FCB的映射
问题:那么目录中应该存什么?
存放目录下的所有文件的FCB吗? 如果是,解析my要干什么?
我们的目的只是查找my目录下的某个文件,并且在进行查找过程中,也只是根据文件名进行挨个匹配,如果每个文件名都需要保存其对应文件的FCB(FCB平均每个也有几百个字节),那么显然这样太浪费磁盘空间,毕竟大部分的文件的FCB都是不被需要的。
问题:有什么办法(目录存什么)让系统效率更高?
最直接的想法,就是能不能不直接存储对应文件的FCB,而是只存储对应FCB在磁盘中的位置,或者某一个编号,而通过磁盘中维护的某个数组,可以快速查找到该编号对应的FCB。
在磁盘中某个固定位置,我们需要维护一个FCB数组,当我们需要查询某个目录名时,首先需要从根目录开始查询起(根目录位置应该是固定的),通过根目录数据块维护的文件名和对应FCB索引映射关系,查询到对应一级目录的FCB。
然后再通过一级目录的FCB定位到对应的数据块,再通过数据块查询到下一级目录对应的FCB索引,然后依次往复,直到查询到最终的文件…
关键是起始的根目录位置,如果让操作系统知晓呢?
超级块可以记录两个位图有多大,包括自身有多大,通过这些信息就可以计算出存放节点的区域起始位置在哪里,然后就可以定位到根节点的位置,因为根节点是节点区域中的第一个节点,并且每个节点的大小也应该是固定的。
一个磁盘想要使用,需要mount到一个系统中,所谓mount就是读取超级块,超级块可以通过换算找到根目录,而如果要将磁盘挂载到当前系统的/usr/local目录下面,则当操作系统需要遍历/usr/local目录时,对应定位到的就是当前磁盘的根目录
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://cjdhy.blog.csdn.net/article/details/126297919
内容来源于网络,如有侵权,请联系作者删除!