# 文件系统的层次结构
用户需要通过操作系统提供的接口发出请求 —— 用户接口
由于用户提供的是文件的存放路径,因此需要操作系统一层一层地查找目录,找到对应的目录项 —— 文件目录系统
不同的用户对文件有不同的操作权限,因此为了保证安全,需要检查用户是否有访问权限 —— 存取控制模块(存取控制验证层)
验证了用户的访问权限之后,需要把用户提供的 "记录号" 转变为对应的逻辑地址 —— 逻辑文件系统与文件信息缓冲区
知道了目标记录对应的逻辑地址后,还需要转换成实际的物理地址 —— 物理文件系统
要删除这条记录,必定要对磁盘设备发出请求 —— 设备管理程序模块
删除这些记录后,会有一些盘块空闲,因此要将这些空间盘块回收 —— 辅助分配模块
# 文件系统的全局结构(布局)
原始磁盘 -> 物理格式化:
- 低级格式化 —— 划分扇区,检测坏扇区,并用备用扇区替换坏扇区
物理格式化 -> 逻辑格式化:
- 磁盘分区(分卷),完成各分区的文件系统初始化
- 注:逻辑格式化后,主引导记录(MBR)(包含了磁盘引导程序和分区表)就已经在磁盘里了
# 虚拟文件系统
虚拟文件系统的特点:
- 向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
- VFS 要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统 VFS 的要求
- 每打开一个文件,VFS 就在主存中新建一个 vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统
存在的问题:
不同的文件系统,表示文件数据结构各不相同。打开文件后,其在内存的表示就不同
# 文件系统的挂载
文件系统挂载,即文件系统安装 / 装载 —— 如何将一个文件系统挂载到操作系统中
文件系统过载要做的事:
- 在 VFS 中注册新挂载的文件系统。内存中的挂载表包含每个文件系统相关信息,包括文件系统类型、容量大小等
- 新挂载的文件系统,要向 VFS 提供一个函数地址列表
- 将新文件系统加到挂载点,也就是将新文件系统挂载在某个父目录下