及 中文件系统的组织
关于 ,我以前从未听说过,所以拿到题目之后免不了要花些时间查了很多的资料。
什么是 ?
称“虚拟文件系统” ,是 文件系统的一个重要的组成部分。
它不是一个真正的文件系统,实际上它是一种软件机制,也许称它为 的文件系统管理者
更确切点。
的主要内容
超级块(
对具体文件系统的超级块是文件系统中最重要的数据结构,它用来描述整个文件系统信息(组
织结构和管理信息)。不涉及文件系统的内容 。 超级块是各种具体文件系统在安装时建立
的,并在这些文件系统卸载时自动删除。 超级块实际上应该说成是某个具体文件系统的
超级块。超级块对象由 结构组成。
索引节点对象,即 节点
文件系统处理文件所需的信息。索引节点对文件是唯一的。具体文件系统的索引节点存储在磁
盘上,使用的时候,必须调入内存,填写 的索引节点。所以 的索引节点是动态节点。
目录项(
每个文件除了有一个索引节点结构外,还有目录项 结构。 结构代表的是逻辑意
义上的文件,在磁盘上没有对应的映象。而 结构代表的是物理意义上的文件,对于一个
具体的文件系统,在磁盘上有对应的映象。
一个 结构必有一个 结构,而一个 可能对应多个 结构。
由于从磁盘读入一个文件并构造相应的目录项需要花费大量的时间,而在完成对目录项的操作
后,可能后面还会用到,所以在内存中要保留它。
有什么好处?
既然写这个,自然要关注一下 的特别之处,那么 到底都有些什么特别的功能呢?
支持 多种杂七杂八的文件系统
用惯了 ! 的人都知道在格式化文件系统的时候只有少数几种种选择:"# 和 # 等
等。但是 却可以支持诸如 $#%,&,"#,"#,,#'等等 () 多个不
同的文件系统。正是 ,为 实现了这一强大功能。
概括来说,实现这种支持是通过文件系统的“注册”来完成的。经由注册的文件系统, 会给
系统内核提供一个调用该文件系统函数的接口。
值得注意的是, 并非通过设备标识访问某个文件系统(像 ! 那样),而是捆绑于一个
树状目录上,因此, 一个文件系统不仅包含了文件及数据,还包含了文件系统本身的树
形结构,目录,访问权限等等。这里边的实现其实是很复杂的,鉴于作者的水准,本文将这些
过于复杂的东西略去,只讨论一些易于理解的东西。(读者如果有意了解,请搜关键字“ 目
录树” )
下面简单说说这种功能的实现。
在 源代码中,每种实际的文件系统用以下的数据结构表示:
*+
,-.////////////////////00文件系统名称
123.////////////////////////////00标示位
-- -4 5 -4 ./ / / /
00 是文件所涉及的文件操作针对内存中的数据对象的指针
00超级块指针