频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

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

作者: FOXL 出处:51CTO整理 2008-03-14 16:23    砖    好    评论   进入论坛
阅读提示:本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统,例如 ext2,jffs 等。

7. 安装根文件系统

有了前面章节 5 的基础,理解 Linux 下根文件系统的安装并不困难,因为不管怎么样,安装一个文件系统到 VFS 中某一安装点的过程原理毕竟都是一样的。

这个过程大致是:首先要确定待安装的 ext2 文件系统的来源,其次是确定 ext2 文件系统在 VFS中的安装点,然后便是具体的安装过程。

关于第一问题,Linux 2.4.20 的内核另有一大堆的代码去解决,限于篇幅,笔者不想在这里去具体说明这个过程,大概记住它是要解决到哪里去找要安装的文件系统的就可以了,这里我们不妨就认为要安装的根文件系统就来自于主硬盘的第一分区 hda1.

关于第二个问题,Linux 2.4.20 的内核把来自于 hda1 上 ext2 文件系统安装到了 VFS 目录树中的"/root" 目录上。其实,把 ext2 文件系统安装到 VFS 目录树下的哪个安装点并不重要(VFS 的根目录除外),只要是这个安装点在 VFS 树中是存在的,并且内核对它没有另外的用途。如果读者喜欢,尽可以自己在 VFS 中创建一个 "/Windows" 目录,然后将 ext2 文件系统安装上去作为将来用户进程的根目录,没有什么不可以的。问题的关键是要将进程的根目录和当前工作目录设定好,因为毕竟只用用户进程才去关心现实的文件系统,要知道笔者的这篇稿子可是要存到硬盘上去的。

在 Linux 下,设定一个进程的当前工作目录是通过系统调用 sys_chdir() 进行的。初始化期间,Linux 在将 hda1 上的 ext2 文件系统安装到了 "/root" 上后,通过调用 sys_chdir("/root") 将当前进程,也就是 init_task 进程的当前工作目录(pwd)设定为 ext2 文件系统的根目录。记住此时 init_task进程的根目录仍然是图 3 中的 dentry,也就是 VFS 树的根目录,这显然是不行的,因为以后 Linux 世界中的所有进程都由这个 init_task 进程派生出来,无一例外地要继承该进程的根目录,如果是这样,意味着用户进程从根目录搜索某一目录时,实际上是从 VFS 的根目录开始的,而事实上却是从 ext2 的根文件开始搜索的。这个矛盾的解决是靠了在调用完 mount_root() 函数后,系统调用的下面两个函数:

sys_mount(".", "/", NULL, MS_MOVE, NULL);
sys_chroot("."); 

其主要作用便是将 init_task 进程的根目录转化成安装上去的 ext2 文件系统的根目录。有兴趣的读者可以自行去研究这一过程。

所以在用户空间下,更多地情况是只能见到 VFS 这棵大树的一叶,而且还是被安装过文件系统了的,实际上对用户空间来说还是不可见。我想,VFS 更多地被内核用来实现自己的功能,并以系统调用的方式提供过用户进程使用,至于在其上实现的不同文件系统的安装,也只是其中的一个功能罢了。

8. 结束语

文件系统在整个 Linux 的内核中具有举足轻重的地位,代码量也很复杂繁琐。但是因为其重要的地位,要想对 Linux 的内核有比较深入的理解,必须要能越过文件系统这一关。当然阅读其源代码便是其中最好的方法,本文试图给那些已经尝试着去阅读,但是目前尚有困惑的读者画一张 VFS 文件系统的草图,希望能对读者有些许启发。但是想在如此有限的篇幅里去阐述清楚 Linux 中整个文件系统的来龙去脉,是根本不现实的。而且本文也只是侧重于剖析 VFS 的机制,对于象具体的文件读写,为提高效率而引入的各种 buffer,hash 等内容以及文件系统的安全性方面,都没有提到。毕竟,本文只想帮助读者理清一个大体的脉络,最终的理解与领悟,还得靠读者自己去潜心研究源代码。最后,对本文相关的任何问题或建议,都欢迎用 email 和笔者联系。

【责任编辑:刘兵 TEL:(010)68476606】


共5页: 上一页 [1] [2] [3] [4] 5
【内容导航】
 第 1 页:VFS 目录树结构  第 2 页:VFS 目录树的建立
 第 3 页:VFS 下目录的建立  第 4 页:VFS 树中挂载文件系统
 第 5 页:安装根文件系统
专题
Linux——从菜鸟到高手
AMD Phenom三核处理器解析
解析Ajax开发框架 走进Ajax开发应用
Linux/Solaris服务器的安全配置
IBM System i5全内置服务器解析
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Windows XP远程桌面连接图解(.. (查看46173次)
·Solaris基础知识入门 (查看37519次)
·Windows操作系统安装 (查看28684次)
·Linux的安装 (查看25992次)
·设置远程桌面连接 (查看25085次)
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。