Skip to content

408

操作系统

OS-04-02 文件操作(创建/打开/读写/关闭/删除)


一、定位信息

  • 所属圈层:核心层
  • 前置知识回顾:理解文件控制块(FCB/inode)的概念,知道文件由数据部分和元数据组成。
  • 知识网络位置:本单元描述用户与文件系统的交互接口,是理解文件系统工作原理的关键。文件操作的实现涉及FCB管理(OS-04-01)、目录结构(OS-04-06)和文件物理结构(OS-04-05)。
  • 考点热度等级M级(中频常考)——打开/读写/关闭文件的过程是选择题常见考点。

二、知识点讲解

2.1 创建文件(create)

创建文件的过程:

  1. 在目录中查找,确认文件名不存在
  2. 在磁盘上分配一个空闲inode(FCB)
  3. 在inode中填写初始信息(大小=0、创建时间等)
  4. 在父目录中添加一个目录项(文件名, inode号)
  5. 返回文件描述符(或文件句柄)

2.2 打开文件(open)

打开文件是将文件的FCB/inode信息从磁盘读入内存,建立进程与文件的连接。打开文件后,后续的读写操作不需要每次都从磁盘读取FCB。

打开文件的过程:

  1. 用户发出 open(文件名) 系统调用
  2. OS根据文件名在目录中查找,找到对应的inode号
  3. 将inode信息从磁盘读入内存中的打开文件表
  4. 在进程的文件描述符表中分配一个条目,指向打开文件表中的对应项
  5. 返回文件描述符(一个整数),后续操作使用该描述符

打开文件表

  • 系统级打开文件表:整个系统维护一张,记录所有被打开文件的信息(引用计数、读写位置等)
  • 进程级文件描述符表:每个进程维护一张,记录该进程打开的文件

2.3 读写文件(read/write)

读写文件的过程:

  1. 用户发出 read(文件描述符, 缓冲区, 长度)write(文件描述符, 数据, 长度)
  2. OS根据文件描述符找到对应的打开文件表项
  3. 检查访问权限(读/写权限)
  4. 根据读写位置,计算要访问的磁盘块
  5. 执行磁盘I/O,传输数据
  6. 更新读写位置指针

2.4 关闭文件(close)

关闭文件的过程:

  1. 用户发出 close(文件描述符) 系统调用
  2. 将文件的修改信息写回磁盘(更新inode)
  3. 释放文件描述符表中的条目
  4. 减少系统级打开文件表中的引用计数
  5. 若引用计数为0,释放打开文件表中的条目

2.5 删除文件(delete)

删除文件的过程:

  1. 在目录中查找文件,找到对应的目录项
  2. 释放文件占用的所有磁盘块(回收到空闲空间)
  3. 释放inode
  4. 从父目录中删除目录项

注意:删除文件时需要检查是否有其他进程正在使用该文件(引用计数)。在Unix中,只有当引用计数为0时才真正删除文件。


三、记忆与理解辅助

1. 类比记忆:文件操作就像去图书馆——创建=办借书证(登记信息),打开=借书(从书架拿到手上),读写=看书/做笔记,关闭=还书,删除=注销借书证并销毁书。

2. 口诀:"创建分配inode,打开读入内存中;读写靠描述符,关闭释放资源清;删除回收磁盘块,目录项也要删。"

3. 文件操作与FCB的关系

操作FCB相关动作
创建分配FCB/inode,初始化
打开将FCB/inode读入内存
读写通过内存中的FCB定位数据
关闭将修改后的FCB写回磁盘
删除释放FCB/inode

4. 打开文件表结构

进程文件描述符表        系统级打开文件表        inode表(磁盘)
┌──────┐             ┌──────────┐          ┌──────────┐
│ 0 →  │────────────→│ 文件A    │─────────→│ inode A  │
│ 1 →  │──┐          │ ref=2    │          └──────────┘
│ 2 →  │  │          └──────────┘
└──────┘  │          ┌──────────┐          ┌──────────┐
          └─────────→│ 文件B    │─────────→│ inode B  │
                     │ ref=1    │          └──────────┘
                     └──────────┘

四、例题与精解

例题1(基础巩固)

题目:进程A和进程B先后打开同一个文件 file.txt(假设文件之前未被打开)。进程A的文件描述符为3,进程B的文件描述符为5。问: (1)系统级打开文件表中有几个条目? (2)该条目的引用计数是多少? (3)进程A关闭文件后,进程B还能继续读写吗?

