# 文件系统的层次结构

文件系统层次结构

用户需要通过操作系统提供的接口发出请求 —— 用户接口

由于用户提供的是文件的存放路径,因此需要操作系统一层一层地查找目录,找到对应的目录项 —— 文件目录系统

不同的用户对文件有不同的操作权限,因此为了保证安全,需要检查用户是否有访问权限 —— 存取控制模块(存取控制验证层)

验证了用户的访问权限之后,需要把用户提供的 "记录号" 转变为对应的逻辑地址 —— 逻辑文件系统与文件信息缓冲区

知道了目标记录对应的逻辑地址后,还需要转换成实际的物理地址 —— 物理文件系统

要删除这条记录,必定要对磁盘设备发出请求 —— 设备管理程序模块

删除这些记录后,会有一些盘块空闲,因此要将这些空间盘块回收 —— 辅助分配模块

# 文件系统的全局结构(布局)

原始磁盘 -> 物理格式化:

  • 低级格式化 —— 划分扇区,检测坏扇区,并用备用扇区替换坏扇区

物理格式化 -> 逻辑格式化:

  • 磁盘分区(分卷),完成各分区的文件系统初始化
  • 注:逻辑格式化后,主引导记录(MBR)(包含了磁盘引导程序和分区表)就已经在磁盘里了

# 虚拟文件系统

虚拟文件系统

虚拟文件系统的特点:

  • 向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
  • VFS 要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统 VFS 的要求
  • 每打开一个文件,VFS 就在主存中新建一个 vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统

存在的问题:

不同的文件系统,表示文件数据结构各不相同。打开文件后,其在内存的表示就不同

# 文件系统的挂载

文件系统挂载,即文件系统安装 / 装载 —— 如何将一个文件系统挂载到操作系统中

文件系统过载要做的事:

  • 在 VFS 中注册新挂载的文件系统。内存中的挂载表包含每个文件系统相关信息,包括文件系统类型、容量大小等
  • 新挂载的文件系统,要向 VFS 提供一个函数地址列表
  • 将新文件系统加到挂载点,也就是将新文件系统挂载在某个父目录下