--- ## 一、文件系统定义与核心功能 ### 1. 定义 文件系统是操作系统中**管理持久化数据**的子系统,负责将文件以**逻辑结构组织**并存储到磁盘等外存设备,提供文件的创建、读写、删除和保护功能。其核心设计目标包括: - **按名存取**:用户通过文件名访问文件,无需关注物理存储细节 - **高效存储**:优化磁盘空间利用率(如减少碎片) - **数据安全**:通过权限控制、备份等机制保障数据安全 ### 2. 核心功能 1. **文件存储管理**:分配磁盘空间(如连续/离散分配) 2. **目录管理**:树形结构组织文件,支持快速检索 3. **元数据管理**:维护文件属性(如大小、权限、时间戳) 4. **缓存机制**:通过内存缓存加速文件访问(如目录项缓存) 5. **虚拟文件系统(VFS)**:统一接口支持多种文件系统(如Ext4、NTFS) --- ## 二、文件系统的基本组成 ### 1. 核心数据结构 | **组件** | **描述** | | ------------------------ | -------------------------------------------------------------------------- | | **索引节点(inode)** | 存储文件元信息(如大小、权限、数据块位置),唯一标识文件,**持久化在磁盘** | | **目录项(dentry)** | 记录文件名与inode的映射关系,形成目录结构,**缓存在内存**以提高访问效率 | | **超级块(Superblock)** | 记录文件系统整体信息(如块大小、inode总数) | ### 2. 磁盘布局 磁盘被划分为以下区域: 1. **引导块**:系统启动代码 2. **超级块**:文件系统元信息 3. **索引节点区**:存储所有inode 4. **数据块区**:存储文件实际数据 5. **位图区**:记录空闲块/inode状态(0=空闲,1=占用) --- ## 三、文件实现机制 ### 1. 文件的物理结构 | **类型** | **特点** | **优缺点** | | ------------ | ---------------------------------------------------------------- | --------------------------------- | | **连续分配** | 文件占用连续的物理块,通过起始块号+长度定位 | ✔️顺序访问快 ✖️外部碎片严重 | | **链式分配** | 文件块通过指针链接,支持离散存储 | ✔️无外部碎片 ✖️随机访问效率低 | | **索引分配** | 建立索引表记录文件块位置,支持多级索引(直接/间接/双重间接指针) | ✔️支持大文件 ✖️索引表占用额外空间 | ### 2. 文件存储空间管理 | **方法** | **原理** | **应用场景** | | -------------- | ------------------------------- | ---------------------- | | **空闲表法** | 维护空闲块列表,分配时顺序查找 | 简单但效率低 | | **位图法** | 用二进制位表示块是否空闲(0/1) | 空间利用率高(如Ext4) | | **成组链接法** | 将空闲块分组,通过栈结构管理 | UNIX系统常用 | --- ## 四、文件存取方法 ### 1. 存取方式 | **类型** | **特点** | **适用场景** | | ------------ | ---------------------------------- | -------------- | | **顺序存取** | 按文件逻辑顺序依次读写 | 磁带、流媒体 | | **直接存取** | 随机访问任意位置(通过块号定位) | 数据库文件 | | **索引存取** | 通过关键字(如记录ID)快速定位记录 | 大型结构化文件 | ### 2. 性能优化技术 - **缓存机制**:将热点数据缓存在内存(如页缓存) - **预读取**:根据局部性原理提前加载相邻数据块 - **日志技术**:记录操作日志,避免系统崩溃导致数据不一致 --- ## 五、高频考点与答题要点 ### 1. 必背概念对比 - **硬链接 vs 软链接**: - 硬链接:多个目录项指向同一inode(inode引用计数+1) - 软链接:独立文件存储目标路径,类似快捷方式 - **FAT32 vs NTFS**: - FAT32:简单,最大文件4GB;NTFS:支持ACL、日志、大文件 ### 2. 经典问题解析 - **Q1:索引节点(inode)与目录项(dentry)的区别?** - 答:inode存储文件元信息并持久化;dentry仅缓存在内存,用于快速检索目录结构 - **Q2:如何处理大文件存储?** - 答:采用多级索引(如双重间接指针)或范围分配(extent) - **Q3:文件系统如何保证崩溃一致性?** - 答:通过日志(Journaling)记录操作步骤,崩溃后按日志恢复 ---