免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5342 | 回复: 5
打印 上一主题 下一主题

从VFS认识linux文件系统 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-15 10:15 |只看该作者 |倒序浏览
VFS及LINUX中文件系统的组织
关于VFS,我以前从未听说过,所以拿到题目之后免不了要花些时间查了很多的资料。
什么是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组织文件系统是非常具有可扩展性,并具有优良的发展前景。




还有副图,太大,一会修改下再上传

评分

参与人数 1可用积分 +6 收起 理由
albcamus + 6 精品文章

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2007-01-16 07:56 |只看该作者
估计是标题不够引诱人,自己也感觉这个帖很好啊,多谢斑竹

论坛徽章:
0
3 [报告]
发表于 2007-01-16 09:45 |只看该作者
是很好的帖子,不过应该转到内核代码研究的版去。

论坛徽章:
0
4 [报告]
发表于 2007-01-16 09:54 |只看该作者
这个对mount等指令的领悟有帮助吧?

论坛徽章:
0
5 [报告]
发表于 2007-01-16 10:59 |只看该作者
图呢?
建议bz下次等文章发完了再加精,呵呵
Ahill 该用户已被删除
6 [报告]
发表于 2007-01-16 22:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP