首页/操作系统/04-file/文件的操作 🔗 在 Obsidian 中打开
操作系统 · 04-file

文件的操作

重要度 ⭐⭐⭐⭐ 难度 ⭐⭐考查频率 高 操作系统/文件管理文件操作openclosereadwrite
速查
基本操作:create / delete / open / close / read / writeopen 将 FCB 读入打开文件表(系统级共享 + 进程级独立),返回文件描述符 fd;close 在引用计数为 0 时写回磁盘。文件锁分共享锁(读)与排他锁(写)。

速查

项目
基本操作create, delete, open, close, read, write
文件指针记录当前读写位置(每进程独立)
打开文件表系统级(所有进程共享)+ 进程级(每进程独立)
文件锁共享锁(读)+ 排他锁(写)

核心概念

基本文件操作

  • create:创建新文件,分配目录项和存储空间。
  • delete:删除文件,释放目录项和存储空间。
  • open:将文件元数据从磁盘读入内存的打开文件表,返回文件句柄。
  • close:将修改过的元数据写回磁盘,从打开文件表中删除。
  • read / write:按文件指针读取 / 写入数据,操作后指针自动移动。

打开文件表

  • 系统级打开文件表:OS 维护,含所有进程打开文件的 FCB/inode(含引用计数)。
  • 进程级打开文件表:每进程独立,含文件描述符 fd、读写指针;它指向系统级表项。

文件指针与文件锁

  • 每个进程对同一文件有独立的文件指针,读写后自动移动。
  • 共享锁(读锁):多进程可同时持有;排他锁(写锁):仅一个进程持有。
  • 兼容性:读-读兼容,读-写互斥,写-写互斥。

关键性质

操作是否访问磁盘说明
open是(读 FCB)将文件元数据读入内存
close是(写 FCB)将修改写回磁盘
read / write是(读写数据)通过文件指针定位
create是(分配空间)创建目录项
delete是(释放空间)删除目录项

常见考法

考法解题套路
open 做了什么读 FCB 到系统打开文件表,创建进程打开文件表条目
为什么要 open避免每次 read/write 都访问磁盘读 FCB
文件指针每进程独立,读写后自动移动
文件锁共享锁可共存,排他锁互斥

易错点

注意
  • open 操作需要访问磁盘(读 FCB),但后续 read/write 不再读 FCB。
  • 系统级打开文件表所有进程共享,进程级每进程独立
  • 两个进程打开同一文件,系统级表只有一条记录(引用计数)。
  • 文件描述符 fd 是进程级打开文件表的索引,不是文件标识符。
  • close 时若引用计数为 0,才真正从系统级表中删除。

核心结论

必背
  1. open 将文件元数据读入内存,后续操作不需要重复访问磁盘。
  2. 系统级打开文件表共享,进程级打开文件表独立。
  3. 文件指针记录当前读写位置,每进程对同一文件有独立指针。
  4. 文件锁实现读写互斥:共享锁可共存,排他锁独占。
  5. open/close 对应资源分配/释放,read/write 对应数据传输。

记忆卡片

open 操作做了什么?
将文件元数据(FCB)从磁盘读入系统打开文件表,返回文件描述符 fd。
为什么需要 open?
避免每次 read/write 都访问磁盘读取 FCB。
系统级和进程级打开文件表的关系?
系统级所有进程共享,进程级每进程独立,进程级指向系统级。
文件指针的特点?
每进程对同一文件有独立的文件指针,读写后自动移动。
共享锁和排他锁的兼容性?
读-读兼容,读-写互斥,写-写互斥。

交互动画 · 打开文件表的共享结构

第 0 步
open 是唯一读磁盘的环节:检索目录 → 读 FCB → 建内存表项 用户进程 open()系统调用陷入内核 按路径检索目录找到目标目录项 读 FCB 入内存访问磁盘 1 次 系统级打开文件表存 FCB + 引用计数 = 1 进程表分配 fdfd → 系统表项 返回 fd=3后续 read/write 用它 两进程打开同一文件 → 系统级表仅 1 条(引用计数 = 2) 进程 A 表fd=3 进程 B 表fd=5 系统级打开文件表FCB + 引用计数 = 2 磁盘 inode(唯一一份数据)引用计数归 0 才释放
点击「播放」或「下一步」:走完 open() 系统调用 → 打开文件表共享 的完整流程
第 1~5 步 open 流程;第 6~8 步打开文件表共享与引用计数。
用户 / 操作 进程表 系统级表 磁盘 / inode

相关知识点

file-concept-and-classification file-logical-structure

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。