news 2026/4/30 22:37:31

从零到壹嵌入式Linux编程实战教程课:第 13 课 文件系统子系统(VFS)模块二:内核核心机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零到壹嵌入式Linux编程实战教程课:第 13 课 文件系统子系统(VFS)模块二:内核核心机制

文章目录

    • 一、课程目标
    • 二、VFS 虚拟文件系统概述
    • 三、Linux 文件系统整体层次架构
    • 四、VFS 四大核心数据结构
      • 4\.1 超级块 super\_block
      • 4\.2 索引节点 inode
      • 4\.3 目录项 dentry
      • 4\.4 文件结构体 file
    • 五、文件描述符与打开流程
      • 5\.1 文件描述符 fd
      • 5\.2 文件打开完整流程
    • 六、路径解析与目录缓存机制
    • 七、常见 Linux 文件系统类型
    • 八、实战示例代码
      • 示例 1:用户态文件读写(标准 VFS 调用流程)
      • 示例 2:内核态遍历当前进程文件信息
    • 九、课堂练习
    • 十、课后作业
    • 十一、核心关键词
  • 课程回顾总结
  • 上一课作业答案 内存管理子系统 \(MMU\) 实战作业代码
    • 代码功能说明
    • 注意事项

本章系统讲解 Linux 文件系统子系统 VFS 核心机制,阐明 VFS 作为虚拟抽象层,对上提供统一系统调用、对下适配各类物理与虚拟文件系统的核心设计思想。

重点讲解超级块、inode、dentry、file 四大核心结构体,理清文件系统、文件元数据、目录映射、进程打开文件的内核表示关系。梳理文件描述符分配、文件打开、路径解析、目录缓存的完整底层流程,区分 Ext4、Tmpfs、Procfs、Sysfs 等常用文件系统特性与应用场景。

通过用户态文件读写、内核态查看进程文件对象两段示例代码,打通应用层操作与内核 VFS 底层实现的对应关系。掌握本章内容,可深刻理解 Linux 一切皆文件的设计理念,为后续设备驱动开发、虚拟文件系统开发、嵌入式根文件系统裁剪奠定坚实基础。

一、课程目标

  1. 理解 Linux VFS 虚拟文件系统的作用、架构层次与设计思想

  2. 掌握 VFS 四大核心对象:超级块、inode、dentry、文件结构体

  3. 理解通用文件操作接口、系统调用与 VFS 层转发机制

  4. 掌握普通文件、设备文件、管道、proc、sysfs 在内核中的统一管理方式

  5. 理解文件系统挂载、卸载、路径解析底层流程

  6. 能通过用户态、内核态代码理解文件读写流程,为驱动设备文件开发打基础


二、VFS 虚拟文件系统概述

VFS(Virtual File System,虚拟文件系统)是 Linux 内核为兼容各类异构文件系统而设计的一层通用抽象接口。

Linux 支持 Ext2/Ext3/Ext4、FAT32、NTFS、Tmpfs、Ramfs、Procfs、Sysfs 等多种文件系统,
VFS 对上提供统一系统调用接口,对下适配不同硬件与具体文件系统,实现一套接口、适配所有文件系统

VFS 核心价值:

  • 应用层无需关心底层具体文件系统类型

  • 内核统一管理磁盘文件、设备文件、管道、虚拟文件

  • 标准化文件读写、打开、关闭、权限检测流程


三、Linux 文件系统整体层次架构

从上至下分为四层:

  1. 用户层:应用程序、Shell、标准库

  2. 系统调用层:open、read、write、close、lseek

  3. VFS 虚拟文件系统层:统一抽象、通用对象、通用操作接口

  4. 具体文件系统层:Ext4、FAT32、Tmpfs、Procfs、设备驱动文件层

所有文件操作都会先进入 VFS,再由 VFS 转发给底层真实文件系统或设备驱动。


四、VFS 四大核心数据结构

