操作系统实战 45 讲
彭东
网名 LMOS,Intel 傲腾项目关键开发者
65203 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 60 讲
尝尝鲜:从一个Hello到另一个Hello (2讲)
特别放送 (1讲)
操作系统实战 45 讲
15
15
1.0x
00:00/00:00
登录|注册

32 | 仓库结构:如何组织文件?

目录的作用
文件系统逻辑储存块
文件数据格式
操作系统需要动态加载和删除不同的文件系统组件
文件系统组件独立于内核
自定义逻辑储存块的原因
文件管理头
文件目录
位图
设计超级块
如何组织文件
文件格式与储存块
文件系统作为一个设备
文件系统解决如何储存文件在储存设备上,方便进程对文件进行操作的问题
思考题
文件系统数据结构
文件系统设计
什么是文件系统
仓库结构:如何组织文件?

该思维导图由 AI 生成,仅供参考

你好,我是 LMOS。
你有没有想过,蜜蜂把劳动成果变成蜜糖存放在蜂巢中,人类把劳动成果量化成财富存放在银行,但一个进程的劳动成果放在哪里呢?
看到这里,你可能有疑问,进程有劳动成果吗?当然有,进程加工处理的数据就是进程的劳动成果,可是这个“劳动成果”,如何表示、如何组织,又放在哪里呢?这些问题都会在我们讲解文件系统的过程中一一得到解答。
那今天我们先来搞清楚什么是文件系统,然后解决文件系统如何组织文件,最后对我们文件系统进行设计并抽象成数据结构。好了,下面我们正式开始今天的学习吧。
这节课的配套代码,你可以从这里获取。

什么是文件系统

我们经常在计算机上听 APE 音乐、看 4K 视频、阅读各种文档、浏览各种精美的网页,这些东西都是一些特定格式的数据,我们习惯把它们叫做文件,这些文件可能储存在 HD 机械硬盘、SSD 固态硬盘、TF 卡,甚至远程计算机上。
所以你可以这样理解,文件系统解决的就是如何把许多文件储存在某一种储存设备上,方便进程对各种文件执行打开、关闭、读写、增加和删除等操作。因为这些操作实际上非常复杂,所以操作系统中分出一个子系统专门处理这些问题,这个系统就叫文件系统
文件系统的核心现在我们还没法直观地感受到,但是它在上层为用户或者进程提供了一个逻辑视图,也就是目录结构。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了文件系统的组织结构及设计原理。首先介绍了文件系统的概念和逻辑视图,强调了目录结构的重要性。随后讨论了文件系统的设计,包括文件系统作为设备的位置、文件数据的格式和储存介质的最小单位以及如何组织大量文件。文章指出文件系统组件应该是独立的,并且操作系统需要动态加载和删除不同的文件系统组件以适应不同的存储设备和分区格式。此外,文章还介绍了文件数据的格式和储存块的概念,强调了文件系统如何将逻辑上的文件数据映射到具体的储存设备上。 文章还详细介绍了文件管理头的数据结构,包括文件状态、类型、访问时间、大小等信息,并解释了如何通过该数据结构管理文件所占用的逻辑储存块。此外,文章还提到了文件系统的设计数据结构,包括超级块、位图和文件管理目录等。 总的来说,本文为读者提供了对文件系统组织和设计的全面了解,使读者能够快速了解文件系统的基本原理和设计思路。文章内容涵盖了文件系统的基本概念、设计原理和数据结构,对于对文件系统感兴趣的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《操作系统实战 45 讲》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • neohope
    置顶
    一、数据结构 1、rfs文件系统大小为4M,直接存放于内存中,这样就可以忽略硬件读取的细节,专注于文件系统的实现。 2、文件系统的最前面4K,是 rfssublk_t超级块结构,用于描述整个文件系统的类型、版本、状态、超级块大小、位图块位置、根目录等。而且4K并没有全部被使用。 3、4M空间被划分为1024个4K的逻辑块,用位图表示逻辑块的占用情况,1表示可用,0表示不可用; 为了计算方便,奢侈了一把,用一个字节作为一位,实际占用了1K空间,连一个逻辑块4K都没能用完。 位图逻辑块地址记录在了超级块中,位图实际上被放到了第2个逻辑块中。 4、有文件系统,就要有目录,使用 rfsdir_t结构描述目录结构,长度位128字节。而根目录所在逻辑块直接记录在了超级块中。 rfsdir_t结构,可以指向目录也可以指向文件,通过rdr_type表示了所指向逻辑块中存放的数据类型。 如果所指向类型为目录,则指向的逻辑块,前512字节为文件管理头,后续都是rfsdir_t结构 如果所指向类型为文件,则指向的逻辑块,前512字节为文件管理头,后续都是文件内容 5、文件,使用 fimgrhd_t结构表示,包括了文件名,文件类型,文件大小,访问记录等。 fimgrhd_t存放于文件的第一个逻辑储存块的首个 512 字节。 文件较小时,通过 filblks_t数组,按文件顺序,记录多个连续的逻辑块。 如果连续存储块超出FBLKS_MAX个,会再申请一个 fmd_linknblk结构,并用当前 fmd_linknblk指向新的逻辑块,并将新逻辑块的fmd_linkpblk指向当前存储块,然后,在新的逻辑存储块中继续记录文件信息。

    作者回复: 铁汁 66666

    2021-08-07
    12
  • pedro
    不同设备的物理块都不同,难以兼容,还不如自己搞一个逻辑块抽象一层,降低程序复杂度

    作者回复: 对的 铁汁

    2021-07-21
    13
  • 吴建平
    文件管理管理头其实对应这linux的inode;这里比较特殊的是文件管理头和文件内容存储在一起,放在逻辑块的开始位置,而不是linux的inode集中存储。

    作者回复: 是的

    2022-01-06
    1
  • 残天噬魂
    文件系统属于存储设备,而不同的存储设备块的大小不同,单独去适配每一种存储设备会使得文件系统非常复杂,而且不易于扩展,所以抽象一个逻辑存储块出来进行统一管理

    作者回复: 是的

    2021-12-16
    1
  • Fan
    请问,我们文件系统的储存单位为什么要自定义一个逻辑储存块? 方便扩展,因为存储设备太多,有各种格式。

    作者回复: 正确的 铁汁

    2021-08-05
    1
  • 艾恩凝
    打卡,要仔细琢磨琢磨了

    作者回复: 好的

    2022-05-11
  • 搬铁少年ai
    比如一个文件占用:4~8、10~15、30~40 的逻辑储存块,那么就在 fmd_fleblk[0]中保存 4 和 4,在 fmd_fleblk[1]中保存 10 和 5,在 fmd_fleblk[2]中保存 30 和 10 这句是什么意思没看懂

    作者回复: 认真看课程

    2021-10-09
    2
  • Ronny
    抽象

    作者回复: 嘿嘿

    2021-09-29
  • 青玉白露
    主要是为了兼容同的存储设备,将存储单位自定义为逻辑存储块,而实际存储单位则根据存储设备自行决定。

    作者回复: 对的 铁汁

    2021-08-01
  • 相逢是缘
    rfsdir_t结构和fimgrhd_t 的关系没有搞清楚,看里面的字段,这两个都能表示文件或是目录吗?

    作者回复: fimgrhd_t是管理文件数据的 rfsdir_t是目录项 ,但是目录也是文件 在目录文件中就是保存的目录项,即一个个rfsdir_t

    2021-07-21
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部