Linux VFS(虚拟文件系统)深入理解
虚拟文件系统作为内核子系统,为用户程序提供了文件和文件系统的抽象接口。
文件系统抽象层
VFS使得用户可以实用read()、write()、open()等这种通用接口对所有类型的文件系统进行操作,这是因为内核在它的底层文件系统上建立了一个抽象层---VFS将各种不同的文件系统抽象后采用统一的方式操作。
VFS抽象层之所以能够衔接各种类型的文件系统,是因为它定义了所有文件系统都支持的基本的、概念上的接口和数据结构。同时,实际的文件系统也将自身的如 “如何打开文件”,”目录是什么“等概念在形式上与VFS的定义保持一致。
那么究竟什么是VFS呢?
在本文中,我以一个 用户查找XXXX学校中某个学生的成绩为例。这个查找动作可以看做一个进程。而这个XXXX学校即可以看做一个VFS。
在学校中,学校中的班级、专业以及辅导员、学生都可以看做Linux VFS中的文件,因为在Linux 文件系统中将目录也看做文件,所以在此同样类比。
而对于在校的学生以及班级而言,学校一般都会赋予给其一个唯一的编号,因此这个唯一的编号即可看做Linux 文件系统的 索引节点对象,其代表一个具体的文件,在学校中,这即代表一个具体的班级或者学生。
而对于查找某个学生的成绩这一进程而言,当然用户需要知道一个路径如何到达某个具体的学生。因此,用户可能得到一个 学院/专业/班级/学生 这个路径,对于这个路径的每一步学院、专业、班级、学生则代表VFS中的目录项对象,代表着一个目录项,是查找到目标文件的路径的一个组成部分。
而在本文中,可以将学校中的学院看做VFS的超级块对象,其代表一个具体的已安装的文件系统。即在学校中,某个学院是已经存在的。该学院持有对本学院中特定的信息。
而对于这个查找进程所看见的学生均可看成学生对象也即VFS中的文件对象。
-