最简文件系统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读写数据了。

 

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/89631905