Skip to content

2022年 408 操作系统 第 45 题

操作系统2022年综合题7分

题目

某文件系统的磁盘块大小为 4 KB,目录项由文件名和索引节点号构成,每个索引节点占 256 字节,其中包含直接地址项 10 个,一级、二级和三级间接地址项各 1 个,每个地址项占 4 字节。

该文件系统中子目录 stu 的结构如下图所示:stu 包含子目录 course 和文件 doccourse 子目录包含文件 course1course2。各文件的文件名、索引节点号、占用磁盘块的块号也一并给出(其中文件 doc 占用的磁盘块号 x 为待求)。

stucoursecourse1course2doc文件名索引节点号磁盘块号stu110course220course11030course210040doc10x

请回答下列问题。

(1) 目录文件 stu 中每个目录项的内容是什么?

(2) 文件 doc 占用的磁盘块的块号 x 的值是多少?

(3) 若目录文件 course 的内容已在内存,则打开文件 course1 并将其读入内存,需要读几个磁盘块?说明理由。

(4) 若文件 course2 的大小增长到 6 MB,为了存取 course2 需要使用该文件索引节点的哪几级间接地址项?说明理由。

解析

(1)目录 stu 的目录项内容

题目已给出目录项的格式 ——「文件名 + 索引节点号」。从上面树结构看,stu 直接包含两个孩子:子目录 course 与文件 doc。查表得它们的索引节点号分别是 210,所以 stu 的目录文件内容是这两条目录项:

文件名索引节点号
course2
doc10

编者注(易错点):目录项里有"文件名 + 索引节点号"这两个字段;文件具体存在哪个磁盘块、文件多大等等,统统由索引节点(inode)记录,不放在目录项里。把磁盘块号一起写进去就丢分了。

(2)求 x:文件 doc 的磁盘块号

stucoursecourse1course2doc文件名索引节点号磁盘块号stu110course220course11030course210040doc10x

观察表格里的索引节点号列:doccourse1 的索引节点号都是 10

这是 Unix 类文件系统里的 硬链接:两个目录项(一个在 stu 下叫 doc,一个在 course 下叫 course1)指向同一个 inode,意味着它们是同一个文件的两个名字,在磁盘上只占同一份数据。所以 doc 占用的磁盘块号必然等于 course1 占用的磁盘块号:

编者注(易错点):考场上看到两个文件 inode 号相同时不要犯怵——这就是硬链接,不是题目印错。判断"是不是同一个文件",看 inode 号;判断"在哪个目录里能看到这个文件",看目录项的归属。

(3)打开 course1 需要读几个磁盘块

题目说 course 目录文件的内容已经在内存,意味着我们已经能直接看到 course1 这条目录项 → 拿到 course1 的索引节点号 10。但要真正读出 course1 的内容,还差两步:

  1. 读 inode:根据 inode 号 10 算出该 inode 所在的磁盘块,把这个磁盘块从磁盘读进内存 —— 第 1 个磁盘块
  2. 读数据:在 inode 里查到 course1 的数据存在 30 号磁盘块,再把 30 号块读进内存 —— 第 2 个磁盘块

所以一共要读 2 个磁盘块

编者注(易错点):很多同学少算"读 inode"这一步,直接答 1 个块。要记住:目录项里只有 inode 号,没有数据块号;想知道数据块号必须先读 inode。

(4)course2 长到 6 MB,要用到哪几级间接地址项

Step 1:6 MB 文件占多少个磁盘块?

磁盘块大小 4 KB,所以:

Step 2:算每一级间接地址能管多少个磁盘块

每个磁盘块 4 KB = 4096 B,每个地址项 4 B,所以每个"间接块"能装:

寻址级别能直接管理的磁盘块数累计可达
直接地址项(10 个)1010
一级间接地址项(1 个)102410 + 1024 = 1034
二级间接地址项(1 个)1024 × 1024 = 1 048 5761034 + 1 048 576 ≈ 1.05M
三级间接地址项(1 个)1024³ ≈ 10.7 亿远远超出

Step 3:把 1536 套进区间

也就是说,1536 个磁盘块"装不下"在直接 + 一级间接里(前者只能管 1034 个),但装得下在加上二级间接以后。

结论:存取 course2 需要用到 直接地址项一级间接地址项二级间接地址项不需要三级间接地址项。

编者注(易错点)

  • 不要漏算"直接地址项"——只要文件大小 > 0,前 10 块一定先用直接地址项填,下一级才接力。题目问"用到哪几级"时,直接地址项也算一级,不能漏。
  • 不要把"够装下"等同于"刚好用完"——虽然 1536 < 1 049 610 远没填满二级间接的容量,但只要超过了一级的上限,二级就必须启用。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数