Skip to content

文件的物理结构

考情分析

文件物理结构是文件管理章节的最高频考点,几乎每隔一两年就出现在真题中。连续分配、链接分配、索引分配的优缺点对比是选择题常客,混合索引的地址计算则是大题常见考法。🔥🔥🔥 高频核心。

文件的数据要分配到磁盘块上——连续放?链式放?建索引?每种方式都在空间利用率和访问速度之间做取舍,这也是本章出计算大题最密集的地方。

磁盘块与文件分配

磁盘被划分为大小相等的磁盘块(block),文件的物理结构就是解决一个问题:如何把文件的数据分配到磁盘块上?

连续分配

每个文件占用一组连续的磁盘块。目录项中记录起始块号和长度。连续分配就像在书架上给一本书预留一整排连续的格子——读起来最快,但中间插不进新书。

目录项: {文件名: "data.txt", 起始块: 5, 长度: 4}

磁盘块: ... | 5 | 6 | 7 | 8 | ...
              └── data.txt ──┘

交互可视化

加载可视化中...

优缺点

优点缺点
支持顺序存取和随机存取产生外部碎片
顺序读写速度最快(磁头不需要移动)文件不能动态增长
实现简单,只需起始块号+长度必须预先知道文件大小

随机存取方式:要访问文件的第 i 个块,直接计算 起始块号 + i 即可。

链接分配

隐式链接

每个磁盘块中保留一个指针域,指向下一个磁盘块。目录项记录起始块和结束块。隐式链接就像寻宝游戏——每个线索只告诉你下一站在哪,想去第五站必须从第一站开始跑。

目录项: {文件名: "log.txt", 起始块: 2, 结束块: 10}

  块2        块5        块8        块10
┌─────┬──┐ ┌─────┬──┐ ┌─────┬──┐ ┌─────┬────┐
│数据 │→5│→│数据 │→8│→│数据│→10│→│数据 │null│
└─────┴──┘ └─────┴──┘ └─────┴──┘ └─────┴────┘
优点缺点
无外部碎片只能顺序存取,不支持随机存取
文件可动态增长指针占用空间
无需预知文件大小指针损坏会导致文件丢失

显式链接(FAT)

将所有磁盘块的链接指针集中存放在一张**文件分配表(FAT, File Allocation Table)**中。FAT 常驻内存。

FAT 表:
磁盘块号:  0    1    2    3    4    5    6    7    8  ...
指针值:   -1   -1    5   -1   -1    8   -1   -1   10 ...
                     ↓              ↓              ↓
            起始块2 → 块5 → 块8 → 块10(结束)
优点缺点
支持随机存取(在内存中的 FAT 中查找)FAT 需要占用内存空间
检索速度比隐式链接快得多磁盘块越多,FAT 越大

隐式链接 vs 显式链接

这是选择题高频陷阱。隐式链接不支持随机存取(必须沿链逐块读取);显式链接(FAT)支持随机存取(FAT 在内存中,可以快速遍历链)。

交互可视化

加载可视化中...

索引分配

为每个文件建立一个索引块,索引块中存放该文件所有磁盘块的块号。

目录项: {文件名: "code.c", 索引块: 15}

  索引块15
┌────────┐
│  块号2  │ → 数据块2
│  块号8  │ → 数据块8
│  块号5  │ → 数据块5
│  块号12 │ → 数据块12
└────────┘
优点缺点
支持随机存取索引块本身占用磁盘空间
无外部碎片小文件也需要一个索引块(浪费)
文件可动态增长大文件需要多级索引

大文件的索引组织

当一个索引块装不下所有块号时,有三种方案:

链接索引:将多个索引块通过指针串联起来。

多级索引:类似多级页表,使用间接索引。若每个磁盘块 1KB,块号占 4B,则一个索引块可存放 256 个块号:

索引级数可寻址的最大文件
一级256×1KB=256KB
二级2562×1KB=64MB
三级2563×1KB=16GB

混合索引(Unix 方案) 🔥🔥🔥

Unix inode 中使用混合索引方式,兼顾小文件效率和大文件容量:

inode 中的块指针:
├── 直接块指针 × 12     → 直接指向数据块
├── 一次间接块指针 × 1   → 指向索引块 → 数据块
├── 二次间接块指针 × 1   → 索引块 → 索引块 → 数据块
└── 三次间接块指针 × 1   → 索引块 → 索引块 → 索引块 → 数据块

计算示例:设磁盘块大小 4KB,块号占 4B:

  • 每个索引块可存储 4096/4= 1024 个块号
  • 直接块:12×4KB= 48KB
  • 一次间接:1024×4KB= 4MB
  • 二次间接:10242×4KB= 4GB
  • 三次间接:10243×4KB= 4TB

交互可视化

加载可视化中...

三种分配方式对比

分配方式顺序存取随机存取外部碎片文件增长适用场景
连续分配最快支持困难文件大小固定
隐式链接支持不支持方便顺序存取文件
显式链接(FAT)支持支持方便FAT 文件系统
索引分配支持支持方便Unix/Linux

考研高频考点

  • 🔥🔥🔥 混合索引的最大文件大小计算(给定块大小和块号字节数)
  • 🔥🔥🔥 三种分配方式各自是否支持随机存取
  • 🔥🔥🔥 隐式链接 vs 显式链接(FAT)的区别(随机存取能力)
  • 🔥🔥 连续分配的外部碎片问题
  • 🔥🔥 访问文件第 n 个块需要几次磁盘 I/O(不同分配方式下)
  • 🔥 索引分配中索引块本身的空间开销

文件分配到磁盘块上之后,用户还需要通过文件名找到文件——这就是目录的工作,下一篇展开。

真题练习

相关真题(13题)

2023Q32选择题2分

FAT记录外存空间使用情况:既管理空闲块又记录文件分配

2022Q45综合题7分

综合题:索引节点的文件系统中目录、inode和多级索引的综合计算

2021Q25选择题2分

文件分配:索引分配既支持文件长度可变又支持随机访问

2020Q30选择题2分

多级索引:计算直接+一级间接+二级间接的最大文件长度

2018Q31选择题2分

文件访问优化:提前读、连续簇、延迟写、磁盘缓存都可加速

2017Q26选择题2分

磁盘分配:以簇为单位分配,1026B需要2个簇=2048B

2016Q47综合题9分

综合题:FAT文件系统的目录结构、FAT表和文件访问路径

2015Q29选择题2分

多级索引访问:直接索引访问1块,二级索引访问3块(2级索引+数据)

2014Q46综合题7分

综合题:连续分配与链接分配方式下文件记录插入操作的对比

2013Q24选择题2分

文件分配:CD-ROM只读且需随机访问,连续结构性能最好

2013Q26选择题2分

文件长度决定因素:inode总数与单个文件长度无关

2010Q29选择题2分

索引结构:既支持随机访问(通过索引表)又易于扩展(添加索引项)

2009Q30选择题2分

多级索引:4×256B+2×64×256B+1×64×64×256B=1057KB