前言
操作系统作为系统资源的管理者,文件也是一种系统资源。文件本质上就是一组有意义的信息/数据的集合。 我们日常接触的照片、Word 文档、PPT、PDF 等都是文件,不同类型的文件呈现出不同的特性,而这些特性都需要操作系统来关心与处理。
文件管理需要解决以下五个核心问题:
- 文件有哪些属性:文件本身具备哪些描述信息
- 文件内部如何组织:文件内部数据的组织形式(逻辑结构)
- 文件之间如何组织:多个文件怎么有序地存放在一起(目录)
- 操作系统向上层提供哪些接口:应用程序和用户如何操作文件(系统调用)
- 文件如何存放在外存:文件数据在磁盘上的物理存放方式(物理结构)
1. 文件的属性
每个文件都拥有若干属性:文件名 是用户最直接感知的属性,同一目录下不允许重名;标识符 是操作系统内部用于唯一区分文件的编号,用户不可见;文件类型 (如 .txt、.mp4)决定默认打开程序;文件位置 包括用户可见的存放路径和操作系统内部记录的外存物理地址;此外还有文件大小、创建/修改时间、所有者,以及控制不同用户读写权限的保护信息。
2. 文件内部的数据组织(逻辑结构)
文件按内部结构分为两类:无结构文件 (流式文件)由二进制或字符流组成,无明显结构,如 .txt;有结构文件(记录式文件)由一条条记录组成,每条记录包含若干数据项(如学号、姓名),Excel 表格和数据库表是典型代表,其记录的具体组织方式属于文件逻辑结构的范畴,后续章节详述。
3. 文件之间的组织(目录)
我们平时使用的文件系统呈现出树状结构:
yaml
根目录 /
├── 文档/
│ ├── 工作/
│ │ └── report.docx
│ └── 学习/
│ └── notes.txt
├── 照片/
│ ├── 2024/
│ └── 2025/
└── 视频/
- 用户可以自由创建多层目录(即文件夹),将文件有序组织。
- 目录本身也是一种特殊的有结构文件,由一系列记录组成。
4. 操作系统向上层提供的文件操作接口
操作系统通过系统调用为上层应用程序和用户提供以下基本文件操作:
| 系统调用 | 功能 | 说明 |
|---|---|---|
create |
创建文件 | 新建一个空文件 |
open |
打开文件 | 使用文件前必须先打开 |
read |
读文件 | 将文件数据从外存读入内存 |
write |
写文件 | 将内存中的数据写回外存 |
close |
关闭文件 | 文件使用结束后必须关闭 |
delete |
删除文件 | 将文件数据从外存中抹除 |
注意 :在读/写文件之前,必须先调用
open;使用结束后,必须调用close。
复杂操作可由基本操作组合实现,例如"复制文件":
create创建新的空文件read将源文件内容读入内存write将内存数据写入新文件
5. 文件在外存上的存放(物理结构)
外存的基本结构
- 外存(磁盘)与内存类似,被划分为一个个大小相等的磁盘块(物理块)。
- 每个磁盘块通常包含 (2^n) 个地址单元,例如 (2^{10} = 1024) 字节 = 1 KB。
地址转换
操作系统需要将文件的逻辑地址 转换为外存的物理地址:
逻辑地址 = 逻辑块号 + 块内地址
物理地址 = 物理块号 + 块内地址
- 块内地址位数取决于磁盘块大小(1 KB 块需要 10 位表示块内地址)。
分配单位
- 操作系统以块为单位为文件分配存储空间。
- 即使文件只有 10 字节,也会占用整个磁盘块(1 KB)。
- 读写文件时,也以块为单位进行数据交换。
6. 其他重要功能
除上述内容外,操作系统还需实现:
- 文件共享:多个用户可以共享使用同一个文件。
- 文件保护:不同用户对文件拥有不同的操作权限(读/写/无权访问)。