# 5.6 文件系统层次结构 ## 一、文件系统的层次结构 ### 1.1 层次结构概述 文件系统通常采用层次结构,每一层实现特定的功能,向上层提供服务。 ### 1.2 层次划分 ``` +------------------+ | 用户接口层 | 用户调用 +------------------+ | 文件系统层 | 文件操作 +------------------+ | 目录管理层 | 目录操作 +------------------+ | 文件控制块层 | FCB管理 +------------------+ | 物理文件层 | 磁盘I/O +------------------+ | 设备管理层 | 设备驱动 +------------------+ ``` --- ## 二、各层功能 ### 2.1 用户接口层 **功能**: - 提供用户接口 - 接收用户命令 - 调用下层服务 **接口类型**: - 命令接口:shell命令 - 程序接口:系统调用 - 图形接口:GUI ### 2.2 文件系统层 **功能**: - 实现文件的基本操作 - 创建、删除、打开、关闭、读、写 **主要工作**: - 检查参数合法性 - 调用目录管理层查找文件 - 调用物理文件层进行I/O ### 2.3 目录管理层 **功能**: - 管理文件目录 - 实现按名存取 **主要工作**: - 查找文件目录 - 创建、删除目录项 - 管理目录结构 ### 2.4 文件控制块层 **功能**: - 管理文件控制块(FCB) - 管理文件属性 **主要工作**: - 分配、回收FCB - 读取、修改FCB - 管理打开文件表 ### 2.5 物理文件层 **功能**: - 管理物理存储空间 - 实现磁盘I/O **主要工作**: - 分配、回收磁盘块 - 管理磁盘空间 - 进行磁盘读写 ### 2.6 设备管理层 **功能**: - 管理I/O设备 - 设备驱动程序 **主要工作**: - 设备分配 - 设备驱动 - 中断处理 --- ## 三、文件系统的实现 ### 3.1 内存中的数据结构 **系统打开文件表**: - 整个系统一张表 - 记录所有打开的文件 - 包含FCB的副本 **进程打开文件表**: - 每个进程一张表 - 记录进程打开的文件 - 包含文件描述符和指向系统表的指针 **安装表**: - 记录文件系统的安装信息 - 如:根文件系统、挂载点 ### 3.2 外存中的数据结构 **引导块**: - 包含引导程序 - 用于系统启动 **超级块**: - 记录文件系统的整体信息 - 如:块数、空闲块数、inode数 **inode区**: - 存储所有inode - inode包含文件的元数据 **数据区**: - 存储文件数据 - 存储目录数据 ### 3.3 文件打开过程 1. **用户调用**:open(pathname, mode) 2. **目录查找**:按路径查找文件 3. **权限检查**:检查访问权限 4. **分配FCB**:在内存中分配FCB副本 5. **返回描述符**:返回文件描述符 ### 3.4 文件读写过程 1. **用户调用**:read(fd, buf, count) / write(fd, buf, count) 2. **查找FCB**:根据文件描述符找到FCB 3. **权限检查**:检查读写权限 4. **地址转换**:逻辑地址转换为物理地址 5. **磁盘I/O**:进行磁盘读写 6. **更新FCB**:更新文件指针、访问时间 --- ## 四、文件系统的挂载 ### 4.1 什么是挂载 **挂载**:将一个文件系统连接到另一个文件系统的目录树上。 ### 4.2 挂载过程 1. **检查设备**:检查文件系统是否合法 2. **读取超级块**:获取文件系统信息 3. **建立连接**:将新文件系统连接到挂载点 4. **更新安装表**:记录挂载信息 ### 4.3 卸载 **卸载**:将文件系统从目录树上移除。 **条件**: - 没有进程正在使用该文件系统 - 所有文件已关闭 --- ## 五、考研重点 1. **文件系统的层次结构**:各层的功能 2. **内存中的数据结构**:系统打开文件表、进程打开文件表 3. **外存中的数据结构**:引导块、超级块、inode区、数据区 4. **文件打开过程**:步骤 5. **文件读写过程**:步骤 6. **文件系统的挂载**:概念、过程 --- *下一节:5.7 磁盘管理*