newasp home
用户管理  |  用户注册
首 页 ┆ 文章中心 ┆ 下载中心 ┆ 图片中心 ┆ 博客中心 ┆ 社区论坛 ┆ 客户留言
  • 站点首页
  • 电脑网络技术
  • 图形图像技术
  • 网络应用
  • 多媒体技术
  • 电脑入门初步
  • 网络推广技术
  • 数据库设计
  • Linux技术
  • 网络动态
用户名: 密码:
当前位置:PC我爱社区 → 文章中心 → Linux技术 → 文章内容

解析 Linux 中的 VFS 文件系统机制

减小字体 增大字体 作者:网络  来源:转载  发布时间:2008-7-28 16:00:42

本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统,例如 ext2,jffs 等。本文侧重于通过具体的代码分析来解释 Linux 内核中 VFS 的内在机制,在这过程中会涉及到上层文件系统调用和下层实际文件系统的如何挂载。文章试图从一个比较高的角度来解释 Linux 下的 VFS 文件系统机制。
◆1. 摘要

本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统,例如 ext2,jffs 等。本文侧重于通过具体的代码分析来解释 Linux 内核中 VFS 的内在机制,在这过程中会涉及到上层文件系统调用和下层实际文件系统的如何挂载。文章试图从一个比较高的角度来解释 Linux 下的 VFS 文件系统机制,所以在叙述中更侧重于整个模块的主脉络,而不拘泥于细节,同时配有若干张插图,以帮助读者理解。

相对来说,VFS 部分的代码比较繁琐复杂,希望读者在阅读完本文之后,能对 Linux 下的 VFS 整体运作机制有个清楚的理解。建议读者在阅读本文前,先尝试着自己阅读一下文件系统的源代码,以便建立起 Linux 下文件系统最基本的概念,比如至少应熟悉 super block, dentry, inode,vfsmount 等数据结构所表示的意义,这样再来阅读本文以便加深理解。

◆2. VFS 概述

VFS 是一种软件机制,也许称它为 Linux 的文件系统管理者更确切点,与它相关的数据结构只存在于物理内存当中。所以在每次系统初始化期间,Linux 都首先要在内存当中构造一棵 VFS 的目录树(在 Linux 的源代码里称之为 namespace),实际上便是在内存中建立相应的数据结构。VFS 目录树在 Linux 的文件系统模块中是个很重要的概念,希望读者不要将其与实际文件系统目录树混淆,在笔者看来,VFS 中的各目录其主要用途是用来提供实际文件系统的挂载点,当然在 VFS 中也会涉及到文件级的操作,本文不阐述这种情况。下文提到目录树或目录,如果不特别说明,均指 VFS 的目录树或目录。图 1 是一种可能的目录树在内存中的影像:


图 1:VFS 目录树结构


 
◆3. 文件系统的注册

这里的文件系统是指可能会被挂载到目录树中的各个实际文件系统,所谓实际文件系统,即是指VFS 中的实际操作最终要通过它们来完成而已,并不意味着它们一定要存在于某种特定的存储设备上。比如在笔者的 Linux 机器下就注册有 "rootfs"、"proc"、"ext2"、"sockfs" 等十几种文件系统。

3.1 数据结构

在 Linux 源代码中,每种实际的文件系统用以下的数据结构表示:

struct file_system_type {
const char *name;
int fs_flags;
struct super_block *(*read_super) (struct super_block *, void *, int);
struct module *owner;
struct file_system_type * next;
struct list_head fs_supers;
};
 


注册过程实际上将表示各实际文件系统的 struct file_system_type 数据结构的实例化,然后形成一个链表,内核中用一个名为 file_systems 的全局变量来指向该链表的表头。

3.2 注册 rootfs 文件系统

在众多的实际文件系统中,之所以单独介绍 rootfs 文件系统的注册过程,实在是因为该文件系统 VFS 的关系太过密切,如果说 ext2/ext3 是 Linux 的本土文件系统,那么 rootfs 文件系统则是 VFS 存在的基础。一般文件系统的注册都是通过 module_init 宏以及 do_initcalls() 函数来完成(读者可通过阅读module_init 宏的声明及 arch\i386\vmlinux.lds 文件来理解这一过程),但是 rootfs 的注册却是通过 init_rootfs() 这一初始化函数来完成,这意味着 rootfs 的注册过程是 Linux 内核初始化阶段不可分割的一部分。

init_rootfs() 通过调用 register_filesystem(&rootfs_fs_type) 函数来完成 rootfs 文件系统注册的,其中rootfs_fs_type 定义如下:

 struct file_system_type rootfs_fs_type = { \
name:"rootfs", \
read_super:ramfs_read_super, \
fs_flags:FS_NOMOUNT|FS_LITTER, \
owner:THIS_MODULE, \
 }
 

 


注册之后的 file_systems 链表结构如下图2所示:

图 2: file_systems 链表结构

[1] [2] [3] [4] [5]  下一页

[] [返回上一页] [打 印]
  • ·上一篇文章:学习园地:Linux ext2/ext3文件系统详解
  • ·下一篇文章:NetWare开始基于Linux操作系统虚拟运行

文章评论评论内容只代表网友观点,与本站立场无关!

用户名: ! 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容: !

         (注“!”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

频道栏目导航

  • 电脑网络技术
  • 图形图像技术
  • 网络应用
  • 多媒体技术
  • 电脑入门初步
  • 网络推广技术
  • 数据库设计
  • Linux技术
  • 网络动态
  • 更多分类

本类热门阅览

  • · 如何在linux网卡上添加多个IP
  • · linux下vi编辑器命令大全
  • · 初探Red Hat企业级linux4.0的安全性...
  • · Linux服务器日志管理详解
  • · 如何在Linux系统环境中模拟DOS命令...
  • · Linux如何在系统运行过程中修改内核...
  • · 使Linux系统上的程序开机后自动运行...
  • · Linux系统开防火墙时自动开启相对应...
  • · Linux文件权限的设置方法
  • · Linux与Windows CVS服务器配置与使...
  • · 解析 Linux 中的 VFS 文件系统机制...
  • · 学习笔记:Linux下chkconfig、moun...

相关文章

  • ·[组图]解析 Linux 中的 VFS 文件系统机制
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 管理登陆
网站备案号:沪ICP备06047794号
本站的各类网络聊天工具,系统工具,媒体工具,绿色软件如有侵犯你的版权,请指出,本站将立即改正。
建议您使用1024*768分辨率浏览下载本站的免费软件(绿色软件)资源
软件站版权所有:PC我爱社区 站长:子昀 点击这里和我联系