【软考备考】文件管理详解:i-node 混合索引与位示图,操作系统收官篇(附 10 道练习)
操作系统最后一篇,讲文件管理。这块上午题的计算点就两个,但都是"会者一分钟、不会者瞪半天"的典型:
索引节点(i-node):直接索引、一级间接、二级间接,算单个文件最大长度,或反推"第 N 个字节走哪级索引";
位示图:一个比特管一个磁盘块,算块号对应的"第几字第几位"。
一、文件怎么存?从"数组"到"目录页"
文件存在磁盘上,最简单的办法是连续分配:一个文件占一串连续的块。像数组——访问快,但用久了磁盘全是碎片,文件想变大还得看后面有没有地方。
更好的办法是索引分配:文件的数据块随便放,另建一张"块号清单"记录它们的位置。这就像书的目录页——正文(数据块)顺序无所谓,目录(索引)告诉你要的内容在第几页。想看文件第 100 块,查清单第 100 项,直接定位,随机访问飞快。
这张清单连同文件的属性(大小、权限、时间……)合在一起,就是索引节点 i-node:每个文件一个 i-node,相当于文件的"身份证 + 藏宝图"。
二、混合索引结构:小文件走近路,大文件走远路
问题来了:清单(地址项)放在 i-node 里,i-node 大小有限,地址项也就那么几个。文件小还好,文件要是几十万块,几个地址项哪够?
解决方案是混合索引——i-node 里的地址项分三种角色:
i-node: ┌────────────┐ │ 文件属性 │ ├────────────┤ │ 直接[0] ───┼──→ 数据块 (指哪是哪) │ 直接[1] ───┼──→ 数据块 │ …… │ │ 一级间接 ───┼──→ 索引块 ──→ 一批数据块 (拐一道弯) │ 二级间接 ───┼──→ 索引块 ──→ 一批索引块 ──→ 一大批数据块(拐两道弯) └────────────┘直接索引:地址项直接指向数据块,指哪是哪;
一级间接:地址项指向一个索引块,索引块里装满数据块地址——一个地址项撬动几百个块;
二级间接:再拐一道弯,索引块指向一批索引块——撬动平方级数量。
计算的命门只有一个数字:一个索引块能装多少个地址?
每块地址数 = 块大小 ÷ 地址长度
例:块 1KB(1024B)、地址占 4B → 1024 ÷ 4 =256 个地址/块。
例题(真题风格):i-node 有 5 个直接地址项、1 个一级间接项、1 个二级间接项,块 1KB、地址 4B,求单个文件最大长度。
直接索引:5 块 → 5 KB 一级间接:256 块 → 256 KB 二级间接:256 × 256 = 65536 块 → 65536 KB = 64 MB ───────────────────────────────── 合计:5 + 256 + 65536 = 65797 块 = 65797 KB ≈ 64.26 MB看出来了吗?二级间接是绝对主力,直接索引那 5 块只是零头——但考试最爱在零头上挖坑(见练习题第 8 题)。
三、反向题:第 N 个字节,走哪级索引?
正着会算,反着也要会查。套路三步:
逻辑块号 = 文件偏移 ÷ 块大小(整除);
算出各级索引的覆盖范围;
对号入座。
沿用上例(5 直接 + 1 一级 + 1 二级,块 1KB):
直接索引覆盖:块 0 ~ 4 (5 块) 一级间接覆盖:块 5 ~ 260 (256 块) 二级间接覆盖:块 261 ~ 65796 (65536 块)例:访问文件偏移300KB处的内容。逻辑块号 = 300KB ÷ 1KB =300。300 超出了一级间接的 260 上限 → 走二级间接。
四、位示图:一个比特管一块
管理磁盘空闲块的极简方案:拿一串二进制位,每位对应一个磁盘块,比如 0 表示空闲、1 表示占用(具体约定看题目)。这串位就是位示图,存放在若干个"字"里。
两个方向的换算(设字长 w,字号、位号、块号均从 0 开始):
块号 → 位置:字号 = 块号 ÷ w(整除),位号 = 块号 mod w 位置 → 块号:块号 = 字号 × w + 位号 位示图大小 = 总块数 ÷ w(向上取整)字例:字长 16 位,块号 53 → 53 ÷ 16 = 3 余 5 →第 3 字第 5 位。
唯一的坑:编号从 0 还是从 1 开始,直接决定答案。软考真题多为从 0 开始,但题目怎么约定就怎么算,审题时先把这三个编号的起点圈出来。
五、10 道练习题
基础题(1~5)
1.索引节点(i-node)中存放的是( )。
A. 文件内容本身 B. 用户的登录口令 C. 进程的运行信息 D. 文件的属性及数据块地址等元数据
2.某文件系统的 i-node 中有 8 个直接地址项,磁盘块大小为 1KB,仅通过直接索引可表示的文件最大长度为( )。
A. 8KB B. 1KB C. 64KB D. 8MB
3.磁盘块大小为 1KB,每个块地址占 4B,则一个索引块可存放的块地址数量为( )。
A. 512 B. 1024 C. 256 D. 4
4.位示图在文件系统中的作用是( )。
A. 记录文件内容 B. 管理磁盘空闲块,每一位对应一个磁盘块 C. 保存文件属性 D. 加快目录检索
5.某磁盘共有 8192 个盘块,采用位示图管理,字长 32 位,则位示图需要占用( )个字。
A. 256 B. 8192 C. 32 D. 512
进阶题(6~10,带坑)
6.块大小 1KB、块地址占 4B,i-node 中有 1 个一级间接地址项,通过它可索引的文件长度为( )。
A. 1KB B. 256KB C. 64MB D. 4KB
7.同上题条件,i-node 中有 1 个二级间接地址项,通过它可索引的文件长度为( )。
A. 256KB B. 512KB C. 16MB D. 64MB
8.某 i-node 有 5 个直接地址项、1 个一级间接项、1 个二级间接项,块大小 1KB、地址占 4B,则单个文件的最大长度为( )。
A. 65797KB B. 64MB C. 65792KB D. 256KB
9.同上题的 i-node 结构,要访问文件偏移 300KB 处的内容,应通过( )。
A. 直接索引 B. 一级间接索引 C. 二级间接索引 D. 无法访问
10.某系统用位示图管理磁盘块,字长 16 位,字号、位号、块号均从 0 开始编号,则块号 53 对应位示图的( )。
A. 第 5 字第 3 位 B. 第 4 字第 6 位 C. 第 3 字第 5 位 D. 第 3 字第 4 位
六、答案与详解
1. Di-node = 文件的"身份证 + 藏宝图":属性 + 数据块地址(元数据)。文件内容在数据块里,不在 i-node 里——选 A 的是把"图"和"宝"搞混了。
2. A直接索引一项一块:8 × 1KB =8KB。
3. C命门公式:1024 ÷ 4 =256 个地址/块。这个数字是后三题的全部基础。
4. B位示图管的是磁盘空闲块,一位一块。和 i-node 分工不同:i-node 管"这个文件的块在哪",位示图管"哪些块还空着"。
5. A8192 ÷ 32 =256 字。整除正好,不用向上取整。
6. B一级间接:一个索引块装 256 个地址 → 256 块 × 1KB =256KB。
7. D二级间接:256 个地址各指一个索引块,每个索引块再装 256 个地址 → 256² = 65536 块 = 65536KB =64MB。注意是"平方",不是"乘 2"——选 B(512KB)的就是错算成 256×2。
8. A本题大坑:5 + 256 + 65536 = 65797 块 =65797KB。选 C(65792KB)的把直接索引那 5 块漏了——平时说"约 64MB"可以,精确计算零头必须加上;选 B 的只算了二级间接。
9. C三步走:逻辑块号 = 300KB ÷ 1KB =300;直接覆盖 0~4,一级覆盖 5~260;300 > 260 →二级间接。坑:选 B 的只记得"一级间接能管 256 块",忘了它的起点是第 5 块——覆盖范围是 5~260,不是 0~255。
10. C53 ÷ 16 = 3 余 5 →第 3 字第 5 位。选 D 的是按"从 1 开始编号"的思维把余数减了 1——本题明确从 0 开始,审题先圈编号起点,从 0 还是从 1,一字之差答案全变。
七、五句话带走
i-node = 属性 + 块地址清单;索引分配就像书的目录页;
命门数字:每块地址数 = 块大小 ÷ 地址长度(常考 256);
直接 n 块、一级 256 块、二级 256² 块;最大长度别漏直接索引的零头;
反向定位:偏移 ÷ 块大小 = 逻辑块号,注意各级覆盖范围的起点;
位示图:字号 = 块号 ÷ 字长,位号 = 块号 mod 字长;先圈编号起点(0 还是 1)。
至此,操作系统高频考点全部通关:PV 操作、死锁、存储管理、文件管理。加上之前的计算机组成原理六篇,上午题最硬的两大模块已经拿下。
下一篇预告:开进新大陆——数据库。三级模式两级映像、ER 图转关系模式、关系代数的并交差笛卡尔积、以及下午题年年见的范式判断(1NF/2NF/3NF/BCNF)。数据库是上午+下午两头都考的大户,值得好好打。
