Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1254200
  • 博文数量: 404
  • 博客积分: 10011
  • 博客等级: 上将
  • 技术积分: 5382
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-03 16:29
文章存档

2010年(40)

2009年(140)

2008年(224)

我的朋友

分类: LINUX

2009-07-07 09:42:09

Linux 采用 VFS 来管理文件系统,VFS 的全称是 Virtual File System(虚拟文件系统)。
VFS 是异构文件系统之上的软件粘合层(也称为可堆叠的文件系统(Stackable Filesystem),
因为 VFS 可以无缝地使用多个不同类型的文件系统,就像把多个文件系统堆叠在一起一样。
通过 VFS,可以为访问文件系统的系统调用提供统一的抽象接口。
VFS 最早是由 Sun 公司提出来用以实现 NFS(Network FileSystem 网络文件系统)的。
现在很多类 UNIX 系统都采用了 VFS(包括 Linux、FreeBSD、Solaris 等)。
如图 6-1 所示,VFS 的作用就是采用标准的 UNIX 系统调用读写位于不同物理介质上的
不同文件系统。VFS 让 open()、read()、write()等系统调用不用关心底层的存储介质和文件系
统类型就可以工作。在 古老的 DOS 操作系统中,要 访问本地文件系统之外的文件系统需要使
用特殊的工具才能进行。而在 Linux 下,通过 VFS,就可以抽象的访问接口而屏蔽了底层文
件系统和物理介质之间的差异性。

图 6-1 VFS 虚拟文件系统
每一种类型的文件系统代码都隐藏了实现的细节。因此,对于 VFS 层和内核的其他部分
而言,每一种类型的文件系统看起来都是一样的。
传统的 UNIX 系统采用 Inode 来保存与文件相关的信息,比如访问权限、文件大小和创
建时间等,这些信息被称为文件的元数据(metadata)。inode 这个数据结构和文件本身是分
开存放的。在 Linux 中,VFS 采用的是面向对象的编程方法,尽管 Linux 内核代码采用的是
不具有直接面向对象功能的 C 语言编写的。但是 VFS 子系统把 VFS 对象的属性和相应的操
作函数(即面向对象概念中的方法)都封装到了结构体中,因此可以说是真正意义上的对象。
VFS 中的 4 个主要对象类型如表 6-1 所示。

章表 6-1VFS 主要对象
对 象 说 明
superblock 对象 表示一个具体的可封装的文件系统
inode 对象 表示一个具体的文件
dentry 对象 表示一个目录条目,或路径中的一个分量
file 对象 表示一个与进程相关联的已打开的文件

Linux 操作系统支持的文件系统包括 ext2、ext3ReiserFSIBM JFSxfs、FAT-12FAT-16、
FAT-32、VFAT、NTFS (read-only)、CD-ROM (ISO 9660)、UMSDOS (UNIX-like FS on MS-DOS)、
NFS (Network File System)、SMBFS (Windows share)、NCPFS (Novell Netware share)、/proc (for
kernel and process information)。
应用层开发不需要关心 VFS 源代码的具体实现,只需使用它为各类文件系统提供的统一
接口函数即可,关于 VFS 源代码,读者可以查看 Linux 内核关于文件系统的相关内容。

阅读(1144) | 评论(0) | 转发(0) |
0

上一篇:VFS简介

下一篇:linux虚拟文件系统

给主人留下些什么吧!~~