实现文件系统
文件系统主要负责管理磁盘上的空间,磁盘上至少要包含三部分数据: superblock,inodes和数据块。
-
首先得有一个创建文件系统的工具(如ext2文件系统的mke2fs),用来将磁盘分区格式化成想要的格式,主要是初始化superblock和root inode。
-
写一个内核模块,在里面注册自己的文件系统,并且初始化mount函数
-
当用户在应用层调用mount命令时,VFS就会根据指定的文件系统类型找到我们写的内核模块,并且调用里面的mount函数
-
在mount函数里面读取磁盘上的superblock和root inode
-
初始化root inode的inode_operations和file_operations,然后返回给VFS
-
这样VFS就能根据root inode里提供的函数一级一级的往下找到path对应文件的inode
-
读取inode所指向的数据块(一个或者多个),根据文件的类型,解析数据块的内容。 如果文件类型是普通文件,那么数据块里面就是文件的内容; 如果文件类型是目录,那么数据块里面存储的就是目录下面所有子目录和文件的名称及它们对应的inode号;如果文件类型是软链接,那么数据块里面存储的就是链接到的文件路径。
总的来说,实现文件系统就是怎么在磁盘上组织文件,然后实现VFS所要求的superblock,inode以及inode_operations和file_operations。