存储学徒的小作坊
Linux虚拟文件系统概述(1)
上一篇 /
下一篇 2007-05-21 20:19:31
/ 个人分类:学习笔记
查看( 260 ) /
评论( 3 )
Linux虚拟文件系统概述
原作者:Richard Gooch <rgooch@atnf.csiro.au>
最新更新时间:2005年十月28日
版权所有者:
Copyright (C) 1999 Richard Gooch
Copyright (C) 2005 Pekka Enberg
文件符合GPLv2发布许可
===================================================
翻译&更新:ietf AT doit.com.cn
部分内容由 ietf AT doit.com.cn 根据内核2.6.20更新。
引用请注明出处。
===================================================
一、简介:
虚拟文件系统(也叫虚拟文件系统交换层)是在内核实现的一个软件层,它既为用户空间程序提供文件系统接口的调用,也是保证系统内核各种文件系统实现能够共存的抽象层。
VFS系统调用如open(2), stat(2), read(2), write(2), chmod(2)等在进程上下文中被调用。文件系统锁在文档Documentation/filesystems/Locking中描述。
1、目录结构缓存(dcache)
VFS实现了open(2), stat(2), chmod(2)以及其它类似的系统调用。VFS利用传递给这些调用的文件路径参数在目录入口缓存(dcache 或者 目录机构缓存)中进行查找。通过一种快速的转换机制将文件路径转化为特定的目录入口。目录结构缓存只存在在RAM中而从不写入磁盘,他们只是为了提高性能而创建的。
目录结构缓存是整个文件空间的视图,但是绝大多数计算机并没有足够的空间将所有的目录结构同时放在RAM中,因此某些缓存将会丢弃。为了解决目录结构中的路径,VFS也许需要按照路径结构重新创建该缓存,并加载inode节点。这通过查找inode节点实现。
2、Inode节点对象
一个独立的目录结构通常会有一个指向一个inode的指针。Inodes是文件系统的对象,例如普通文件,目录,FIFO等。他们或者存在于磁盘上(快设备文件系统)或者内存中(伪文件系统)。被请求访问的inode从磁盘加载道内存,在修改后再写入磁盘。
一个独立的inode可以同时作为多个目录结构的指针目标(如硬链接时会出现这种情况)。
查找一个inode时,需要通过VFS对inode的父目录inode调用looup()方法。该方法在inode所属的具体文件系统中实现。一旦VFS请求了目录结构(同时inode),我们就可以通过open(2)打开文件,或者stat(2)查看inode数据。stat(2)操作很简单,一旦VFS获得了目录结构,它就察看inode数据,并将其中某些数据传给用户空间。
3、文件对象
打开一个文件还需要其它的操作:获取文件结构(内核实现的文件描述表)。最新分配的文件结构被初始化为一个指向目录结构的指针和一组文件操作函数集合。这些数据从inode获得。然后调用特定的文件系统实现的open()文件操作执行相关的任务。这是VFS交换功能的一个实现。文件结构被加入进程的文件表述表。
读、写和关闭文件(以及其它相关的VFS操作)通过用户空间的文件描述表获取对应的文件结构,然后调用请求的文件结构来实现需要得功能。一旦文件被打开,目录结构将保持在使用状态,表示VFS inode处于被访问状态。
论坛模式
推荐
收藏
分享给好友
管理
TAG:
Linux
linux
vfs
虚拟文件系统
-
yyying
发布于2007-05-23 23:06:55
-
很不错的!
-
rechardluo
发布于2007-06-13 22:23:30
-
回复 #1 ietf 的帖子
不错,还可以看看sun里面的实现,毕竟它是VFS的鼻祖
除此之外,Steve Pate的Unix Filesystem有更为详细的比较
-
ietf
发布于2007-06-26 21:48:52
-
回复 #3 rechardluo 的帖子
谢谢,找找看opensolaris有没有把这个源码公开