4.1 超级块 super_block

代表整个文件系统实例,挂载一个分区就对应一个超级块。
记录内容:文件系统类型、总大小、空闲块、挂载点、操作函数集。

4.2 索引节点 inode

代表一个实际文件 / 目录的底层元数据。
不包含文件名,只记录:文件大小、权限、时间戳、磁盘块指针、文件类型。

4.3 目录项 dentry

目录项,负责文件名与 inode 映射,缓存目录路径,加速路径查找。
作用:路径解析缓存、减少磁盘 IO、提升文件访问速度。

4.4 文件结构体 file

进程打开文件后在内核中的表示。
记录:文件偏移量、打开模式、所属 inode、文件操作函数指针。
每个进程的 fd 文件描述符,本质就是 file 结构体数组下标。


五、文件描述符与打开流程

5.1 文件描述符 fd

  • 每个进程拥有独立文件描述符表

  • 0:标准输入 1:标准输出 2:标准错误

  • 后续打开文件从小到大分配 fd 编号

5.2 文件打开完整流程

  1. 用户态调用 open () 系统调用

  2. 进入内核 sys_open,交由 VFS 处理

  3. VFS 逐层解析路径名,查找 dentry、匹配 inode

  4. 检查访问权限、文件存在性

  5. 分配 file 结构体、挂载文件操作接口

  6. 分配 fd,返回给用户态

  7. 后续 read/write 通过 fd 找到 file → inode → 底层读写接口


六、路径解析与目录缓存机制

路径解析:从根目录开始,逐级拆分路径每一层目录名称,
依靠 dentry 缓存快速找到对应 inode,最终定位目标文件。

dentry 缓存优点:

  • 常用目录路径常驻内存

  • 避免每次都读取磁盘目录块

  • 大幅提升文件访问性能


七、常见 Linux 文件系统类型

  1. Ext4:系统主文件系统,日志型、稳定、支持大文件

  2. Tmpfs:内存文件系统,断电丢失,速度极快

  3. Procfs:进程虚拟文件系统,/proc 查看进程、内核参数

  4. Sysfs:设备模型文件系统,/sys 展示总线、设备、驱动

  5. FAT32:U 盘、SD 卡常用,兼容性强

  6. Devtmpfs:/dev 设备文件自动生成


八、实战示例代码

示例 1:用户态文件读写(标准 VFS 调用流程)

#include<stdio.h>#include<unistd.h>#include<fcntl.h>#include<string.h>intmain(void){int<
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 22:36:23

使用Taotoken后API调用延迟与稳定性体感观察

使用Taotoken后API调用延迟与稳定性体感观察 1. 日常调用响应时间的主观感受 在实际开发过程中&#xff0c;通过Taotoken调用不同模型时&#xff0c;响应时间会因模型类型和任务复杂度而有所差异。以常见的文本补全任务为例&#xff0c;简单问答通常在几秒内返回结果&#xf…

作者头像 李华
网站建设 2026/4/30 22:33:26

大模型参数调优起始-AI调优与安全1

一、基础概念大模型参数调优&#xff08;Fine-tuning&#xff09;&#xff0c;简单来说就是&#xff1a;在一个已经预训练好的通用大模型基础上&#xff0c;使用特定领域的小批量数据&#xff0c;对模型的部分或全部参数进行小幅调整&#xff0c;让模型适配特定任务或场景的过程…

作者头像 李华
网站建设 2026/4/30 22:32:27

新手必读:如何避开代理IP的“低价陷阱”与“雷区”

在跨境业务和数据服务中&#xff0c;代理ip已成为合法业务运营的常用工具。然而&#xff0c;市场上的ip质量参差不齐&#xff0c;低价技巧和隐藏陷阱屡见不鲜。我们应该如何选择合适的IP&#xff1f; 本篇文章&#xff0c;LokiProxy将结合行业常见现象与真实使用场景&#xff0…

作者头像 李华