本次笔记内容:
12.10 虚拟文件系统
虚拟文件系统抽象
如上图,虚拟文件系统就是,将复杂系统抽象,建立简单的接口,来屏蔽底层具体文件系统的差异性。
比如,对于Device I/O与Network I/O可能在底层实现很不一样,当时在上层,都被虚拟文件系统抽象成了包含write、read等基本操作的API。
虚拟文件系统的目的与功能
目的:
- 对所有不同文件系统的抽象。
功能:
- 提供相同的文件和文件系统接口;
- 管理所有文件和文件系统关联的数据结构;
- 高校查询列程,遍历文件系统;
- 与特定文件系统模块的交互。
虚拟文件系统基本结构
卷控制块(Unix:“superblock”)
- 每个文件系统一个;
- 文件系统详细信息;
- 块、块大小、空余块、计数/指针等。
文件控制块(Unix:“vnode” or “inode”)
- 每个文件一个;
- 文件详细信息;
- 许可、拥有者、大小、数据库位置等。
目录节点(Linux:“dentry”)
- 每个目录项一个(目录和文件);
- 将目录项数据结构及树型布局编码形成树型数据结构;
- 指向文件控制块、父节点、项目列表等。
结构如上图。
虚拟文件系统如何保存
文件系统数据结构:
- 卷控制块(每个文件系统一个);
- 文件控制块(每个文件一个);
- 目录节点(每个目录项一个)。
持续存储在二级存储中:
- 在分配在存储设备中的数据块中。
当需要时加载进内存:
- 卷控制模块:当文件系统挂载时进入内存;
- 文件控制块:当文件被访问时进入内存;
- 目录节点:在遍历一个文件路径时进入内存。
如上图,磁盘的头几个扇区存储superblock,按照逻辑关系,依此调用进内存。