虚拟文件系统VFS

来源:互联网 发布:淘宝客服处理技巧 编辑:程序博客网 时间:2024/06/06 14:07

一.虚拟文件系统VFS的作用

为了使Linux支持不同的文件系统,如ext2,ext3,NTFS,FAT等等,Linux引入了虚拟文件系统。它为用户提供了统一的接口,而不必关心具体的文件系统的细节,这些接口就是文件系统的系统调用,如read(),write(),等。VFS在系统中的位置如下图所示:

当用户程序在用户态调用write这样的系统调用时,而此时程序将陷入到内核态去,并引起write对应的内核调用sys_write,sys_write又会去调用vfs_write()。这个函数才会去调用具体的文件系统的文件操作

二.VFS中的对象

所谓“虚拟”的文件系统是指该文件系统并不存在于磁盘中,只存在于内存中。这样一个虚拟文件系统是如何形成的呢?linux并不是一下子把所有的文件系统挂载到系统中,而是在需要的时候才进行挂载。另外,VFS只管理挂载到系统上的文件系统。

linux文件系统中有4个对象:文件,目录项,索引结点和超级块。

其中目录项是指一个文件路径中的一部分,例如对于路径/home/zyl/myfile,home,zyl,myfile都是目录项。而目录也就是一个文件夹,Linux将它看作一种特殊的文件,与对文件的处理相同。下面单个介绍这几个对象。

1.超级块

超级块用于描述整个文件系统的信息。对于每个具体的文件系统,都有各自的超级块存在于磁盘中。当对一个文件系统进行初始化和注册时在内存中为其分配一个VFS超级块,VFS超级块只存在于内存中。

VFS超级块用super_block描述。

struct super_block {        struct list_head        s_list;         /* Keep this first */        dev_t                   s_dev;          /* search index; _not_ kdev_t */        unsigned long           s_blocksize;        unsigned char           s_blocksize_bits;        unsigned char           s_dirt;        loff_t                  s_maxbytes;     /* Max file size */        struct file_system_type *s_type;        const struct super_operations   *s_op;        void * s_fs_info; .......};
各个super_block通过s_list链接到一个以super_blocks开头的链表中去,如下图:




<============================未完==========================>