跳转至

VFS 内核源码深度解析

VFS (Virtual File System Switch) 是 Linux 内核中承上启下的核心层——对上向用户态暴露统一的文件和目录操作接口,对下衔接具体文件系统实现。本系列从内核源码出发,逐层剖析 VFS 的六大核心模块。

📌 源码:git@github.com:torvalds/linux.git, torvalds/master, eb3f4b7426cf


架构概览

用户态                            内核态
┌───────────┐                ┌─────────────────────────────────────────┐
│  open()   │ ───────────►   │         VFS (Virtual Filesystem)        │
│  read()   │                │                                         │
│  write()  │                │  ┌─────────────────────────────────┐    │
│  close()  │                │  │         path lookup             │    │
└───────────┘                │  │    (第4篇:路径名查找)            │    │
                             │  │         dir → dentry            │    │
                             │  └──────────────┬──────────────────┘    │
                             │                 │                       │
                             │  ┌──────────────▼──────────────────┐    │
                             │  │         dentry cache             │    │
                             │  │    (第1篇:目录项缓存)            │    │
                             │  │    dcache.h:93 struct dentry     │    │
                             │  └──────────────┬──────────────────┘    │
                             │                 │ d_inode               │
                             │  ┌──────────────▼──────────────────┐    │
                             │  │         inode lifecycle          │    │
                             │  │    (第2篇:inode 生命周期)        │    │
                             │  │    fs.h:767 struct inode         │    │
                             │  └──────────────┬──────────────────┘    │
                             │                 │ i_mapping             │
                             │  ┌──────────────▼──────────────────┐    │
                             │  │    page cache + buffer IO        │    │
                             │  │    (第3篇:页缓存与缓冲区IO)       │    │
                             │  │    fs.h:473 address_space        │    │
                             │  └──────────────┬──────────────────┘    │
                             │                 │                       │
                             │  ┌──────────────▼──────────────────┐    │
                             │  │         block layer              │    │
                             │  │         bio → disk               │    │
                             │  └─────────────────────────────────┘    │
                             │                                         │
                             │  ┌─────────────────────────────────┐    │
                             │  │      file ops & fd table        │    │
                             │  │    (第5篇:文件操作与fd表)         │    │
                             │  └─────────────────────────────────┘    │
                             │                                         │
                             │  ┌─────────────────────────────────┐    │
                             │  │     mount & superblock          │    │
                             │  │    (第6篇:挂载与超级块)          │    │
                             │  └─────────────────────────────────┘    │
                             └─────────────────────────────────────────┘

系列目录

篇目 标题 核心文件
01 Dentry Cache — 目录项缓存与 RCU 无锁查找 include/linux/dcache.h, fs/dcache.c
02 Inode 生命周期 — 创建、查找、引用计数与回收 include/linux/fs.h, fs/inode.c
03 页缓存与缓冲区 I/O — 从 folio 到 bio include/linux/fs.h, mm/filemap.c, fs/buffer.c
04 路径名查找 — 从 open() 到 inode fs/namei.c
05 文件操作与文件描述符表 — 进程视角 include/linux/fs.h, fs/file_table.c, fs/open.c
06 挂载与超级块 — 文件系统实例的生命周期 include/linux/fs.h, fs/super.c, fs/namespace.c

阅读前提

  • 理解基本的文件系统概念(目录、inode、数据块)
  • 了解 Linux 内核基础(进程模型、系统调用、锁机制)
  • 推荐先阅读 Documentation/filesystems/vfs.rst

所有文章均为原创,基于 Linux 内核主线源码逐行分析,标记实际行号。欢迎提交 issue 或 PR 纠正错误。


💬 评论