打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VFS及LINUX中文件系统
什么是VFS?
VFS(Virtual File System )称“虚拟文件系统” ,是LINUX文件系统的一个重要的组成部分。它不是一个真正的文件系统,实际上它是一种软件机制,也许称它为 Linux 的文件系统管理者更确切点。

VFS的主要内容
超级块(super_block)
对具体文件系统的超级块是文件系统中最重要的数据结构,它用来描述整个文件系统信息(组织结构和管理信息)。不涉及文件系统的内容 。VFS超级块是各种具体文件系统在安装时建立的,并在这些文件系统卸载时自动删除。VFS超级块实际上应该说成是某个具体文件系统的VFS超级块。超级块对象由super_block结构组成。
索引节点对象(inode,即I节点)
文件系统处理文件所需的信息。索引节点对文件是唯一的。具体文件系统的索引节点存储在磁盘上,使用的时候,必须调入内存,填写VFS的索引节点。所以VFS的索引节点是动态节点。
目录项(dentry)
每个文件除了有一个索引节点结构外,还有目录项dentry结构。 dentry结构代表的是逻辑意义上的文件,在磁盘上没有对应的映象。而inode结构代表的是物理意义上的文件,对于一个具体的文件系统,在磁盘上有对应的映象。 
一个dentry结构必有一个inode结构,而一个inode可能对应多个dentry结构。 
由于从磁盘读入一个文件并构造相应的目录项需要花费大量的时间,而在完成对目录项的操作后,可能后面还会用到,所以在内存中要保留它。
VFS有什么好处?
既然写这个,自然要关注一下VFS的特别之处,那么VFS到底都有些什么特别的功能呢?
支持N多种杂七杂八的文件系统
用惯了WINDOWS的人都知道在格式化文件系统的时候只有少数几种种选择:FAT和NTFS等等。但是LINUX却可以支持诸如EXT2,Minix,FAT,VFAT,NFS,NTFS…等等10多个不同的文件系统。正是VFS,为LINUX实现了这一强大功能。
概括来说,实现这种支持是通过文件系统的“注册”来完成的。经由注册的文件系统,VFS会给系统内核提供一个调用该文件系统函数的接口。
值得注意的是,Linux并非通过设备标识访问某个文件系统(像DOS那样),而是捆绑于一个树状目录上,因此,mount一个文件系统不仅包含了文件及数据,还包含了文件系统本身的树形结构,目录,访问权限等等。这里边的实现其实是很复杂的,鉴于作者的水准,本文将这些过于复杂的东西略去,只讨论一些易于理解的东西。(读者如果有意了解,请搜关键字“VFS目录树” )
下面简单说说这种功能的实现。
在 Linux 源代码中,每种实际的文件系统用以下的数据结构表示:
  struct file_system_type {
  const char *name;                                        //文件系统名称
  int fs_flags;                                                        //标示位 
  struct super_block *(*read_super) (struct super_block *, void *, int);        //read_super是文件所涉及的文件操作针对内存中的数据对象的指针                                
//超级块指针
  struct module *owner;                                //实例所有者指针
  struct file_system_type * next;        //链表同级指针
  struct list_head fs_supers;                        
  };
每注册一个文件系统也就要在机器里初始化一个这样的数据结构,并形成一个链表,内核中用一个名为 file_systems 的全局变量来指向该链表的表头。
整个注册过程比较复杂,概括来说大概是如下几步:
1,        新建VFS目录树 init_mount_tree()
(这里边包含有若干步骤,此处不赘)
2,        通过sys_mkdir函数将文件系统作为结点添加到VFS目录树中

当用户调用一个文件时,他不需要因为文件属于不同的文件系统而按照不同的方式读取。VFS本身抽象了不同文件系统共同部分,对用户屏蔽了具体的操作,使得用户不用再去关心文件所属的文件系统的问题,实现了各个文件系统的良好兼容。当一个最新推出的文件系统普遍被采用时,LINUX借助VFS的强大功能,可以毫不费力的实现新文件系统在本地的组织运行,同时能不干扰其他已经装配在本地的其他文件系统,可以说以VFS组织文件系统是非常具有可扩展性,并具有优良的发展前景

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
从文件 I/O 看 Linux 的虚拟文件系统
对 proc 文件系统的分析(一)(转载)
linux内核之文件系统
Linux 文件系统(二)
解析 Linux 中的 VFS 文件系统机制
linux的VFS详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服