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

本文阐述 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 的目录树或目录。图

3. 文件系统的注册

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

3.1 数据结构

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

解析linux中的vfs文件系统机制,解析Linux中的VFS文件系统机制相关推荐

  1. linux中initrd的含义,Linux2.6 内核的 Initrd 机制解析

    1.什么是 Initrdinitrd 的英文含义是 boot loaderinitialized RAM disk,就是由 boot loader 初始化的内存盘.在 linux内核启动前, boot ...

  2. Linux fsck 机制解析

    Linux fsck 机制 0. 概述 1. Upstart 方式 (ubuntu 14.04 32bit) 1.1 配置fsck启动 1.2 配置fsck运行参数 1.3 mountall.conf ...

  3. 超专业解析!10分钟带你搞懂Linux中直接I/O原理

    导语 | 本文主要以一张图为基础,向大家介绍Linux在I/O上做了哪些事情,即Linux中直接I/O原理,希望本文的经验和思路能为读者提供一些帮助和思考. 引言 我们先看一张图: 这张图大体上描述了 ...

  4. Apache Hook机制解析(下)——实战:在自己的代码中使用Apache的钩子

    在前文<Apache Hook机制解析(上)--钩子机制的实现>和<Apache Hook机制解析(中)--细节讨论>的基础上,我们对Apache的钩子机制已经有了较多的了解, ...

  5. Apache Hook机制解析(中)——细节讨论

    本文在上文<Apache Hook机制解析(上)--钩子机制的实现>的基础上,对钩子机制的细节了补充分析. 1.    静态变量_hooks 这个变量由宏APR_HOOK_STRUCT所定 ...

  6. [Machine Check机制]X86服务器Linux系统对于MCE的Log解析

    X86服务器Linux系统对于MCE的Log解析 Linux Log信息主要包括两部份内容: APEI的GHES(Generic Hardware Error Soure,通用硬件错误源)解析部分,对 ...

  7. Linux系统SCSI磁盘扫描机制解析及命令实例

    介绍 Linux系统扫描SCSI磁盘有几种方式?Linux新增LUN之后,能否不重启主机就认出设备?如果安装了PowerPath,动态添加/删除LUN的命令是什么?本文总结了Linux主机对磁盘设备进 ...

  8. Citrix XenDesktop 中VDA向DDC注册机制解析

    直接切入正题吧,至于什么是VDA?什么是DDC之类的我就不用做过多介绍了. 众所周知用户如果需要使用虚拟桌面,那么必须将虚拟桌面部署在DDC的交付组中并将虚拟桌面交付给用户.而且虚拟桌面在DDC中是已 ...

  9. Qt中的信号与槽机制解析

    注:要想使用Qt的核心机制信号与槽,就必须在类的私有数据区声明Q_OBJECT宏,然后会有moc编译器负责读取这个宏进行代码转化,从而使Qt这个特有的机制得到使用. 所谓信号槽,简单来说,就像是插销一 ...

最新文章

  1. C++ Primer 第九章 顺序容器
  2. Windows Mobile 5.0 中为开发人员提供的新功能(3)
  3. C# 调用C++写的dll的实现方法
  4. java解析xml的几种方式
  5. 一企业彻底实现金融风险数字化,节约人力超4000小时
  6. 字节跳动斩获支付牌照欲建金融帝国,技术实力配得上野心吗?
  7. java web 加载Spring --web.xml 篇
  8. html5用户注册页面代码,HTML5注册页面示例代码
  9. 维宏云智能工厂系统1.0全面升级,带你体验豪华智能制造
  10. CSS学习(一)--选择器
  11. 深入浅出CNN-经典总结(2019中秋)
  12. 详解C++中fixed,setprecision(),setw()的用法
  13. 怎么申请学校邮箱?学校邮箱格式有哪些?
  14. Speedoffice(word)如何调整页眉位置
  15. 金蝶K3提取在途订单数据并设置触发(可用于在途订单交期回复)
  16. 华为交换机关闭服务端口
  17. Fedora linux root登录和ssh连接
  18. linux 4t磁盘格式化,Ubuntu 16.04系统挂载4T硬盘
  19. MTK 8735A 8.1 自定义按键向APP发送广播
  20. 打包带走极客时间大数据课程的正确姿势

热门文章

  1. 搭建Struts2步骤
  2. linux向用户发送消息
  3. 图像协方差矩阵_深度学习的预处理:从协方差矩阵到图像白化
  4. 机器学习训练营_如何不运行学习代码训练营
  5. 创建自己的github_创建自己的GitHub(kinda)
  6. 142_Power BI之同比预测
  7. 104_Power Query 数据库条件查询
  8. 前序表达式 中序表达式 后序表达式
  9. 新版rust怎么拆除建筑_宁夏乘客电梯拆除电话
  10. Python如何创建装饰器时保留函数元信息