Skip to content

2026年 408 操作系统 第 46 题

操作系统2026年综合题8分

题目

(本题满分 8 分)

文件系统的目录项包括文件名和索引节点号。磁盘包含索引节点表、位图、目录、文件数据等元数据。设:

  • 盘块大小 = 4 KB,盘块号占 4 B
  • 索引节点表存放系统所有文件,从 0 开始编号,存放在盘块号 100 开始连续的 4096 个盘块
  • 索引节点占用 128 B,包含直接地址项 5 个 + 一级间接地址项、二级间接地址项、三级间接地址项各 1 个
  • 磁盘位示图 / 索引节点位示图分别记录磁盘 / 索引节点的使用情况,0 = 未使用、1 = 已使用

目录结构与各文件的索引节点号如下图所示,file 文件占 30 KB。

dirdir1file文件索引节点号dir100dir1201file1000

(1)file 的索引节点所在的盘块号是多少?若 file 的索引节点已经读取到内存,要访问 file 文件中偏移地址 21460 的一个字节数据,则最多需要读多少个盘块?如果文件系统中有足够的磁盘空间,则最多可以存放多少个文件?(3 分)

(2)如果要删除目录 dir1,则需要对元数据进行哪些操作?(5 分)

解析

(1)三小问拆解

① file 的索引节点所在盘块号

每个盘块能装多少个索引节点?

索引节点表从盘块号 100 开始,inode 编号从 0 开始。inode 1000 在第几个盘块?

也就是说 inode 1000 是第 31 个盘块的第 8 个 inode(块内编号从 0 开始)。所以盘块号是:

编者注(易错点):1000 mod 32 = 8 是块内的偏移编号,不是字节偏移。要换成字节偏移得乘 128,即第 8 × 128 = 1024 字节起。这一步不影响答盘块号,但若题目还问"在该盘块的第几个字节"就要算清楚。

② 访问偏移 21460 的字节最多读几个盘块

Step 1:偏移 21460 在 file 的第几个逻辑块?

所以是 file 的逻辑块 5(从 0 开始编号)。

Step 2:逻辑块 5 该走哪一级寻址?

逻辑块号区间走哪级寻址取数据要读几个盘块
0 ~ 4直接地址项(5 个)1(数据块)
5 ~ 5+1024-1一级间接2(一级间接表块 + 数据块)
5+1024 ~ 5+1024+1024²二级间接3
更高三级间接4

逻辑块 5 正好是一级间接的第 0 项——前 5 个块(0~4)已经被直接地址项管完了,第 6 块(编号 5)必须经过一级间接索引。

Step 3:题面说 inode 已在内存 → inode 那一步不用读盘。但一级间接表块仍在磁盘上,必须读出来才能查到逻辑块 5 对应的实际盘块号;接着再读数据块本身。

最终:最多需要读 2 个盘块(一级间接表块 + 数据块)。

编者注(易错点)

  • 不要漏算"读一级间接表块"——它本身也是磁盘上的盘块。inode 在内存只是省了"读 inode"那一步
  • 也不要多算 inode——题面说了它在内存里
  • "最多"两个字也很关键。如果一级间接表所在盘块碰巧也已在内存,那只需 1 个;题目问的是 worst case

③ 最多可存放多少个文件

每个文件(含目录)占 1 个 inode。inode 总数:

所以最多可存放 131072 个文件

编者注(易错点):题面问的是"文件总数"上限,受 inode 表容量约束(每个文件至少 1 个 inode),不受数据空间约束(题目说"足够的磁盘空间")。看到"足够磁盘空间"几个字立刻知道瓶颈在 inode 数量,别去算簇能装下多少 4 KB 文件。

(2)删除目录 dir1 要做哪些元数据操作

dir1非空目录(里面还有 file),所以先递归删除内部文件,再删自己

Step 1:删除 file(inode 号 1000)

操作影响的元数据
释放 file 的所有数据块(5 个直接块 + 间接块本身 + 间接块指向的数据块)磁盘位示图 对应位 1→0
注销 inode 1000索引节点位示图 第 1000 位 1→0
把 dir1 目录里"file → 1000"那一项删掉dir1 的目录数据块 改写

Step 2:删除 dir1(inode 号 201)

操作影响的元数据
释放 dir1 自身的目录数据块(存目录项的那些块)磁盘位示图 对应位 1→0
注销 inode 201索引节点位示图 第 201 位 1→0
把 dir 目录里"dir1 → 201"那一项删掉dir 的目录数据块 改写
dirdir1file文件索引节点号dir100dir1201file1000

编者注(易错点 / 答题套路)

  • 递归删除是关键。若答"直接删 dir1"会丢分——目录非空时要先把孩子清空。这也是 Unix rm 默认禁止删非空目录的原因(rm -r 才行)。
  • 三类元数据要同时考虑:
    1. 数据块归还(磁盘位示图)
    2. inode 归还(索引节点位示图)
    3. 父目录里的目录项删除(数据块改写) 漏掉任意一类都会扣分,建议答题时按这三大类逐项展开。
  • "间接块本身"不要忘——它也占着盘块,删 file 时要一并归还。同理,二级 / 三级间接还要释放更多层级的间接块。

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题