命题意图:考查打开文件表和引用计数机制。

精解

1. 审题分析:两个进程打开同一文件,需要分析打开文件表的状态。

2. 解题思路:分析系统级打开文件表和进程级文件描述符表的关系。

3. 完整步骤

(1)系统级打开文件表中有 1个 条目。两个进程打开同一文件,系统级表只创建一个条目(共享)。

(2)引用计数 = 2。进程A打开时引用计数=1,进程B打开时引用计数=2。

(3)能继续读写。进程A关闭文件时,引用计数减为1。因为引用计数 > 0,系统级打开文件表的条目不释放,进程B仍可通过自己的文件描述符5访问文件。

4. 方法反思:引用计数机制确保了文件的安全关闭——只有当所有进程都关闭文件后,系统才释放打开文件表的条目。这也是Unix中unlink(删除文件名)后文件仍可被已打开的进程继续使用的原因。

例题2(中等提升)

题目:某文件系统中,文件F的inode已被读入内存。进程P执行以下操作序列:

fd = open("F", O_RDONLY);
read(fd, buf, 100);
close(fd);
fd = open("F", O_RDWR);
write(fd, data, 50);
close(fd);

请描述每次系统调用时OS的具体操作。

命题意图:考查文件操作的完整流程。

精解

1. 审题分析:依次分析open、read、close、open、write、close的操作。

2. 解题思路:按照文件操作的流程逐步分析。

3. 完整步骤

open("F", O_RDONLY)

  1. 在目录中查找"F",找到inode号
  2. 将inode读入系统级打开文件表(引用计数=1)
  3. 在进程P的文件描述符表中分配条目,指向打开文件表项
  4. 设置访问模式为只读
  5. 返回文件描述符 fd

read(fd, buf, 100)

  1. 通过fd找到打开文件表项
  2. 检查访问权限:O_RDONLY允许读 ✓
  3. 根据读写位置,计算要读取的磁盘块
  4. 从磁盘读取100字节到buf
  5. 更新读写位置 += 100

close(fd)

  1. 释放进程P的文件描述符表中fd对应的条目
  2. 系统级打开文件表引用计数减为0
  3. 释放打开文件表条目
  4. 将inode的修改信息(如访问时间)写回磁盘

open("F", O_RDWR)

  • 与第一次open类似,但访问模式设为读写

write(fd, data, 50)

  1. 通过fd找到打开文件表项
  2. 检查访问权限:O_RDWR允许写 ✓
  3. 根据读写位置,计算要写入的磁盘块
  4. 将50字节写入磁盘
  5. 更新读写位置 += 50,更新文件大小

close(fd)

  • 同第一次close,将修改后的inode写回磁盘

4. 方法反思:open和close是成对出现的,open建立连接,close断开连接。read/write只在文件打开后才能执行。考试中需要理解每一步的具体操作,特别是引用计数和权限检查。


五、考情分析

  • 考查频次:文件操作在近5年真题中出现约2-3次。
  • 常见题型:选择题(打开文件表、引用计数判断)、综合题(文件操作流程描述)。
  • 分值占比:选择题2分,综合题3-5分。
  • 命题趋势:近年来倾向于考查打开文件表的结构和引用计数机制,需要理解系统级和进程级两级表的关系。基于大纲与命题规律推测

六、易错点提醒

  1. 错误表现:认为打开文件就是将整个文件读入内存。 错误原因:混淆了"打开"和"读取"。 正确理解/做法:打开文件只是将文件的**元数据(FCB/inode)**读入内存,不读取文件数据。文件数据在read时才按需读取。

  2. 错误表现:认为关闭文件后文件描述符仍然有效。 错误原因:不理解close的含义。 正确理解/做法:close释放文件描述符,之后使用该描述符会出错。但系统可能将该描述符号分配给后续打开的文件。

  3. 错误表现:认为删除文件时一定会释放所有资源。 错误原因:不理解引用计数机制。 正确理解/做法:在Unix中,如果文件正在被其他进程打开(引用计数 > 0),删除操作(unlink)只是删除目录项,文件数据不会立即释放,直到所有进程关闭文件后才真正释放。


七、来源标注

  • 依据2026考研统考408大纲
  • 依据《操作系统概念》(Operating System Concepts, Silberschatz)第11章
  • 依据汤小丹《计算机操作系统》第4版第4章

考研全科复习资料 - 基于2026考研统考大纲