2021SC@SDUSC
Linux发展多年,形成了庞大且复杂的体系结构,源码中不同的文件目录实现了不同的功能,文件系统的实现就位于fs文件夹内。它对各种文件系统都进行了适配,阅读源码可以了解Linux如何实现文件系统的管理。
那么关于源码阅读,我的想法是第一步先从早期的文件系统开始学习,例如ext2(second extended filesystem),是Linux内核早期所用的文件系统。相比Linux现在常用的ext4,ext2的结构相对简单且功能更少,源码阅读更简单,并且能降低ext4的难度。即顺着ext2的发展逐步推进。
文件系统
指某种具体的文件格式。文件系统类型有很多例如FAT、NTFS、NFS、ext2、ext3、ext4等等,目前Linux上常用的是ext4,Windows常用的是NTFS。
物理介质例如磁盘,在存入文件之前要进行分区,对各分区格式化可以创建不同的文件系统,使其可以被操作系统使用,文件系统会将整个分区划分成若干个块组,并按以下管理该分区:
Linux文件系统中一个文件由dentry、inode、data block组成,dentry包括文件名和inode节点,inode存放了文件基本信息和并指向data block的存储地址,data block是文件的存储地址。
虚拟文件系统(VFS)
文件系统类型有很多,他们都有各自的API接口,因此用户想要直接访问一个文件就需要对其文件系统类型做出相应的调整,VFS的作用是将不同的文件系统抽象化,并为用户提供一组标准的文件操作,使其不必关注文件系统的具体细节。