首页/操作系统/04-file/虚拟文件系统VFS 🔗 在 Obsidian 中打开
操作系统 · 04-file

虚拟文件系统VFS

重要度 ⭐⭐⭐⭐ 操作系统/文件管理VFS虚拟文件系统统一接口
速查
VFS 是位于具体文件系统之上的抽象接口层,为用户程序提供统一操作接口;四个核心对象:超级块inodedentryfile

速查

项目
定义在具体文件系统之上的一层抽象接口
作用为不同文件系统提供统一的操作接口
核心对象超级块、inode、dentry、file
代表实现Linux VFS

核心概念

虚拟文件系统(VFS)是操作系统中的一个抽象层,位于具体文件系统(如 ext4、NTFS、FAT32)之上,为用户程序提供统一的文件操作接口

VFS 的作用

  • 用户程序不需要知道底层使用的是什么文件系统
  • 同一套系统调用(open、read、write、close)可以操作任何文件系统
  • 支持挂载不同类型的文件系统到同一目录树

VFS 的核心对象

对象说明类比
超级块对象描述一个已挂载的文件系统文件系统的元数据
inode 对象描述一个文件的元数据文件控制块(FCB)
dentry 对象描述目录项(文件名→inode 的映射)目录项缓存
file 对象描述一个已打开的文件打开文件表项

VFS 的工作流程

  1. 用户调用 open("/home/user/file.txt")
  2. VFS 解析路径,查找 dentry 缓存
  3. 未命中则逐级查找目录,找到 inode
  4. 创建 file 对象,返回文件描述符
  5. 后续 read/write 通过 file 对象操作具体文件系统

关键性质

对象生命周期存储位置
超级块文件系统挂载→卸载内存(从磁盘读入)
inode文件存在期间内存 + 磁盘
dentry路径解析期间(可缓存)内存(目录项缓存)
fileopen→close内存(打开文件表)

常见考法

考法解题套路
VFS 的作用为不同文件系统提供统一接口
四个核心对象超级块、inode、dentry、file
为什么需要 VFS支持多种文件系统,统一系统调用接口
dentry 的作用目录项缓存,加速路径解析

易错点

注意
  1. VFS 不是一个具体的文件系统——它是抽象层/接口层
  2. VFS 的对象(超级块、inode 等)是内存中的数据结构——磁盘上有对应的存储
  3. dentry 是目录项缓存——不在磁盘上,纯内存结构
  4. VFS 使得不同文件系统可以同时挂载在同一目录树中
  5. file 对象在 open 时创建、close 时释放——不是文件创建时

核心结论

必背
  1. VFS 是 OS 中位于具体文件系统之上的抽象层,提供统一操作接口
  2. 四个核心对象:超级块对象、inode 对象、dentry 对象、file 对象
  3. VFS 使得同一套系统调用可以操作任何文件系统
  4. dentry 缓存加速路径解析,是 VFS 性能优化的关键
  5. Linux VFS 是最典型的实现,支持 ext4、NTFS、FAT 等多种文件系统

记忆卡片

VFS 的作用?
为不同文件系统提供统一的操作接口。
VFS 的四个核心对象?
超级块对象、inode 对象、dentry 对象、file 对象。
dentry 是什么?
目录项缓存(文件名→inode 映射),加速路径解析。
为什么需要 VFS?
支持多种文件系统共存,用户程序不需要关心底层文件系统类型。
file 对象何时创建何时释放?
open 时创建,close 时释放。

交互动画 · open 流程与多文件系统挂载

用户程序open("/home/user/file.txt") VFS 抽象层统一接口 dentry 缓存命中 ? 磁盘目录查找逐级解析 inode 对象读入内存 file 对象返回 fd 具体文件系统read/write ext4挂载于 / NTFS挂载于 /mnt/win FAT32挂载于 /mnt/usb
点击按钮观察 open() 的两种路径与多文件系统挂载
dentry 缓存命中则跳过磁盘目录查找,直接创建 file 对象

相关知识点

filesystem-implementation file-concept-and-classification

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。