虚拟文件系统VFS

一.虚拟文件系统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开头的链表中去,如下图:




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



















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值