一、虚拟文件系统介绍
对于一个操作系统来说,进程管理和文件系统是非常重要的两部分。“文件系统”是一种特定的文件格式。除Linux本身的文件系统Ext2外,如何使Linux支持其它各
种不同文件系统呢?那么就要将对各种文件系统的操作和管理纳入到一个统一的框架中。让内核中的文件系统界面成为一条文件系统“总线”,使得用户程序可以通
过同一个文件系统操作界面(即同一组系统调用,对各种不同的文件系统(以及文件)进行操作。这样就可以对用户程序隐去各种不同文件系统的实现细节,为用户程
序提供一个统一的、抽象的、虚拟的文件系统界面),这就是所谓的“虚拟文件系统”(VFS: Virtual Filesystem System)。这个抽象的界面主要是由一组标准的、抽象的文件操作构成,以系统调用的形式提供于用户程序,如read()、write()、lseek()等。这样用户程序就可以把所有的文件都看成一致的、抽象的VFS,通过这些系统调用对文件进行操作而无需关心具体的文件属于什么文件系统以及具体文件系统的设计和实现。
二、file 和 inode 结构体
file和inode是vfs中两个重要的结构体。
file结构体代表一个打开的文件(设备对应于设备文件) ,系统中每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核和驱动源代码中,struct file 的指针通常被命名为 file 或 filp(即 file pointer)。
VFS inode 包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。它是 Linux 管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁,