Skip to content

文件系统:数叶子得最大文件,数层数得读几次盘(专题总纲)

Intro

这一类题的题面几乎长成一个样子:给你簇大小、地址项长度、几个直接地址项加几级间接,配一张目录树的图,然后问最大文件多大、读某个字节要访问几个盘块。

参数很多,但它们描述的是同一样东西——整张图上只叠着两棵树

目录树——按名字找到索引节点;索引树——按偏移找到数据块。

要算个数出来的小问,大多在这两棵树上做同一件事:

  • 数叶子 → 这棵树最多能挂多少个数据块 → 最大文件长度
  • 数层数 → 从根走到那片叶子要落几次盘 → 访问一次要读几个盘块

这两个动作撑起七道真题里的绝大多数小问。参数再多,也只是在决定树有多宽、有多高。

「簇」和「盘块」在这一章里是同一个东西,只是各年题面用词不同:2016、2018 说簇,2026 说盘块。本文跟着被引的那道题走。)

剩下的是不用算的那一类——选哪种组织方式、删一个目录要动哪些元数据。它们问的是这两棵树该长成什么样、改一处要跟着改哪几处,本文最后一节单独说。

三种分配方式,是同一棵树的三种形状

教材把连续、链接、索引并列成三种"方式",但放到这两个动作下面看,它们只是树的三种形状:

分配方式树长什么样随机访问第 k 块要走几步
连续没有树,起始块号加 k 就到0 步,地址是算出来的
链接 / FAT一条链,深度等于逻辑块号沿链走 k 步(FAT 在内存则不落盘)
索引(混合)一棵矮而宽的树,深度最多 4走到第几级看 k 落在哪一段

连续分配随机访问最快、插入最贵;链接分配插入最便宜、随机访问最贵——2014 年那道题把两者摆在一起问同一个插入操作,考的就是这个权衡。

索引分配的宽度由一个除法定出来:

每个间接块能装的地址项数=簇大小地址项长度

2018 年那道是 4096÷4=1024 项,于是四段容量依次是 8、1024、1024210243 个簇。这个除法是索引分配后续每一步的起点,先算它再动别的。

数叶子:最大文件长度

把四段的簇数加起来乘簇大小就是答案。2018 年那道的四段拆开看,量级差得很悬殊:

来源簇数 × 4 KB大小
直接地址项(8 个)8×4 KB32 KB
一级间接1024×4 KB4 MB
二级间接10242×4 KB4 GB
三级间接10243×4 KB4 TB

三级间接一项就压倒了前三段之和。这也解释了 UNIX 类文件系统为什么这样分段:绝大多数文件小到只用直接地址项、一次间接都不必走,而少数巨大文件靠最后一级兜住。

换成链接分配,树退化成一条链,能挂多少块由指针宽度决定而不是索引项个数。2014 年那道每块 1 KB、其中 4 B 放指针,块号 4 B 就能编 232 个块,每块能装的数据是 1KB4B别忘了减掉指针占的那 4 B——它挤占的是数据空间。

换成 FAT,上限由表项宽度决定。2016 年那道表项 2 B,所以最多 216 个簇,乘 4 KB 得 256 MB。

数层数:一次访问要落几次盘

这是这类题真正拉开分差的地方。做法只有一步:把这次访问经过的每一环列出来,一个都别漏。

2026 年那道问「inode 已在内存,访问偏移 21460 的一个字节最多读几个盘块」:

偏移 21460 ÷ 4096 = 5 余 980       → 逻辑块 5
逻辑块 0~4  归 5 个直接地址项管    → 5 不在里面
逻辑块 5    是一级间接的第 0 项    → 走一级间接
  ① 读一级间接表块               ← 这一块自己也在磁盘上
  ② 读数据块
共 2 个盘块

第 ① 步是最常丢的那一分。 间接表块不是凭空存在的索引,它自己就是一个盘块,要读进来才能查。inode 在内存只省掉了「读 inode」那一步,省不掉它。

必错点

题面说什么已经在内存,就少数一环。 这句前提换着位置出现在题面各处,而它直接改答案:

年份题面给的前提因此不计
2016FAT 和 dir 已在内存追整条簇号链都不落盘,只读 dir1 和数据簇
2018只问「获取最后一个簇号」不含读数据块那一次
2026inode 已读入内存不含读 inode 那一次,但间接表块照读

FAT[N] 存的是「N 号簇之后该读哪一簇」。 不是 N 号簇本身。2016 年那道问 106、108 两个簇号存在哪个表项里,答案是 FAT[100] 和 FAT[106]——链是往前指的,按号入座会全错

判落在第几级,要拿累计边界比,不是拿簇数比。 2018 年那道的 F2 是 40 KB:先看 40KB>8×4KB=32KB,越过直接段;再看它没到直接段加一级间接段的累计上界 32 KB + 4 MB,所以落在一级间接。先算出各段的累计上界,再拿文件大小去比。

两个目录项的索引节点号相同,就是同一个文件。 2022 年那道给的表里 doccourse1 的索引节点号都是 10,这是硬链接——同一份数据两个名字,所以问 doc 占的磁盘块号,直接抄 course1 的 30。这一问不用算,看出来就得分。

编号起点会变。 inode 编号常从 0 起,盘块号有的题从 1 起。2026 年那道算 inode 1000 在哪块:1000÷32=31 余 8,商 31 是偏移,要加到起始块号 100 上得 131。从 0 起算就一路从 0 起算,中途换标准必错。

一道题的答卷长什么样

以 2026 年那道的第 (1) 问为例。三小问各写三到四行,把中间量都摆出来——这类题给分点几乎都落在中间量上。

① inode 1000 在哪个盘块

每块装的 inode 数 = 4096 / 128 = 32
1000 / 32 = 31 余 8        ← 商是块偏移,余数是块内序号
盘块号 = 100 + 31 = 131

② 访问偏移 21460 最多读几个盘块(inode 已在内存)

21460 / 4096 = 5 余 980    → 逻辑块 5
直接项管 0~4,逻辑块 5 落一级间接的第 0 项
读一级间接表块 1 次 + 读数据块 1 次 = 2 个盘块

③ 最多能存多少个文件

inode 表占 4096 个盘块 × 每块 32 个 inode = 131072 个 inode
每个文件至少占 1 个 inode → 最多 131072 个文件

⚠️ 第 ③ 问这一档还要看题面有没有给数据区大小——给了就要两个上限取小。2018 年那道就是这个形态:inode 数量算出 64 M 个、数据空间算出 256 M 个,取小的 64 M。只算一边是这一问最常见的失分。

第 (2) 问「删掉一个目录要动哪些元数据」,分值比上面三小问加起来还高,而它考的是同一件事的反面:两棵树上摘掉一个节点,两张位示图都要跟着对账

答法是按「自底向上、每一层三件事」逐层写。删 dir1 要先删它里面的 file

先删 file(inode 1000):
  ① 释放它的数据块和间接块  → 改磁盘位示图
  ② 注销 inode 1000        → 改索引节点位示图
  ③ 删掉 dir1 里的 file 目录项
再删 dir1(inode 201):
  ① 释放 dir1 的目录数据块  → 改磁盘位示图
  ② 注销 inode 201         → 改索引节点位示图
  ③ 删掉 dir 里的 dir1 目录项

三件事一件都不能少,两层都要写。 只写「改位示图、删目录项」而不分两层、不区分两张位示图,这一问就拿不满——它给的分正是按「每一层三件事」摊开的。

真题的两种形态

第一组 · 算容量与访盘次数(2012-46、2014-46、2016-47、2018-46、2026-46)——给参数,问最大文件长度、访问某个位置要读几个盘块、最多能存多少文件。做法就是上面那两个动作。

第二组 · 定性与读目录树(2011-46、2016-47(1)、2022-45)——给一张目录树的图,问目录项里装什么、按名存取要读哪几个盘块、某个块号是多少。这一组的关键是记住目录本身也是文件:读目录就是读它的数据块,所以路径有几层就多几次读盘。(2022 年那道的第 (4) 问「6 MB 要用到哪几级间接」其实是第一组的动作,混编在同一道题里。)

2011 年那道是唯一一道纯定性题:一次性写入、写完不改、一级目录,问三种组织方式选哪个。这类题的答法是拿题面给的每个约束逐条对照三种方式的代价——不可修改就不怕连续分配的插入代价,一级目录就不需要多级检索,于是连续分配的顺序访问优势全留下了。

交卷前扫一眼

先算「每块装几个地址项」· 数叶子求容量、数层数求访盘 · 间接表块自己也要读一次 · 题面说谁在内存就少数一环 · 问「最多存几个文件」时两个上限取小

配套内容

考纲要求、但这 7 道真题没有正面考过的(专题的巩固栏里配了题):

  • 位示图与块号之间的双向换算——2026 年那道提到删除时要改位示图,但没让算过「第 i 字第 j 位对应哪个块号」
  • 磁盘全局布局的五个区各占多少块——引导块、超级块、位示图、索引节点表、数据区怎么分,真题没考过
  • 硬链接的链接计数怎么增减——2022 年那道只用硬链接推了一个块号;2026 年那道问了删除目录要动哪些元数据,擦到了边,但计数何时归零、归零后才真正释放数据块,没考过
  • 内存映射文件——七道真题里一次都没出现
  • 三种分配方式在访盘次数上的量化横向对比——2011 年那道让三选一,但看的是「一次性写入、不可修改」这类使用场景,不是数出来的访问次数;2014 年那道则只单独问了连续和链接各自的插入代价

逐题精讲(建设中)——真题作答与 AI 判分入口见站内大题专题

真题练习