33 | 仓库划分:文件系统的格式化操作
LMOS
该思维导图由 AI 生成,仅供参考
你好,我是 LMOS。
上一节课中,我们已经设计好了文件系统数据结构,相当于建好了仓库的基本结构。
今天,我将和你一起探索仓库的划分,即什么地方存放仓库的管理信息,什么地方存放进程的“劳动成果”(也就是文件),对应于文件系统就是文件系统的格式化操作。
具体我是这样安排的,我们先来实现文件系统设备驱动,接着建立文件系统超级块,然后建立根目录,最后建立文件系统的位图。下面,我们先从建立文件系统设备开始。
文件系统设备
根据我们前面的设计,文件系统并不是 Cosmos 的一部分,它只是 Cosmos 下的一个设备。
既然是设备,那就要编写相应的设备驱动程序。我们首先得编写文件系统设备的驱动程序。由于前面已经写过驱动程序了,你应该对驱动程序框架已经很熟悉了。
我们先在 cosmos/drivers/ 目录下建立一个 drvrfs.c 文件,在里面写下文件系统驱动程序框架代码,如下所示。
这个框架代码我们已经写好了,是不是感觉特别熟悉?这就是我们开发驱动程序的规范操作。下面,我们来建立文件系统设备。
按照之前的设计(如果不熟悉可以回顾第 32 课),我们将使用 4MB 内存空间来模拟真实的储存设备,在建立文件系统设备的时候分配一块 4MB 大小的内存空间,这个内存空间我们用一个数据结构来描述,这个数据结构的分配内存空间的代码如下所示。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了文件系统的格式化操作,包括建立文件系统设备和系统格式化。通过详细讲解文件系统设备的驱动程序框架代码和文件系统的超级块建立过程,读者可以快速了解文件系统的建立和格式化过程。文章还介绍了建立位图的过程,通过清零储存设备中的位图块,实现了管理逻辑储存块状态的位图。整体而言,本文内容丰富,适合对文件系统格式化操作感兴趣的读者阅读。 文章还介绍了建立根目录的过程,包括分配逻辑储存块、设置超级块中的rfsdir_t结构、初始化文件管理头数据结构等步骤。此外,文章还提到了获取/释放位图块和超级块的函数实现,以及对文件系统的初始化和格式化操作进行了串联,为读者展示了完整的文件系统格式化流程。 在测试文件系统部分,作者提到了对文件系统格式化功能进行测试的重要性,并表示将在下一节课中实现文件相关的操作。整体而言,本文内容涵盖了文件系统格式化的重要步骤和相关代码实现,对于想要深入了解文件系统格式化操作的读者来说,是一篇值得阅读的文章。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《操作系统实战 45 讲》,新⼈⾸单¥68
《操作系统实战 45 讲》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- neohope置顶二、文件系统初始化 1、文件系统本身是个驱动,同样需要把驱动放到全局驱动列表中 osdrvetytabl={systick_entry,rfs_entry,NULL} 2、从而,让系统启动时自动加载驱动 hal_start->init_krl->init_krldriver->rfs_entry new_device_dsc,分配内存 new_rfsdevext_mmblk,分配设备内存 krldev_add_driver,处理驱动 krlnew_device,处理设备 init_rfs->rfs_fmat,初始化文件系统 3、其中,主要逻辑是在rfs_fmat中实现的: A、create_superblk->rfssublk_t_init->rfsdir_t_init,创建超级块。其中初始化超级块时可以看到: 超级块在第0个逻辑块,位图在第1个逻辑块,根目录为空 B、create_bitmap 标记前3个逻辑块为已占用,后续逻辑块为可用 C、create_rootdir 一方面在超级块中标明,根目录在第2块 另一方面,对根目录进行初始化,写入 fimgrhd_t文件管理头,后续有文件就要在这个文件管理头后面依次增加rfsdir_t结构 三、逻辑块使用 1、申请逻辑块 A、读取超级块,从而定位到位图块 B、读取位图块 C、位图中找到第一个可用逻辑块,并设置为使用,并返回该字节对应的逻辑块号 2、归还逻辑块 A、读取超级块,从而定位到位图块 B、读取位图块 C、位图中找到对应的逻辑块,并设置为空闲
作者回复: 是的
2021-08-075 - 青玉白露当然不行,从代码上可以看出来,这三者是相互依赖的,位图需要超级块,建立根目录需要位图来获取空闲的地址,差了哪一步都不行!
作者回复: 哈哈 正确
2021-08-013 - 许少年请问老师,如果我想为apfs编写windows驱动,目前掌握了windows内核驱动开发。 我认为文件系统就是操作物理设备空间上的数据与元数据,那么接下来该如何做呢? apfs这块不是很懂。同样的问题,让windows支持ext3。
作者回复: 你写NT文件系统过滤型驱动就行了
2021-09-231 - pedro不能,位图初始化需要操作超级块,根目录初始化需要操作超级块和位图
作者回复: 铁子6666666
2021-07-231 - 艾恩凝32 33 一直带着问题去学习,我想答案会在34节出现,打卡
作者回复: 找到答案了吗
2022-05-11 - ifelse不能,有先后顺序
作者回复: 是的
2022-02-22
收起评论