Skip to content

2020年 408 操作系统 第 23 题

操作系统2020年选择题2分

题目

若多个进程共享同一个文件 F,则下列叙述中,正确的是( )。

错因

A

把"共享文件"听成了"只读共享"。共享只是说允许多进程同时打开同一个文件,至于以什么方式打开(读 / 写 / 追加)是各进程自己 open 时挑的,OS 不会因为别人也开了就强制降级到只读——只读共享是一种使用约定,不是共享的硬性条件。

C

把两层表搞混了:用户打开文件表是进程私有的,里面记的是"我打开 F 时拿到的访问权限、当前读写指针、文件描述符"——每个进程独立维护,因此内容通常不同(哪怕只是读写指针不同)。"内容相同"的是它们指向的下一层——系统打开文件表里那个共享表项。

D

把关闭等同于了"完全销毁"。关闭只是当前进程不再用 F 了,系统打开文件表项的打开计数减 1;只要还有别的进程开着 F、计数没归零,表项就得留着——它正是多进程共享 F 时的"汇合点"。计数归零(最后一个用户也关掉了)才会真的删除该表项。

总解析

打开文件表分两层维护,是为了让"多进程共享"这件事说得清:

归属每条记录什么同一文件被多进程打开时
用户打开文件表进程私有(每进程一份)文件描述符、访问模式、当前读写位置、指向系统表的指针每个进程一条,内容通常不同(读写指针、模式都可能不同)
系统打开文件表全系统共用(OS 内核一份)文件主属性、内存 inode 副本、打开计数、共享读写位置(部分 OS)全系统只有一条,所有打开 F 的进程的用户表项都指向它

逐项过:

  • A:共享 ≠ 只读,各进程仍可按需以读 / 写 / 读写方式打开,错。
  • B:多进程共享 F 时,系统打开文件表里有且仅有 F 这一条共享记录,正是这层表的存在意义,
  • C:用户打开文件表项各进程独立维护,文件描述符、读写指针、访问模式都可能不同,错。
  • D:关闭只是把系统表项的打开计数减 1;计数归零时才真正删除该表项,错。

最终答案是 B

最后更新:

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