Skip to content

2017年 408 操作系统 第 31 题

操作系统2017年选择题2分

题目

若文件 f1 的硬链接为 f2,两个进程分别打开 f1 和 f2,获得对应的文件描述符为 fd1 和 fd2,则下列叙述中,正确的是( )。

Ⅰ. f1 和 f2 的读写指针位置保持相同

Ⅱ. f1 和 f2 共享同一个内存索引结点

Ⅲ. fd1 和 fd2 分别指向各自的用户打开文件表中的一项

错因

A

只承认 Ⅲ,漏了 Ⅱ"共享内存索引结点"——但硬链接的核心定义就是 f1、f2 指向同一个 inode(磁盘 inode 共享 → 加载到内存后内存 inode 也共享)。这是硬链接区别于软链接的关键性质,漏了它就是没记住硬链接是什么。

C

把 Ⅰ 选了——但两个进程独立打开 f1 和 f2 会建立各自独立的系统打开文件表项(虽然指向同一 inode),各自的读写指针完全独立。两个进程各自 read 几次互不影响,指针不会"自动同步"。把"硬链接"和"dup() 复制 fd"混了——dup 之下的 fd 才共享指针。

D

把 Ⅰ Ⅱ Ⅲ 全选,掉进了 Ⅰ 的陷阱——Ⅰ 错(指针不同步)。Ⅱ Ⅲ 都对但 Ⅰ 错就不能选 D。

总解析

硬链接:两个目录项指向同一个 inode(磁盘上)。f1 和 f2 是同一个文件的两个名字。

两个进程独立打开会经过一套标准的文件描述符层次:

进程 A 的 fd 表 [fd1] ──→ 系统打开文件表项 ① ──→ 内存 inode 表
进程 B 的 fd 表 [fd2] ──→ 系统打开文件表项 ② ──→ (同一个 inode)
层级内容f1 / f2 是否共享
磁盘 inode文件元数据 + 数据块指针共享(硬链接定义)
内存 inode 表进入内存后的 inode 副本共享(同一磁盘 inode 只装入内存一次)
系统打开文件表每次 open 一项,含读写指针、打开模式不共享(两次独立 open 各建一项)
用户进程打开文件表(fd 表)fd → 系统打开文件表项 的索引不共享(各进程独立)

逐条核对:

命题判定说明
Ⅰ 读写指针位置相同两个进程独立 open,系统打开文件表项独立,读写指针各自一份。一个进程 read 不影响另一个
Ⅱ 共享同一内存 inode硬链接的核心:磁盘 inode 共享,内存 inode 表同一个 inode 只装一次
Ⅲ fd1、fd2 各指向自己的用户打开文件表项每个进程的 fd 表独立

关键区分:硬链接 vs dup() 复制 fd——硬链接共享 inode 但指针独立;dup 共享系统打开文件表项 → 指针同步。两者层级不同,不要混。

最终答案是 B

最后更新:

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