Skip to content

2014年 408 操作系统 第 29 题

操作系统2014年选择题2分

题目

在一个文件被用户进程首次打开的过程中,操作系统需要做的是( )。

错因

A

直觉觉得"打开文件 = 把内容读出来",毕竟"打开"两个字听起来像把书翻开。但 OS 的 open() 设计是懒加载——文件可能上 GB,谁也不会一打开就读完整内容。open 只把元数据(FCB / inode)拿进内存,真正的数据要等 read() 调用时才按需读。

C

修改读写权限是chmod 这种独立操作,跟 open 完全不沾边。打开文件不会改它的权限——OS 只是检查权限位看用户能不能访问,访问通过就建打开文件项,不通过就拒绝;不修改任何东西。

D

混了"缓冲区指针"和"文件描述符"两个概念。open 返回的是文件描述符 fd(用户打开文件表里的一个索引整数,比如 3),不是缓冲区指针。"缓冲区"是用户调用 read 时自己分配的一段内存(read(fd, buf, n) 里的 buf),由用户传给 OS,不是 OS 给用户的。

总解析

文件打开的核心是建立"用户能用 fd 找到 inode"的路径,OS 在 open 时做的事按顺序:

步骤操作为什么
① 路径解析按目录链找到文件的 FCB / inode通过路径名定位元数据
FCB 读入内存把 FCB / inode 从磁盘搬到内存(系统打开文件表)每次访问都要查它(找数据块、检查权限),不能每次都走磁盘
③ 建用户打开文件表项在进程的打开文件表里加一行,指向系统打开文件表项给该进程一个 fd 索引
④ 返回 fd把进程内表项下标返回给用户用户后续 read/write 用 fd

关键:FCB / inode 是文件的元数据(大小、块指针、权限、时间戳)。文件内容要读多少由后续 read 决定,open 只搬元数据,不搬内容

逐项核对:

  • A:把文件内容读入 → 错(打开不读内容)
  • B:把 FCB 读入内存 → ✓ 正是步骤 ②
  • C:改 FCB 的读写权限 → 错(open 只查不改)
  • D:返回缓冲区首指针 → 错(返回的是 fd 而不是指针,且缓冲区由用户在 read 时自己提供)

最终答案是 B

最后更新:

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