最简文件系统simplefs之理论学习

格式化

       文件mkfs-simplefs.c,首先在一个模拟设备文件中确定super_block、inode、direntry、data_block的位置和大小,main函数就是初始化上面的结构体数据并写入对应的位置,后面的挂载和读写都必须按照这个规则进行。

挂载

       文件simple.c,函数simplefs_mount中最后会调用simplefs_fill_super,首先根据super_block的block号读取超级块信息。这里我根据看ext4文件系统的理解,这里分为磁盘文件结构体,对应磁盘上数据,也就是simplefs_super_block;VFS中的结构体,就是super_block,还有在内存中的结构体,simplefs中没有。

       sb_bread函数根据super_block的block号读取信息初始化VFS的super_block;申请一个新的VFS inode(应该先去查询是否已经存在)作为root_inode,也需要与磁盘设备inode建立联系,最后设置root_inode到super_block就能拿到文件系统下面所有的direntry信息建立目录树。这样的话文件系统的基本元素就在内存中建立起来,后面就可以进行读写操作。

创建文件

       申请一个新的inode和sfs_inode并初始化,查询并获取空闲的inode号和block号,写sfs_inode到设备文件的第1个block中,写direntry到设备文件的第2个block中,更新父目录inode信息,最后更新super_block,最后把inode和direntry添加到树中建立联系。

读写

       读写文件,首先得打开文件,在lookup函数中通过文件名搜索设备文件的第2个block中的direntry,获取inode号,通过inode号把设备文件的第1个block中的sys_inode获取出来,申请一个内存中的inode进行初始化并与sys_inode建立联系,最重要的是获取到inode中的data_block_number,这样的话就知道去哪个block读写数据了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值