一、全局视角:VFS 的任务
VFS 作为中间适配层,他需要招呼 3 个大佬:1. 应用进程 ,2.系统内核 3.底层磁盘。
二、VFS负责处理 3 个任务的核心接口
1. VFS 提供给 【应用进程 】的接口:
- 进程的 “办公地点” – struct fs_struct{}
负责维护当局进程的工作目录和根目录
- 进程的 “公文包” struct file_struct{}
维护进程打开的文件描述符列表
2. VFS 提供给【系统内核】的接口:
- 被打开的“文件” struct file{}
维护全局的被打开文件的对象,他是VFS的核心对象
- 文件的 “坐标” struct path{}
由 路径 vfsmount + 条目对象 dentry 组成
- 文件系统的父子血缘关系记录 – 挂载点 struct mount{}
记录无入口的原父文件系统 dentry 与 替位的新子文件系统 dentry 关联关系
【补充知识】:
- VFS 为内核提供的始祖对象 – file 对象由两部分组成:
- 路径 Path
- 文件内容读写接口 (file_operation)
- “无名”的文件内容代理 struct dentry{}
维护在 path 中,dentry 是一个概念难点
- 子文件系统的磁盘管理员 struct vfsmount{}
维护着与底层文件系统相关的 superblock与 替位的新子文件系统入口 dentry
3. VFS 提供给【底层磁盘】的接口:
- 管理磁盘文件的 struct inode{}
包含对持久化的文件内容权限标记方法 inode_operation、以及读写文件内容的IO接口 file_operation
- 管理 inode 的 struct superblock{}
包含对 inode 增删查改方法 superblock_operation
【补充知识】:
值得一提的是: inode里的 file_operation 涉及很多文件缓存技术以及 IO 缓存等驱动技术,这是技术热点。