六、文件管理(第69-78题)
第69题
下列关于流式文件与记录式文件的叙述中,正确的是( )。
A. 流式文件是字符流序列,无内部结构,记录式文件由若干逻辑记录组成 B. 流式文件必须按记录存取,记录式文件只能按字符存取 C. 流式文件只适用于磁盘,记录式文件只适用于磁带 D. 流式文件的长度固定不变,记录式文件的长度可以任意变化
答案:A
考点定位:六、文件管理——文件的逻辑结构(流式文件与记录式文件),难度★☆☆☆☆,是文件概念部分的基础送分点,国企笔试反复考查。
【结论】 选A。流式文件是无内部结构的字符流序列;记录式文件由若干逻辑记录组成,每个记录有独立标识。
【逐项辨析】
- A 正确——准确给出两类文件的本质特征:流式文件无内部结构,记录式文件由逻辑记录组成。
- B 错误——恰好颠倒:流式文件不划分记录,适合按字符流存取;记录式文件按记录存取,不是按字符。
- C 错误——逻辑结构与存储设备无关,两类文件都可存放在磁盘、磁带等任何介质上。
- D 错误——两类文件的长度都可随内容增减而变化,长度固定不是区分标准。
【知识点】 文件的逻辑结构指用户视角下文件的组织形式,与物理存储无关:
| 特征 | 流式文件(无结构文件) | 记录式文件(有结构文件) |
|---|---|---|
| 内部结构 | 无,视为连续字符流 | 由若干逻辑记录组成 |
| 记录标识 | 无 | 有(记录号或关键字) |
| 存取单位 | 字节或字符 | 记录 |
| 典型应用 | 文本文件、源程序、可执行文件 | 数据库文件、信息管理系统 |
| 灵活性 | 高,可任意读写任意长度 | 按记录处理,便于检索 |
| 系统支持 | Unix/Linux等多数通用系统 | 早期OS/360,数据库系统 |
流式文件管理简单、灵活,是现代通用系统的主流形式;记录式文件便于按记录进行增删改查,常见于数据库与事务处理系统。
【推导过程】 两类文件的用户视图对比:
流式文件(如hello.c):
-----------------
#include <stdio.h>
int main() {
printf("hello");
return 0;
}
-----------------
用户眼中: 连续的字节流,无记录边界。
记录式文件(如学生表.stu):
-----------------
| 记录号 | 学号 | 姓名 | 成绩 |
| 1 | 001 | 张三 | 85 |
| 2 | 002 | 李四 | 90 |
| 3 | 003 | 王五 | 78 |
-----------------
用户眼中: 由3条定长记录组成,可按记录号直接定位第2条记录。【记忆锚点】 口诀——“流式无结构像水流,记录有结构像表格”。
【易混对比】
| 对比维度 | 逻辑结构 | 物理结构 |
|---|---|---|
| 定义 | 用户眼中的文件组织 | 磁盘上的实际存放方式 |
| 关注点 | 数据如何组织 | 数据如何存储 |
| 典型类型 | 流式、记录式 | 连续、链接、索引 |
| 是否独立于设备 | 是 | 否(与磁盘块大小相关) |
换个问法:“数据库文件通常采用什么逻辑结构?”——采用记录式文件结构,因为数据库天然以记录(行)为单位组织数据。与第70题(文件物理结构)连考——第69题是“用户怎么看”,第70题是“磁盘怎么存”。
【自测】 某工资管理系统中,职工工资文件每条记录包含职工号、姓名、基本工资、奖金,记录长度为128字节。该文件属于什么逻辑结构?若用文本编辑器打开看到一串连续字符,又属于什么逻辑结构?
答:工资文件在系统中是记录式文件(有结构,按记录处理);用文本编辑器打开时,编辑器将其视为流式文件(无结构字符流)。同一文件可被不同程序以不同逻辑结构看待。〈出处:大厂面试高频〉
【易错提醒】 ①不要把逻辑结构与物理结构混为一谈,逻辑结构是用户视角,物理结构是磁盘存放方式。②记录式文件的关键特征是“有逻辑记录”,不是“记录长度固定”,变长记录同样属于记录式。③源程序文件、文本文件是典型流式文件,数据库文件是典型记录式文件,记住例子即可快速判断。
【知识关联】 本题考点:文件系统。与第 69–78 题;面试:硬链接 vs 软链接(见补题)。
【拓展延伸】 变式:unlink 后文件还能读吗?(fd 仍打开则可以)。(本题答案 A,以题干选项为准)
第70题
下列关于连续分配、链接分配与索引分配对随机访问支持的叙述中,正确的是( )。
A. 连续分配支持随机访问,链接分配也天然支持随机访问 B. 索引分配因为需要读索引块,所以完全不支持随机访问 C. 连续分配支持随机访问,链接分配一般只适合顺序访问,索引分配支持随机访问 D. 三种分配方式都只能顺序访问,随机访问必须依靠索引顺序文件实现
答案:C
考点定位:六、文件管理——文件的物理结构(连续分配、链接分配、索引分配),难度★★☆☆☆,是互联网笔试与国企笔试反复出现的对比型考点。
【结论】 选C。连续分配支持随机访问;链接分配必须沿指针顺序查找,一般只适合顺序访问;索引分配通过查索引表直接定位物理块,支持随机访问。
【逐项辨析】
- A 错误——连续分配确实支持随机访问,但链接分配必须沿指针逐块遍历,不能天然支持随机访问。
- B 错误——索引分配查一次索引表即可获得物理块号,恰恰是支持随机访问的典型方式,“完全不支持”属于全称式错误。
- C 正确——三种分配方式在随机访问支持上的结论与实际完全一致。
- D 错误——连续分配与索引分配都支持随机访问,并非只能顺序访问。
【知识点】 文件的物理结构指文件在外存上的实际存放方式,三种基本方式特点如下:
| 特性 | 连续分配 | 链接分配 | 索引分配 |
|---|---|---|---|
| 存储方式 | 相邻物理块连续存放 | 离散存放,块间用指针链接 | 离散存放,索引块记录块号映射 |
| 随机访问 | 支持(起始块号+偏移直接计算) | 不支持(需顺序沿链查找) | 支持(查索引表得物理块号) |
| 顺序访问 | 支持 | 支持 | 支持 |
| 动态增长 | 困难(需连续空间) | 容易(动态链接新块) | 容易(动态扩展索引表) |
| 外部碎片 | 有 | 无 | 无 |
| 空间开销 | 低(只需起始块号和长度) | 低(每块留指针空间) | 中(需额外索引块) |
| 可靠性 | 高 | 低(指针损坏则链断) | 中(索引块损坏则全丢) |
连续分配适合长度固定、只读的文件;链接分配适合顺序处理的大文件;索引分配兼顾随机访问与动态增长,是现代文件系统(如Unix inode)的主流方案。
【推导过程】 假设文件占5个逻辑块(0~4),分别用三种方式存放,对比访问逻辑块3的过程:
连续分配:
起始块号=10,块数=5
逻辑块3 -> 物理块 = 10 + 3 = 13
直接定位,1次磁盘I/O。
链接分配:
首块=20,每块末尾存下一块指针
20 -> 35 -> 8 -> 12 -> 47
逻辑块3 -> 从20出发,沿链走3步到12
需4次磁盘I/O(读20、35、8、12)。
索引分配:
索引块=60,内容:[90, 15, 77, 22, 50]
逻辑块3 -> 查索引块第4项(从0计) -> 物理块22
需2次磁盘I/O(读索引块+读数据块)。【记忆锚点】 口诀——“连续可随机,链接只能顺,索引可随机”。
【易混对比】
| 概念 | 逻辑结构 | 物理结构 |
|---|---|---|
| 视角 | 用户视角 | 系统视角(磁盘层面) |
| 问题 | 数据如何组织 | 数据如何存放 |
| 是否可独立选择 | 是 | 是 |
| 组合示例 | 流式文件 + 索引分配 = 常见文本文件 | 记录式文件 + 连续分配 = 数据库表(早期) |
换个问法:“Unix文件系统的inode属于哪种物理结构?”——属于索引分配的变体(多级索引),直接块支持小文件快速访问,间接块支持大文件。与第69题(文件逻辑结构)连考——第69题回答“用户怎么看”,第70题回答“磁盘怎么存”,两者共同决定文件的完整形态。
【自测】 某文件系统采用链接分配,每个磁盘块大小为1KB,其中4字节用于存储指针。若一个文件大小为4092字节,请问该文件需要占用多少个磁盘块?若改为索引分配(索引项4字节),又需要多少个磁盘块(含索引块)?
答:链接分配时,每块可用数据 = 1024 - 4 = 1020字节。4092 ÷ 1020 = 4.01…,并不整除:4 个满块只能存 1020 × 4 = 4080 字节 < 4092,余下 12 字节还要占 1 块,故需 5 个数据块。索引分配时,数据块数 = ceil(4092 / 1024) = 4块,再加 1 个索引块,共 5 个块。〈出处:408真题同型题〉
【易错提醒】 ①记忆口诀:连续可随机、链接只能顺、索引可随机。②链接分配的缺点是随机访问性能差且指针占空间,不是“不能存储大文件”。③索引分配多一次读索引块的开销,但这是额外时间代价,不等于不支持随机访问。
【知识关联】 本题考点:文件系统。与第 69–78 题;面试:硬链接 vs 软链接(见补题)。
【拓展延伸】 变式:unlink 后文件还能读吗?(fd 仍打开则可以)。(本题答案 C,以题干选项为准)
第71题
下列关于 Unix 文件系统 inode 中索引结构的叙述中,正确的是( )。
A. Unix 的 inode 中只保存直接指针,不支持间接指针,因此单文件大小受限 B. Unix 的 inode 通常含多个直接指针和一级、二级、三级间接指针,小块文件用直接指针访问最快 C. Unix 的 inode 中的间接指针指向的是数据块,直接指针指向的是索引块 D. Unix 的 inode 必须为每个文件预留全部间接指针所覆盖的磁盘块,否则无法访问
答案:B
考点定位:六、文件管理——多级(混合)索引结构与Unix inode,难度★★☆☆☆,是互联网笔试高频的索引结构考点,国企笔试中多以概念判断形式出现。
【结论】 Unix inode 采用直接指针+多级间接指针的混合索引结构,选 B。小文件用直接指针访问无需跳转索引块,速度最快;大文件按需启用间接指针,兼顾容量与效率。
【逐项辨析】
- A 错误——inode 并非“只保存直接指针”,恰恰相反,正是通过引入一级、二级、三级间接指针才突破单文件大小限制。
- B 正确——12 个直接指针加一/二/三级间接指针是 Unix 经典设计,直接指针跳过索引块直接定位数据块,小文件访问最快。
- C 错误——指向关系完全说反:直接指针指向数据块,间接指针指向索引块(索引块中再存放指针表)。
- D 错误——间接指针采用按需分配,文件未增长到对应大小时不会预分配索引块,更不会预留全部空间。
【知识点】 inode 混合索引结构将文件控制块中的地址项分为两类:
| 指针类型 | 指向对象 | 适用场景 | 访问开销 |
|---|---|---|---|
| 直接指针(如 12 个) | 数据块 | 小文件的前 12 块 | 最低,无需索引块 |
| 一级间接指针 | 索引块(块内为数据块指针表) | 中等文件 | 读 1 次索引块 |
| 二级间接指针 | 索引块(块内为一级索引块指针表) | 大文件 | 读 2 次索引块 |
| 三级间接指针 | 索引块(块内为二级索引块指针表) | 超大文件 | 读 3 次索引块 |
若磁盘块大小为 4 KB,每个块号占 4 B,则一个索引块可容纳 1024 个指针。直接指针可寻址 12 x 4 KB = 48 KB;一级间接可额外寻址 1024 x 4 KB = 4 MB;二级间接可额外寻址 1024² x 4 KB = 4 GB;三级间接可达 1024³ x 4 KB = 4 TB。
【推导过程】 inode 多级索引结构示意(以 12 直接 + 1 一级 + 1 二级 + 1 三级为例):
+------------------+
| inode |
| +------------+ |
| | 直接指针 0 |-----> [数据块 0]
| | ... | |
| | 直接指针11 |-----> [数据块 11]
| +------------+ |
| | 一级间接 |-----> [索引块 A]
| | (指针) | | 0..1023 |
| +------------+ +--> [数据块 12..1035]
| | 二级间接 |-----> [索引块 B]
| | (指针) | | 0..1023 |
| +------------+ +--> [索引块 B0..B1023]
| | 三级间接 | +--> [数据块 ...]
| | (指针) |
+--+------------+--+【记忆锚点】 口诀——“直接最快不跳转,一级二级按需上,三级兜底容量大,小文件快大文件扛”。
【易混对比】
| 对比维度 | inode 多级索引 | 多级目录结构 |
|---|---|---|
| 作用对象 | 单个文件的数据块寻址 | 多个文件的命名组织 |
| 树形含义 | 索引块指向数据块或下一级索引块 | 目录项指向子目录或文件 |
| 是否解决重名 | 否 | 是,不同目录下可同名 |
换个问法:“若某系统 inode 含 10 个直接指针、1 个一级间接、1 个二级间接,块大小 1 KB,块号 2 B,求最大文件长度?”——答:直接 10 KB + 一级 512 KB + 二级 256 MB。
【自测】 某文件系统 inode 设 10 个直接指针、1 个一级间接、1 个二级间接,块大小 4 KB,每个指针 4 B。文件大小为 40 KB 时需要几次磁盘 I/O 才能读完全部数据(假设 inode 已在内存)?
答:10 次。40 KB 恰好占 10 个数据块,全部落在直接指针范围内,无需读取索引块,每块 1 次 I/O 共 10 次。〈出处:408 真题同型题〉
【易错提醒】 ①直接指针指向数据块,间接指针指向索引块,这是最容易搞反的一点。②多级索引的意义在于用少量指针项支撑很大的文件,不要与“多级目录”混淆。③本考点只需记住结构与“直接指针最快”的结论,不要求计算最大文件长度。
【知识关联】 本题考点:文件系统。与第 69–78 题;面试:硬链接 vs 软链接(见补题)。
- 连考提示:与第 72 题(树形目录结构)连考 —— inode 管数据块寻址、目录树管命名组织,两者最容易被混着考。
【拓展延伸】 变式:unlink 后文件还能读吗?(fd 仍打开则可以)。(本题答案 B,以题干选项为准)
第72题
下列关于文件控制块(FCB)与树形目录结构的叙述中,正确的是( )。
A. 一个 FCB 中只存放文件名,文件的属性与物理位置由目录项另外保存 B. 树形目录结构中,一个文件可以同时属于多个父目录,且不需要额外机制 C. FCB 用于描述和控制文件,树形目录结构便于分类管理与解决重名问题 D. 树形目录结构不允许用户建立子目录,因此只适用于单用户系统
答案:C
考点定位:六、文件管理——文件目录与 FCB、树形目录结构,难度★☆☆☆☆,是国企笔试与互联网笔试中文件目录部分的必考基础点。
【结论】 FCB 是描述和控制文件的完整数据结构,树形目录结构便于分类管理并解决重名问题,选 C。
【逐项辨析】
- A 错误——FCB 不是“只存放文件名”,而是包含文件名、物理位置、逻辑结构、物理结构、存取权限、建立时间、文件长度等完整属性的“档案袋”。
- B 错误——树形目录中一个文件通常只有一个父目录;若要同时属于多个父目录,需要硬链接等特殊机制且必须维护链接计数,并非“不需要额外机制”。
- C 正确——FCB 的功能定义与树形目录的两大核心优点(分类管理、解决重名)表述准确。
- D 错误——树形目录恰恰支持任意层级子目录,且广泛用于多用户分时系统,与“单用户”无关。
【知识点】 文件控制块(FCB)是操作系统为每个文件建立的数据结构,用于描述和控制文件。若干 FCB 的集合构成文件目录,目录本身也是一种特殊文件。树形目录结构将目录组织成层次树:
| 目录结构类型 | 特点 | 重名支持 | 适用场景 |
|---|---|---|---|
| 单级目录 | 所有文件放在同一目录 | 不支持 | 早期单用户系统 |
| 两级目录 | 主文件目录 + 用户文件目录 | 用户间可重名 | 多用户分时系统 |
| 树形目录 | 根目录下可建多级子目录 | 不同路径下可重名 | 现代通用操作系统 |
| 无环图目录 | 树形基础上增加共享边(硬链接) | 支持 | 需文件共享的系统 |
【推导过程】 树形目录结构示意:
/ (根目录)
|
+-------------+-------------+
| | |
bin/ home/ etc/
| |
| +-----+-----+
| | |
ls userA/ userB/
| |
+---+---+ +---+
| | |
doc/ src/ data/
| | |
a.txt main.c log.txt上图中的 a.txt 与 log.txt 可以同名,因为路径分别为 /home/userA/doc/a.txt 与 /home/userB/data/log.txt,树形结构通过路径隔离消除了命名冲突。
【记忆锚点】 FCB 是“档案袋”——“名位权时长,逻辑物理两结构”(文件名、物理位置、权限、建立时间、文件长度、逻辑结构、物理结构)。树形目录记“层次清、重名行、权限分级管得明”。
【易混对比】
| 对比维度 | FCB | 目录项 | 索引节点(inode) |
|---|---|---|---|
| 本质 | 文件的控制结构 | 目录文件中的一条记录 | 文件属性与地址的集中存放区 |
| 内容 | 文件名+属性+物理地址 | 文件名+指向 FCB/inode 的指针 | 除文件名外的全部属性+块指针 |
| 存在位置 | 早期 FAT 直接存于目录项 | 目录文件中 | 磁盘 inode 区 |
换个问法:“树形目录中如何解决不同用户对同一文件的命名冲突?”——答:将文件放在不同用户的子目录下,利用路径唯一性区分。
【自测】 在树形目录结构中,文件 /home/Alice/report.txt 与 /home/Bob/report.txt 能否同时存在?为什么?
答:能。二者的绝对路径不同,树形目录允许不同目录下的文件重名,路径是文件的唯一标识。〈出处:国网真题库同型题〉
【易错提醒】 ①FCB 是“文件的档案袋”,记住它至少含文件名、物理位置、属性三类信息。②树形目录的最大优点一是层次清晰便于分类,二是允许不同目录下文件重名。③目录项与 FCB 是同一层次的概念,目录文件中每一项就是一个 FCB。
【知识关联】 本题考点:文件系统。与第 69–78 题;面试:硬链接 vs 软链接(见补题)。
- 连考提示:与第 73 题(绝对/相对路径)连考 —— 路径解析的前提正是目录项指向 FCB/inode。
【拓展延伸】 变式:unlink 后文件还能读吗?(fd 仍打开则可以)。(本题答案 C,以题干选项为准)
第73题
下列关于绝对路径与相对路径的叙述中,正确的是( )。
A. 绝对路径一定比相对路径短,因此访问速度更快 B. 相对路径必须从根目录开始书写,否则系统无法解析 C. 绝对路径与相对路径都可以包含通配符,且通配符只能出现在路径末尾 D. 绝对路径从根目录出发,相对路径从当前目录出发,相对路径依赖当前工作目录
答案:D
考点定位:六、文件管理——绝对路径与相对路径,难度★☆☆☆☆,是国企笔试中考查目录操作与命令使用的高频基础点。
【结论】 绝对路径从根目录出发,相对路径从当前目录出发,相对路径的解析结果随当前工作目录变化,选 D。
【逐项辨析】
- A 错误——路径长短取决于目录层次深浅,与“绝对/相对”无必然关系;且路径长短主要影响书写,并非决定磁盘访问速度的关键因素。
- B 错误——“从根目录开始书写”恰恰是绝对路径的定义,相对路径不以根目录开头,而是基于当前目录推导。
- C 错误——通配符是否可用取决于具体命令(shell)与系统实现,且通配符位置不限于末尾,如
/usr/*/bin中星号出现在中间目录名处。 - D 正确——准确界定了两类路径的起点差异,并指出相对路径对当前工作目录的依赖性。
【知识点】 文件路径是操作系统定位文件的字符串描述:
| 路径类型 | 起点 | 格式示例 | 是否依赖当前目录 | 适用场景 |
|---|---|---|---|---|
| 绝对路径 | 根目录 / | /usr/lib/test.c | 否,位置唯一确定 | 脚本、系统配置 |
| 相对路径 | 当前工作目录 | ./lib/test.c | 是,切换目录后可能失效 | 项目内部引用、移植 |
| 相对路径(上级) | 当前目录的父目录 | ../bin/ls | 是 | 跨目录引用 |
【推导过程】 假设当前工作目录为 /home/Alice,分析同一相对路径在不同当前目录下的解析结果:
当前目录: /home/Alice
相对路径: ../Bob/data.txt
解析结果: /home/Bob/data.txt
当前目录切换为: /home/Alice/doc
同一相对路径: ../Bob/data.txt
解析结果变为: /home/Alice/Bob/data.txt (若存在)
或解析失败(若目录不存在)由此可见,相对路径的语义与当前工作目录强绑定,程序中若发生 chdir() 操作,相对路径可能瞬间失效。
【记忆锚点】 口诀——“绝对根出发,不变最可靠;相对看当前,灵活怕跳槽”(“跳槽”指切换工作目录)。. 是当前,.. 是上级,/ 开头是绝对。
【易混对比】
| 对比维度 | 绝对路径 | 相对路径 |
|---|---|---|
| 书写长度 | 通常较长 | 通常较短 |
| 可移植性 | 目录整体迁移后可能失效 | 项目内部相对位置不变则仍有效 |
| 安全性 | 定位明确,不受环境影响 | 依赖当前目录,易被劫持 |
换个问法:“shell 脚本中先执行 cd /tmp,再执行 cat ./config,会打开哪个文件?”——答:/tmp/config,因为 ./ 始终解析为当前工作目录下的文件,当前目录已变为 /tmp。
【自测】 某进程当前工作目录为 /home/user/project,执行 open(“../config.ini”, O_RDONLY) 时,系统实际打开的文件绝对路径是什么?
答:
/home/user/config.ini。..表示上一级目录,即从/home/user/project回退到/home/user,再拼接config.ini。〈出处:大厂面试高频〉
【易错提醒】 ①判断相对路径的关键是“当前工作目录是什么”,换目录后同一相对路径可能失效。②“.”表示当前目录,“..”表示上一级目录,这是相对路径书写的常用记号。③脚本中若可能切换目录,用绝对路径更稳妥。
【知识关联】 本题考点:绝对路径(从根出发)与相对路径(从当前工作目录出发)。同库题群:第69–78题(文件与目录)、第89题(Linux 目录/文件命令);补题相关:补-10(硬/软链接与路径解析)、补-03(FIFO 路径 open)。面试:cd 之后相对路径如何解析?软链接相对谁?
- 连考提示:与第 72 题(树形目录结构)连考 —— 相对路径随当前工作目录变化,树形目录是它成立的基础。
【拓展延伸】 变式:给 cwd 与相对路径写出绝对路径;路径中 .. 与 . 的语义。Linux:pwd、realpath、readlink -f 解析路径;脚本中慎用未定义 cwd 的相对路径。(本题答案 D,以题干选项为准)
第74题
下列关于硬链接与软链接(符号链接)的叙述中,正确的是( )。
A. 硬链接指向的是路径名,软链接指向的是索引节点,所以删除原文件后硬链接失效 B. 硬链接与原文件共享同一索引节点,删除原文件后硬链接仍可访问,软链接保存的是路径名 C. 硬链接可以跨文件系统建立,而软链接不能跨文件系统建立 D. 删除原文件后,硬链接与软链接都会立即失效,二者的区别仅在于占用空间不同
答案:B
考点定位:六、文件管理——硬链接与软链接(符号链接)的区别,难度★★☆☆☆,是互联网笔试与国企笔试中文件系统部分反复出现的对比考点。
【结论】 硬链接与原文件共享同一 inode,删除原文件后硬链接仍可正常访问;软链接是独立文件,其内容为目标文件路径名,选 B。
【逐项辨析】
- A 错误——关系完全颠倒:硬链接共享的是索引节点(inode),软链接保存的才是路径名;删除原文件后硬链接不会失效。
- B 正确——准确概括了硬链接共享 inode(链接计数机制)与软链接保存路径名这两个本质差异。
- C 错误——跨文件系统恰恰是硬链接的限制(inode 号只在同一文件系统内唯一),软链接因保存路径字符串反而可以跨文件系统。
- D 错误——删除原文件后硬链接通常仍有效(链接计数 > 0 时),只有软链接会因目标消失而成为悬空链接,二者区别绝非“仅占用空间不同”。
【知识点】 硬链接与软链接的实现机制:
| 特性 | 硬链接(Hard Link) | 软链接/符号链接(Symbolic Link) |
|---|---|---|
| 本质 | 同一 inode 的额外目录项 | 独立文件,内容为目标路径字符串 |
| inode 关系 | 与原文件共享 inode | 拥有独立 inode |
| 链接计数 | inode 中 link_count 加 1 | 无链接计数概念 |
| 跨文件系统 | 不可(inode 号局内唯一) | 可以(保存路径字符串) |
| 能否链接目录 | 通常禁止(防止环) | 可以 |
| 删除原文件后 | 只要计数 > 0 仍可访问 | 变为悬空链接,访问报错 |
| 占用空间 | 仅多一个目录项 | 需额外 inode 与数据块存路径 |
【推导过程】 inode 指向关系与删除后的表现对比:
创建硬链接前:
目录A inode#100 数据块
[foo] -----> (link_count=1) --> [Hello]
执行 ln foo bar 后(硬链接):
目录A inode#100 数据块
[foo] -----> (link_count=2) --> [Hello]
[bar] ------^
删除 foo 后:
目录A inode#100 数据块
[bar] -----> (link_count=1) --> [Hello] (仍可读!)
-----------------------------------------------
创建软链接:
目录A inode#100 数据块
[foo] -----> (link_count=1) --> [Hello]
目录A inode#101 数据块
[baz] -----> (独立文件) --> "/path/to/foo"
删除 foo 后:
目录A inode#100 数据块
(已释放,数据可能仍在)
目录A inode#101 数据块
[baz] -----> (悬空) --> "/path/to/foo" (路径已失效!)删除后表现对比表:
| 操作 | 硬链接表现 | 软链接表现 |
|---|---|---|
| 删除原文件 | 仍能访问,链接计数减 1 | 路径指向消失,访问报错(“No such file or directory”) |
| 删除链接本身 | 链接计数减 1,数据不受影响 | 仅删除软链接文件,原文件不受影响 |
| 移动原文件 | 无影响( inode 不变) | 可能失效(若使用相对路径且目录改变) |
【记忆锚点】 口诀——“硬链同 inode 不同名,删原不影响计数撑;软链存路径各独立,原删悬空报不行”。
【易混对比】
| 对比维度 | 硬链接 vs 软链接 | inode 多级索引 |
|---|---|---|
| 核心作用 | 文件共享与多命名 | 文件数据块寻址 |
| 是否产生新 inode | 硬链接不产生,软链接产生 | 不涉及 |
换个问法:“执行 ln a b 与 ln -s a b 后,ls -li 显示的 inode 号有何不同?”——答:ln a b 后 a 与 b inode 号相同;ln -s a b 后 b 拥有新的独立 inode 号。
【自测】 某文件 file.txt 的 inode 链接计数为 3,分别对应原文件名和两个硬链接。若先删除原文件名,再删除其中一个硬链接,此时还能否通过剩余的硬链接访问文件内容?
答:能。删除原文件名后链接计数由 3 减为 2;再删除一个硬链接后计数由 2 减为 1。只要链接计数不为 0,inode 与数据块就不会被释放,仍可通过最后一个硬链接访问。〈出处:408 真题同型题〉
【易错提醒】 ①一句话区分:硬链接是同一个 inode 的多个名字,软链接是一个保存路径名的独立文件。②硬链接计数减到 0 才真正删除数据块。③软链接可以是相对路径,也可以跨文件系统,但目标被删即失效。
【知识关联】 本题考点:文件系统。与第 69–78 题;面试:硬链接 vs 软链接(见补题)。
- 连考提示:与第 71 题(inode 多级索引)连考 —— 硬/软链接都建立在 inode 与目录项这套结构上;硬链接共用 inode、软链接另建 inode。
【拓展延伸】 变式:unlink 后文件还能读吗?(fd 仍打开则可以)。(本题答案 B,以题干选项为准)
第75题
操作系统执行“打开文件”操作时,主要完成的工作是( )。
A. 打开文件的主要工作是把整个文件内容从磁盘读入内存缓冲区 B. 打开文件的主要工作是按路径找到并检查 FCB,再将其读入内存建立打开文件表项 C. 打开文件的主要工作是为文件分配新的磁盘块并写入目录项 D. 打开文件的主要工作是对文件内容进行加锁,防止其他进程读取
答案:B
考点定位:六、文件管理——打开文件(open)操作的主要工作,难度★☆☆☆☆,是国企笔试与互联网笔试中系统调用部分的高频送分点。
【结论】 open 的主要工作是按路径检索目录找到 FCB、做权限检查、将 FCB 复制到内存建立打开文件表项并返回文件描述符,选 B。
【逐项辨析】
- A 错误——“把整个文件内容从磁盘读入内存缓冲区”是 read 或预读机制的工作,open 不读取文件数据。
- B 正确——完整概括了路径检索、FCB 查找、权限检查、建立打开文件表项、返回文件描述符这一标准流程。
- C 错误——分配新磁盘块属于create/write 时的工作,打开已有文件不涉及空间分配。
- D 错误——加锁是文件共享控制中的可选机制(如
flock),不是 open 的固有职责。
【知识点】 open 系统调用的完整流程:
| 步骤 | 工作内容 | 涉及的数据结构 |
|---|---|---|
| 1. 路径解析 | 按路径名逐级检索目录 | 目录文件、目录项 |
| 2. 权限检查 | 核对用户身份与文件访问权限 | FCB 中的权限字段 |
| 3. 加载 FCB | 将磁盘 FCB 复制到内存 | 内存 inode/FCB 缓冲区 |
| 4. 建立表项 | 在系统打开文件表中登记 | 系统级打开文件表 |
| 5. 返回描述符 | 向进程返回文件描述符 fd | 进程级打开文件表(文件描述符表) |
打开文件表分为系统级(整个系统一张,记录文件被打开次数、当前读写指针等)与进程级(每个进程一张,记录 fd 到系统表项的映射)。close 时撤销进程级表项,系统级引用计数减为 0 时才将修改后的属性写回磁盘。
【推导过程】 open 操作流程图:
用户进程 操作系统内核
| |
|-- open("/a/b.txt") -->|
| | ① 路径解析: / -> a -> b.txt
| | ② 权限检查: UID/GID vs rwx
| | ③ 加载 FCB 到内存
| | ④ 系统打开文件表 +1
| | ⑤ 进程 fd 表分配最小空闲 fd
|<-- fd = 3 ----------|
| |
|-- read(fd, buf, n) ->| ⑥ 按需读数据块
| |
|-- close(fd) -------->| ⑦ 撤销表项,刷回属性【记忆锚点】 口诀——“open 建表不读数,read 才来搬数据;close 撤销写回盘,描述符是通行证”。
【易混对比】
| 对比维度 | open | create | read |
|---|---|---|---|
| 主要工作 | 检索 FCB,建表,返 fd | 分配 inode/FCB,分配磁盘块 | 按地址读数据块入内存 |
| 是否读数据 | 否 | 否 | 是 |
| 是否分配空间 | 否 | 是 | 否 |
换个问法:“同一个文件被两个进程同时 open,会共享打开文件表中的读写指针吗?”——答:不共享。两次 open 各自在系统打开文件表中新建一个表项,读写偏移记在各自表项里,两个进程各读各的、互不影响;只有经 fork 继承或由 dup/dup2 复制得到的描述符才指向同一表项、共享同一偏移。O_APPEND 与是否共享无关,它只决定每次 write 前是否先把偏移移到文件末尾。
【自测】 进程执行 fd = open(“data.txt”, O_RDONLY) 后,操作系统是否已将 data.txt 的全部内容加载到内存?
答:没有。open 仅完成目录检索、权限检查、建立打开文件表项并返回文件描述符,文件内容仍在磁盘上,只有在后续执行 read 时才会按需将对应数据块读入内存缓冲区。〈出处:大厂面试高频〉
【易错提醒】 ①open 建表、read 读数据,二者不要混淆。②打开文件表有系统级与进程级之分,系统级表被多个进程共享。③close 的作用是撤销打开文件表项,把修改过的属性写回磁盘。
【知识关联】 本题考点:文件系统。与第 69–78 题;面试:硬链接 vs 软链接(见补题)。
- 连考提示:与第 76 题(磁盘空闲空间管理)连考 —— open 做的是目录检索与建表,分配空闲块属下一层的事。
【拓展延伸】 变式:unlink 后文件还能读吗?(fd 仍打开则可以)。(本题答案 B,以题干选项为准)
第76题
下列关于磁盘空闲空间管理方法的叙述中,正确的是( )。
A. 位示图用一串二进制位表示磁盘块的使用情况,0 或 1 分别表示空闲或占用,便于查找连续空闲块 B. 空闲链把空闲块串成链表,因此查找连续空闲块的速度最快 C. 成组链接法把空闲块全部登记在内存中,因此不占用磁盘空间 D. 空闲表法必须与位示图配合使用,否则无法回收磁盘块
答案:A
考点定位:六、文件管理——磁盘空闲空间的管理方法(位示图、空闲链、成组链接、空闲表),难度★★☆☆☆,是国企笔试中存储管理部分较常考的概念题。
【结论】 位示图用二进制位映射磁盘块状态,便于快速查找连续空闲块,选 A。
【逐项辨析】
- A 正确——位示图的定义(一位对应一块,0/1 表示空闲/占用)与“便于查找连续空闲块”的优点均准确。
- B 错误——空闲链把空闲块用指针串成链表,需要沿链逐块遍历,查找连续空闲块的效率最低而非最快。
- C 错误——成组链接法仅在内存中保存当前一组空闲块的信息,其余分组信息存放在磁盘空闲块中,既占磁盘空间也占内存,并非“全部登记在内存”。
- D 错误——空闲表法可以独立使用,它为外存建立一张空闲表,每个表目记录起始块号与空闲块数,无需与位示图配合。
【知识点】 四种磁盘空闲空间管理方法对比:
| 方法 | 数据结构 | 分配方式 | 查找连续块 | 适用场景 |
|---|---|---|---|---|
| 空闲表法 | 空闲表(起始块号,块数) | 连续分配 | 较快 | 小容量、连续分配为主 |
| 空闲链表法 | 链表(块内指针指向下一空闲块) | 隐式链接 | 很慢 | 简单系统、教学演示 |
| 位示图法 | 位图(1 bit/块) | 离散或连续 | 快(可顺序扫描位) | 大容量、需快速分配 |
| 成组链接法 | 分组栈(内存存一组,块尾链下一组) | 离散 | 较快 | Unix 大型文件系统 |
位示图的核心优势在于位运算高效:将位号换算为盘块号的公式为 盘块号 = 字号 x 字长 + 位号;回收时只需将对应位清零。现代 CPU 支持字级位扫描指令(如 x86 的 BSF),可一次检测 32/64 个块的状态,查找连续空闲位的速度极快。
【推导过程】 位示图结构示意(假设字长 16 位,共 8 个字覆盖 128 个盘块):
字序号: 0 1 2 ...
MSB LSB MSB LSB
位示图: [1 0 1 1 0 0 1 1 ... 0 1] [0 0 1 0 1 1 0 0 ... 1 0] [...]
| | | | | | | | | | | |
块号: 0 2 3 5 6 15 16 18 19 21 22 31
状态: 1=已占用, 0=空闲
第 0 字中从 MSB 起:块 0 占用,块 1 空闲,块 2 占用,块 3 占用...
查找连续空闲块时,只需顺序扫描找到连续若干个 0 即可。成组链接法补充示意(Unix 风格):
内存中的空闲块栈(超级块):
+------------------+
| count = 100 | <- 本组空闲块数量
| free[0] = 305 | <- 可直接分配
| free[1] = 306 |
| ... |
| free[99] = 404 | <- 指向下一组索引块
+------------------+
块 404 的内容(下一组):
+------------------+
| count = 100 |
| free[0] = 405 |
| ... |
| free[99] = 504 | <- 再下一组
+------------------+【记忆锚点】 口诀——“空闲表记起始长,链表逐块慢断肠;位示图一扫光,成组链接 Unix 强”。
【易混对比】
| 对比维度 | 位示图 | 成组链接法 | 空闲链表法 |
|---|---|---|---|
| 空间开销 | 1 bit/块,极小 | 每组首块存链接,有额外开销 | 每块存指针,有额外开销 |
| 分配效率 | O(n/字长),很快 | O(1),栈弹出 | O(1),取链表头 |
| 找连续块 | 容易(位扫描) | 较难(栈内未必连续) | 很难 |
换个问法:“位示图中第 i 字第 j 位(从 0 起)对应的盘块号如何计算?”——答:盘块号 = i x 字长 + j。
【自测】 某磁盘共有 1024 个盘块,采用位示图管理,字长为 32 位。若第 5 字第 10 位(均从 0 开始)为 0,则该位对应的盘块号是多少?若将其分配给某文件,需要将其置为多少?
答:盘块号 = 5 x 32 + 10 = 170。分配后应将该位置为 1(表示占用)。〈出处:国网真题库同型题〉
【易错提醒】 ①四种方法的适用场合:空闲表适合连续分配,位示图适合查找连续块,成组链接适合大型文件系统。②位示图中 0/1 的含义要按题设确定,不要想当然。③成组链接法的一个磁盘块兼作栈顶,保存下一组的信息。
【知识关联】 本题考点:磁盘空闲空间管理——位示图、空闲链、成组链接法、空闲表。同库题群:第69–75题(文件结构与目录)、第77–78题(存取与文件物理结构)。面试:Unix 成组链接为何兼顾内存开销与连续分配效率?
- 连考提示:与第 75 题(open 操作)连考 —— 位示图/链接/索引三种分配方式,决定文件能否随机存取。
【拓展延伸】 变式:给位示图某行列值判断磁盘块占用;空闲链为何难找连续块。Linux:ext 系列块位图+组描述符;df/dumpe2fs/debugfs 可辅助观察。(本题答案 A,以题干选项为准)
第77题
下列关于顺序存取与随机存取的叙述中,正确的是( )。
A. 顺序存取只能用于顺序存储设备,随机存取只能用于随机存储设备 B. 顺序存取必须先算出记录地址再直接定位,因此比随机存取更快 C. 随机存取要求文件物理结构必须是链接分配,否则无法实现 D. 顺序存取按记录先后次序依次读写,随机存取可按任意次序直接读写,磁盘适合随机存取
答案:D
考点定位:六、文件管理——文件的存取方式(顺序存取与随机存取)与适用设备,难度★☆☆☆☆,是国企笔试中文件管理部分的常见概念题。
【结论】 顺序存取按先后次序依次读写,随机存取可按任意次序直接定位读写,磁盘适合随机存取,选 D。
【逐项辨析】
- A 错误——顺序存取是一种访问方式,并非只能用于磁带等顺序设备;磁盘上的文件同样可以采用顺序方式读写(如从头到尾读日志)。说“只能”过于绝对。
- B 错误——“先算地址再直接定位”是随机存取的特征,顺序存取不做地址计算,而是按记录顺序依次推进。
- C 错误——随机存取要求文件物理结构支持直接定位,连续分配和索引分配均可实现随机存取;恰恰是链接分配因需沿指针遍历而不适合随机存取。
- D 正确——准确描述了两类存取方式的本质差异,并给出磁盘适合随机存取的正确结论。
【知识点】 存取方式与设备、物理结构的对应关系:
| 存取方式 | 定义 | 地址计算 | 典型设备 | 适配的物理结构 |
|---|---|---|---|---|
| 顺序存取 | 按记录先后次序依次读写 | 无需,顺序推进 | 磁带 | 顺序文件、链接文件 |
| 随机存取 | 按任意次序直接读写指定记录 | 需计算块地址 | 磁盘 | 连续文件、索引文件 |
磁盘的随机存取能力源于其可直接寻址的硬件特性:磁头可通过寻道定位到任意磁道,再通过扇区选择直接读取目标数据块,无需经过前置记录。磁带则必须从头卷动到目标位置,只能顺序存取。
【推导过程】 同一文件在不同物理结构下的随机存取能力对比:
文件逻辑结构: 记录 R0, R1, R2, R3, R4...
连续分配:
[R0][R1][R2][R3][R4]...
起始块号已知,第 i 块地址 = 起始块 + i
-> 支持随机存取,可直接计算物理地址
链接分配:
[R0|next]-->[R1|next]-->[R2|next]-->[R3|next]...
要访问 R3,必须从 R0 沿指针依次遍历到 R3
-> 不支持随机存取
索引分配:
[索引块]: [0]->[R0块], [1]->[R1块], [2]->[R2块]...
先读索引块,通过下标直接查到第 i 块的物理位置
-> 支持随机存取(需一次索引块 I/O)【记忆锚点】 口诀——“顺序一根筋,从头走到尾;随机直达门,算好地址奔。磁盘两手抓,磁带只能顺”。
【易混对比】
| 对比维度 | 顺序存取 | 随机存取 | 随机访问存储器(RAM) |
|---|---|---|---|
| 所属范畴 | 文件 I/O 方式 | 文件 I/O 方式 | 存储器分类 |
| 核心含义 | 按逻辑次序依次读 | 可按任意记录号直接定位 | 可按地址直接读写内存单元 |
| 速度比较 | 慢(需遍历) | 快(直接定位) | 无关 |
换个问法:“链接分配的文件能否支持随机存取?为什么?”——答:不能。链接分配的每个数据块只保存下一块指针,要访问第 n 块必须从首块开始沿链遍历 n 次,无法直接定位。
【自测】 某磁盘文件采用连续分配,起始块号为 100,块大小 1 KB。若要随机读取文件中偏移量为 5120 B 处的记录,系统应直接访问哪个物理块?
答:块号 = 起始块号 + 偏移量 / 块大小 = 100 + 5120 / 1024 = 100 + 5 = 105。〈出处:408 真题同型题〉
【易错提醒】 ①存取方式讲的是“怎么读”,设备特性讲的是“能怎么读”,两者相关但不等同。②磁带只能顺序存取,磁盘既可顺序也可随机。③随机存取又称直接存取,与存储管理中的“随机访问存储器”含义不同,不要混淆。
【知识关联】 本题考点:顺序存取 vs 随机存取,磁盘适合随机、链接分配难随机。同库题群:第73–76题(路径/空闲空间)、第78题(物理结构)、第79–88题(磁盘与 I/O)。面试:为何数据库/日志系统对存取方式敏感?
- 连考提示:与第 76 题(磁盘空闲空间管理)连考 —— 顺序存取 vs 随机存取取决于物理分配方式。
【拓展延伸】 变式:磁带偏顺序、磁盘支持随机;连续/索引分配可随机,链接分配须遍历。Linux:read 顺序推进,lseek/pread 随机定位;O_DIRECT/页缓存影响实际路径。(本题答案 D,以题干选项为准)
第78题
下列关于文件系统功能与层次结构的叙述中,正确的是( )。
A. 文件系统的主要功能是管理内存中的程序和数据,与磁盘上的文件无关 B. 文件系统向上提供按名存取等接口,并负责文件的组织、存储、检索与保护,通常分为文件系统接口、文件组织、物理存取等层次 C. 文件系统的层次结构中,逻辑文件系统直接与磁盘驱动程序交互完成物理块读写 D. 文件系统只负责文件的读写,目录管理、存储空间管理由设备驱动程序完成
答案:B
考点定位:六、文件管理——文件系统的主要功能与层次结构,难度★☆☆☆☆,是国企笔试中操作系统概述与文件管理衔接处的常考点。
【结论】 文件系统向上提供按名存取接口,负责文件的组织、存储、检索与保护,通常分为接口层、逻辑文件系统层、物理存取层、设备管理层等层次,选 B。
【逐项辨析】
- A 错误——文件系统管理的是外存(磁盘)上的文件,内存中的程序与数据由存储管理(虚拟内存)负责,二者职责分明。
- B 正确——功能(按名存取、组织、存储、检索、保护)与层次划分(接口、文件组织、物理存取等)均符合教材标准定义。
- C 错误——直接与磁盘驱动程序交互完成物理块读写的是设备管理层,逻辑文件系统只处理目录、FCB 与逻辑块号,不触碰硬件。
- D 错误——目录管理与存储空间分配/回收都是文件系统的核心职责,绝非设备驱动程序的工作。
【知识点】 文件系统的功能可概括为“存组管护”四字:
| 功能 | 含义 | 具体工作 |
|---|---|---|
| 存(按名存取) | 用户只需提供文件名 | 路径解析、FCB 查找、权限检查 |
| 组(组织) | 逻辑结构与物理结构 | 流式/记录式文件、连续/链接/索引分配 |
| 管(管理) | 目录管理与空间管理 | 树形目录、空闲表/位示图/成组链接 |
| 护(保护) | 共享、保密、完整性 | 访问控制、备份、日志 |
【推导过程】 文件系统层次结构图:
+-----------------------------+
| 用户/应用程序层 |
+-------------+---------------+
| 系统调用
+-------------v---------------+
| 文件系统接口层 | <- open/read/write/close
| (提供系统调用接口) |
+-------------+---------------+
| 逻辑块号
+-------------v---------------+
| 逻辑文件系统层 | <- 目录管理、FCB、文件逻辑结构
| (文件组织与目录服务) |
+-------------+---------------+
| 物理块号
+-------------v---------------+
| 文件物理存取层 | <- 逻辑块->物理块映射、分配策略
| (缓冲管理、磁盘调度) |
+-------------+---------------+
| I/O 请求
+-------------v---------------+
| 设备管理层 | <- 设备驱动、中断处理、DMA
| (与磁盘硬件交互) |
+-------------+---------------+
| 硬件信号
+-------------v---------------+
| I/O 控制系统 | <- 磁盘控制器、DMA 控制器
+-----------------------------+【记忆锚点】 口诀——“接口对外供调用,逻辑管名和目录;物理做块映射跑,设备最终碰硬件”。文件系统核心目标四个字:按名存取。
【易混对比】
| 对比维度 | 逻辑文件系统 | 文件物理存取层 | 设备管理层 |
|---|---|---|---|
| 处理对象 | 文件名、目录、逻辑块号 | 逻辑块到物理块的映射 | 物理块读写命令 |
| 是否接触硬件 | 否 | 否 | 是(通过驱动) |
| 典型功能 | 路径解析、权限检查 | 分配算法、缓冲管理 | 磁头驱动、中断处理 |
换个问法:“文件系统中,哪一层负责把用户提供的逻辑块号翻译成磁盘上的柱面号、磁头号、扇区号?”——答:文件物理存取层(或设备管理层,具体划分视教材而定,通常物理存取层负责映射到物理块号,设备管理层负责块号到 CHS 的转换)。
【自测】 在文件系统层次结构中,当用户调用 read(fd, buf, count) 时,负责将字节偏移量转换为逻辑块号的是哪一层?
答:逻辑文件系统层(或文件物理存取层)。逻辑文件系统负责维护文件逻辑结构并处理 FCB,将文件内的字节偏移转换为逻辑块号属于其职责范围;随后物理存取层将逻辑块号映射为物理磁盘块号。〈出处:大厂面试高频〉
【易错提醒】 ①文件系统的核心目标是“按名存取”,记住这一句就能判断多数功能类选项。②层次自上而下为:接口、逻辑文件系统与文件组织、物理存取、设备管理,越往下越贴近硬件。③文件共享与保护属于文件系统功能,不要与进程同步机制混为一谈。
【知识关联】 本题考点:文件系统。与第 69–78 题;面试:硬链接 vs 软链接(见补题)。
- 连考提示:与第 79 题(I/O 设备分类)连考 —— 文件系统三层与设备层分工,别把块号→CHS 的换算算到目录层。 【拓展延伸】 变式:unlink 后文件还能读吗?(fd 仍打开则可以)。(本题答案 B,以题干选项为准)