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



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

    在这里插入图片描述
    单个文件映射到磁盘上,靠的是对应的映射表,通过映射表就可以知道该文件被映射到了那几个磁盘块进行存储。


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

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

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


    故事先从多个文件开始…

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


    引入目录树

    在这里插入图片描述


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

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

    • 用“/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目录时,对应定位到的就是当前磁盘的根目录


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

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    为保护iPhone 13,iPad产量被砍50%,全球芯片短缺带来的影响超乎想象
    maven了解
    Python实现简单的爬虫功能
    51单片机proteus仿真
    安装JumpServer
    【python笔记】第八节 函数基础
    Windows连接Samba服务时报“找不到网络名”
    艾美捷PEG-2000 DMG解决方案
    MySQL用户管理
    面试经典150题——Day19
  • 原文地址:https://blog.csdn.net/m0_53157173/article/details/126297919