大家好,接下来的一段时间我将开始学习野火的Linux 系统课程并将学习到的干货逐步更新到我的CSDN博客中。没时间刷课的同学可以把我的博客喂给AI 突击一下。
目录
一、一切皆文件思想
二、VFS 虚拟文件系统
VFS 内部核心结构体
两套操作函数集(函数指针,多态实现)
三、文件系统两大分类
四、完整调用层级
五、总结
一、一切皆文件思想
Linux 内核设计思想:屏蔽硬件差异,将普通文件、硬件设备、进程信息全部抽象为文件。 上层应用统一使用open/read/write/close一套系统调用接口访问,无需关心底层是磁盘、Flash、硬件设备还是内核运行信息。
二、VFS 虚拟文件系统
- VFS 不是真正可以挂载使用的文件系统,是内核抽象中间层(框架)。
- 作用:定义一套统一的文件操作接口,由不同底层文件系统去实现这套接口。应用访问文件,本质是访问 VFS 抽象层,VFS 再转发给对应的底层文件系统。
VFS 内部核心结构体
super_block:超级块,描述一个已经挂载的文件系统。inode:代表一个具体文件,保存文件元数据(权限、大小),不保存文件名。dentry:目录项,保存文件名、文件路径,用于路径查找缓存。
两套操作函数集(函数指针,多态实现)
inode_operations:文件管理操作,rmdir删除、rename重命名、link创建链接。file_operations:文件读写操作,open打开、read读、write写。
VFS 只定义接口,真正逻辑由底层文件系统实现。
三、文件系统两大分类
普通文件系统、特殊虚拟文件系统是平级关系,二者都注册、挂载到 VFS 抽象层,不存在父子层级。
| 分类 | 特点 | 代表文件系统 | 挂载点 | 说明 |
|---|---|---|---|---|
| 普通文件系统(有实体) | 数据存储在磁盘 / Flash 物理介质,掉电数据保留 | ext4、fat32、ubifs | /、/mnt等 | ext4:Linux 主流磁盘文件系统fat32:U 盘、SD 卡,跨平台ubifs:嵌入式 NAND‑Flash 专用 |
| 特殊虚拟文件系统 | 内核内存动态生成,无物理存储,断电数据丢失 | procfs、devfs、sysfs | /proc/dev/sys | procfs:进程文件系统,查看进程、CPU、内存信息;devfs:设备文件系统,硬件操作接口; |
四、完整调用层级
应用程序app → glibc库 ↓ ↓ 系统调用 open/read/write ↓ VFS虚拟文件系统(抽象框架,定义统一接口) ├─普通文件系统实现:ext4 / fat32 / ubifs → 磁盘/Flash硬件 └─虚拟特殊文件系统实现:procfs / devfs → 内核内存调用流程:
- APP 发起文件操作,经过 glibc,触发系统调用;
- 进入内核 VFS 层,查找对应的
super_block、inode、dentry; - VFS 调用对应文件系统实现的
inode_operations/file_operations; - 如果是普通文件系统,读写物理存储;虚拟文件系统,读取内核内存数据。
五、总结
- VFS:抽象框架,不能直接挂载;
- procfs、devfs:是真实可挂载的虚拟文件系统,运行在 VFS 之下;