vfs(virtual filesystem switch)

vfs(virtual filesystem switch)

ID:6033958

大小:143.75 KB

页数:16页

时间:2017-12-31

vfs(virtual filesystem switch)_第1页
vfs(virtual filesystem switch)_第2页
vfs(virtual filesystem switch)_第3页
vfs(virtual filesystem switch)_第4页
vfs(virtual filesystem switch)_第5页
资源描述:

《vfs(virtual filesystem switch)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

2、模块的主脉络,而不拘泥于细节,同时配有若干张插图,以帮助读者理解。相对来说,VFS部分的代码比较繁琐复杂,希望读者在阅读完本文之后,能对Linux下的VFS整体运作机制有个清楚的理解。建议读者在阅读本文前,先尝试着自己阅读一下文件系统的源代码,以便建立起Linux下文件系统最基本的概念,比如至少应熟悉superblock,dentry,inode,vfsmount等数据结构所表示的意义,这样再来阅读本文以便加深理解。回页首2.VFS概述VFS是一种软件机制,也许称它为Linux的文件系统管理者更确切点,与它相关的数据

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

4、图1:VFS目录树结构回页首3.文件系统的注册这里的文件系统是指可能会被挂载到目录树中的各个实际文件系统,所谓实际文件系统,即是指VFS中的实际操作最终要通过它们来完成而已,并不意味着它们一定要存在于某种特定的存储设备上。比如在笔者的Linux机器下就注册有"rootfs"、"proc"、"ext2"、"sockfs"等十几种文件系统。3.1数据结构在Linux源代码中,每种实际的文件系统用以下的数据结构表示:structfile_system_type{constchar*name;intfs_flags;stru

5、ctsuper_block*(*read_super)(structsuper_block*,void*,int);structmodule*owner;structfile_system_type*next;structlist_headfs_supers;};注册过程实际上将表示各实际文件系统的structfile_system_type数据结构的实例化,然后形成一个链表,内核中用一个名为file_systems的全局变量来指向该链表的表头。3.2注册rootfs文件系统在众多的实际文件系统中,之所以单独介绍ro

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

7、。init_rootfs()通过调用register_filesystem(&rootfs_fs_type)函数来完成rootfs文件系统注册的,其中rootfs_fs_type定义如下:structfile_system_typerootfs_fs_type={ame:"rootfs",read_super:ramfs_read_super,fs_flags:FS_NOMOUNT

8、FS_LITTER,owner:THIS_MODULE,}注册之后的file_systems链表结构如下图2所示:图2:fi

9、le_systems链表结构回页首4.VFS目录树的建立既然是树,所以根是其赖以存在的基础,本节阐述Linux在初始化阶段是如何建立根结点的,即"/"目录。这其中会包括挂载rootfs文件系统到根目录"/"的具体过程。构造根目录的代码是在init_mount_tree()函数(fsamespace.c)中。首先,init_mount_tre

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。