跳至正文

文件系统


文件系统

核心定义

文件系统 负责文件的按名存取与统一管理,将分散的磁盘块组织成用户可理解的文件视图。

FCB(文件控制块)/ inode 保存文件元数据(权限、大小、时间戳)和数据块索引地址,是文件存在的唯一标志。

目录 负责文件名到文件控制信息的映射,目录项存储文件名和指向 inode/FCB 的入口,不存储文件内容本身。

文件访问路径:路径解析 \to 沿目录树逐级查找 \to 定位 inode/FCB \to 读取数据块索引 \to 访问数据块

flowchart LR A["用户给出文件路径"] --> B["路径解析"] B --> C["沿目录树逐级查找"] C --> D["定位 inode/FCB"] D --> E["读取数据块索引"] E --> F["访问数据块"] F --> G["读写文件内容"]

文件分配方式三种:连续分配(物理相邻、顺序访问快、有外部碎片)、链接分配(离散存储、便于扩展、随机访问慢)、索引分配(通过索引块寻址、访问灵活、需额外索引块空间)。

目录结构类型:单级目录、两级目录、树形目录、无环图目录,其中树形目录是最常用的层级组织方式。

文件共享通过多个目录项指向同一 inode(硬链接)或路径名指向目标文件(软链接)实现。

文件保护通过访问控制表(ACL)、权限位(rwx)、用户分组等 访问控制 机制限制文件操作。

空闲空间管理 方法有空闲表、空闲链表、位示图、成组链接法,其中 位示图(每个磁盘块用 1 bit 表示空闲/占用)最常用。

磁盘调度 算法包括FCFS、SSTF、SCAN、C-SCAN,影响磁盘 I/O 平均寻道时间。

关键细节 / 操作步骤

  1. 文件访问流程:用户给出路径 \to 沿目录树逐级解析 \to 读取目录项找到 inode/FCB \to 通过索引结构定位数据块 \to 读写文件内容。
  2. 元数据内容:若题目问”inode 保存什么”,优先列权限、文件大小、时间戳、数据块地址、链接计数
  3. 分配方式选择:要求顺序访问效率高选连续分配;要求动态扩展选链接分配;要求随机访问选索引分配
  4. 目录结构选择:单用户简单系统用单级目录;多用户隔离用两级目录;通用系统用树形目录;需要文件共享用无环图目录
  5. 索引分配计算:一个索引块大小为 BB 字节,块号占 bb 字节,则每个索引块可存 B/bB/b 个块号。
  6. 硬链接机制:硬链接 共享时 inode 的链接计数增加,删除一个目录项不删除文件(计数减 1),计数为 0 才真正删除。
  7. 软链接机制:软链接 存储的是目标文件的路径名,访问时需重新解析路径,可跨文件系统但速度较慢。
  8. 碎片分析:连续分配产生外部碎片;链接分配无外部碎片但链接指针占空间;索引分配需预留索引块
  9. 文件保护:若题目问保护机制,从权限位、ACL、口令保护、加密四类展开。
  10. 若题目给出路径名:先拆目录层级,再定位控制块,最后谈数据块读取过程。

⚠️ 易错辨析

  • 目录保存的是文件名和指向 inode/FCB 的指针,不是文件内容本身。若把目录和文件内容混淆,整个访问路径分析全错。
  • inode 存的是元数据和数据块索引,不能代替数据块。inode 不存文件正文。
  • 连续分配 \neq 最优:连续分配顺序访问快,但容易产生外部碎片,且文件难以动态扩展。反例:文件增长超过预分配空间后无法继续写入。
  • 目录结构和文件分配方式是两个独立维度:目录管”如何找到文件”,分配管”数据块如何存放”,不能混着答。
  • 硬链接和软链接区别:硬链接共享 inode(同一文件系统内,删除源文件不影响),软链接存储路径名(可跨文件系统,源文件删除后悬空)。
  • 链接分配中的隐式链接不支持随机访问,必须从头遍历;显式链接通过 FAT 表支持随机访问。

💡 技巧与口诀

  • 口诀:目录管名字,inode 管信息,数据块管内容
  • 应用场景:只要题目给出”路径访问""文件共享""块地址”,就按目录 \to inode \to 数据块三层去拆。
  • 若题目问性能:先看定位成本(目录查找 + 块定位),再看空间碎片,再看共享能力
  • 比较文件分配方式最稳妥顺序:连续(快但碎)、链接(灵活但慢)、索引(全面但费空间)
  • 索引分配计算题:先算每个索引块可存多少个块号(B/bB/b),再按直接/一级间接/二级间接逐层累加。

📝 真题闭环 题目:某文件系统采用索引分配方式,每个磁盘块大小为 4KB,每个块号占 4B。若一个文件采用一级间接索引,该文件最大可以有多少个磁盘块?若采用二级间接索引呢?(inode 中有 10 个直接地址项)

解题思路

  • 审题抓”索引分配 + 最大磁盘块数”,切入点是索引块能容纳的块号数量
  • 一个索引块大小 = 4KB,每个块号占 4B,所以每个索引块可存 4096/4=4096/4 = 1024 个块号。
  • 直接地址:10 个磁盘块。
  • 一级间接索引:10241024 个磁盘块。总计 = 10+1024=10 + 1024 = 1034 个磁盘块。
  • 二级间接索引:1024×1024=1024 \times 1024 = 1048576 个磁盘块。总计 = 10+1024+1048576=10 + 1024 + 1048576 = 1048610 个磁盘块。
  • 最大文件大小 = 总块数 ×4\times 4KB。

答案:一级间接索引最大 1034 个磁盘块;二级间接索引最大 1048610 个磁盘块。


cd ..