- 作者: 陈孝松
- 主页: chenxiaosong.com
- 哔哩哔哩教学视频: 陈孝松
- 课程: chenxiaosong.com/courses
- 博客: chenxiaosong.com/blog
- 贡献: chenxiaosong.com/contributions
- 邮箱: chenxiaosong@chenxiaosong.com
- QQ交流群: 544216206, 点击查看群介绍
一般的Linux书籍都是先讲解进程和内存相关的知识,但我想先讲解文件系统。
第一,因为我就是做文件系统的,更擅长这一块,其他模块的内容我还要再去好好看看书,毕竟不能误人子弟嘛;第二,是
因为文件系统模块更接近于用户态,是相对比较好理解的内容(当然想深入还是要下大功夫的),由文件系统入手比较适合初学者。
英文全称Extended file system,翻译为扩展文件系统。Linux内核最开始用的是minix文件系统,直到1992年4月,Rémy Card开发了ext文件系统,采用Unix文件系统(UFS)的元数据结构,在linux内核0.96c版中引入。设计上参考了BSD的快速文件系统(Fast File System,简称FFS)。1993年1月0.99版本中ext2合入内核, 2001年11月2.4.15版本中ext3合入内核,2006年10月10日2.6.19版本中ext4合入内核。
相关文档网站:
以ext2为例,说明开发一个新文件系统所需的步骤,也可以作为学习一个文件系统的方法步骤。
- 定义超级块结构。
- 磁盘超级块结构
struct ext2_super_block
,在struct file_system_type ext2_fs_type
的.mount
实现ext2_mount()
里调用到的ext2_fill_super()
中找。 - 内存超级块结构
struct ext2_sb_info
,赋值给struct super_block
的s_fs_info
成员。
- 实现超级块操作方法
ext2_sops
。 - 定义索引节点结构。
- 磁盘索引节点结构
struct ext2_inode
,在超级块操作方法ext2_sops
的.write_inode
实现函数中找。 - 内存索引节点结构
struct ext2_inode_info
,内嵌struct inode
,在超级块操作方法ext2_sops
的很多函数都可以找到。
- 实现各种类型文件的索引节点操作方法:
- 常规文件
ext2_file_inode_operations
。 - 目录
ext2_dir_inode_operations
。 - 快速符号链接(路径名小于60字节)
ext2_fast_symlink_inode_operations
。 - 普通符号链接(路径名大于60字节)
ext2_symlink_inode_operations
。 - 其他
ext2_special_inode_operations
。
- 实现
dentry
操作方法,ext和xfs等文件系统都没定义,nfs为nfs_dentry_operations
和nfs4_dentry_operations
,smb client为cifs_dentry_ops
和cifs_ci_dentry_ops
。 - 实现各种类型文件的
file
操作方法:
- 常规文件
ext2_file_operations
。 - 目录
ext2_dir_operations
。 - 其他类型查看
init_special_inode()
函数。
- 实现各种类型文件的
address_space
操作方法:
- 常规文件
ext2_aops
和ext2_dax_aops
。 - 目录,ext2没定义目录相关的操作,nfs为
nfs_dir_aops
。 - 其他类型,如块设备
def_blk_aops
。
- 定义文件系统类型
ext2_fs_type
。 - 模块加载卸载方法,
init_ext2_fs
和exit_ext2_fs
。