Skip to content

虚拟文件系统

考情分析

VFS 在 408 真题中考查较少,属于 🔥 低频考点,但偶尔以选择题形式出现。

系统盘用 ext4,U 盘用 FAT32,网络共享用 NFS——用户不想关心文件在哪种文件系统上,只想用同一套 open/read/write 操作。VFS 就是为了解决这个"统一入口"的问题。

多文件系统的统一抽象

现代操作系统可能同时挂载多种不同的文件系统:

  • 系统盘:ext4
  • U盘:FAT32
  • 网络共享:NFS
  • 光盘:ISO 9660

用户不希望对不同文件系统使用不同的系统调用。VFS 的目标是:对上层提供统一的文件操作接口,对下层适配不同的文件系统实现

VFS 的层次结构

VFS 定义了一组标准接口,每个具体的文件系统只需要实现这些接口即可接入系统。VFS 就像万能充电头——对上统一是 USB-C 接口(系统调用),对下通过不同的转接头适配各种设备(ext4、FAT32、NFS)。

VFS 的核心数据结构

VFS 定义了四个关键的抽象对象:

对象说明
超级块对象(superblock)代表一个已挂载的文件系统,包含文件系统的全局信息
索引节点对象(inode)代表一个文件的元数据(VFS 统一的 inode,称为 vnode
目录项对象(dentry)代表路径中的一个分量(如 /home/alice 中的 homealice
文件对象(file)代表一个已打开的文件,包含文件指针等运行时信息

vnode vs inode

概念说明
vnodeVFS 层的统一文件表示,与具体文件系统无关
inode具体文件系统(如 ext4)中的索引节点

vnode 包含一个指向具体文件系统 inode 的指针和一组函数指针(指向该文件系统的操作实现)。

vnode
├── 文件系统类型
├── 通用属性(大小、权限...)
├── 操作函数指针 → { .read = ext4_read, .write = ext4_write, ... }
└── 具体 inode 指针 → ext4_inode_info

VFS 的工作流程

read(fd, buf, n) 为例:

  1. 通过 fd 找到进程打开文件表中的 file 对象
  2. file 对象中包含 vnode 指针
  3. vnode 中包含 read 函数指针,指向具体文件系统的读操作
  4. 调用具体文件系统的读操作完成数据读取

这个过程对用户完全透明——用户不需要知道文件位于哪种文件系统上。

考研高频考点

  • 🔥🔥 VFS 的作用(统一不同文件系统的接口)
  • 🔥 VFS 的四个核心对象(超级块/inode/dentry/file)
  • 🔥 vnode 与具体文件系统 inode 的关系

VFS 提供了统一接口,但不同的文件系统要先"挂载"到目录树上才能被访问。下一篇来看文件系统挂载的过程。

真题练习

相关真题(1题)

2025Q29选择题2分

VFS:提供统一接口访问不同文件系统,不是加速工具