第五章 文件系统
文件
文件系统的用户接口包括文件的 命名、类型、属性 和 对文件的操作。
文件命名
所有操作系统都允许使用 1-8个字母组成的字符串。
多数操作系统都支持文件名用 圆点 隔开分为两部分,圆点后面的部分称为 文件扩展名。
文件结构
- 无结构字节序列(流式文件):
- 代表:Windows、Unix;
- 优点:提供灵活性;
- 固定长度记录序列:
- 中心思想:读操作返回一个记录,写操作重写或追加一个记录;
- 树形结构:
- 记录长度不定;
- 在记录的固定位置包含一个 关键字域;
- 记录树 按关键字域排序;
文件类型
- 正规文件,分类:
- ASCII文件:可显示和打印,通常的文件编辑器可边际;
- 二进制文件,不能直接显示和打印,需要专门编辑器;
- 目录 文件:管理文件系统的 系统文件;
- 字符设备 文件:和 输入输出 有关;
- 块设备 文件:用于 磁盘类 设备;
文件存取
- 顺序存取:早期,从文件开始处读取信息,不能跳过;
- 随机存取:又称直接存取,可以以任意顺序读取文件信息;
文件属性
除了文件名和文件数据外,其他与文件相关的信息,如创建日期、文件大小、修改时间等。
文件操作
命令 | 功能 |
---|---|
CREATE | 创建 |
DELETE | 删除(释放磁盘空间) |
OPEN | 打开 |
CLOSE | 关闭 |
READ | 读 |
WRITE | 写 |
APPEND | 在末尾写 |
SEEK | 找到读取位置 |
GETATTRIBUTES | 获取文件属性 |
SETATTRIBUTES | 设置文件属性 |
RENAME | 重命名 |
目录
目录是文件系统中实现 按名访问 的重要数据结构。
目录文件的结构
目录文件有两种常见的结构:属性放在 目录项 中和放在 i结点 中。
i结点:包含 文件属性 和 文件块的磁盘地址 的数据结构。
目录结构
单层目录(根目录)
问题:文件命名、搜索效率低
两级目录
优点:解决重名问题,查找快
问题:增加系统开销
树形目录
优点:
- 便于文件分类
- 层级结构清晰
- 便于管理和保护
- 解决重名问题
- 查找速度快
问题:结构相对复杂
路径名
采用 树形目录 时,需要有某种方法指明文件。
绝对路径名:从根目录到文件
相对路径名:从当前工作目录到文件
目录操作
命令 | 功能 |
---|---|
CREATE | 创建 |
DELETE | 删除 |
OPENDIR | 打开,列出目录中的文件和子目录的前提 |
CLOSEDIR | 关闭 |
READDIR | 以标准格式返回打开目录的下一级目录项 |
RENAME | 重命名 |
文件系统的实现
实现文件
文件系统通常是以 2的n次方个连续的扇区 为单位对文件进行磁盘空间的分配,把 分配给文件的连续扇区 构成的 磁盘块 称为 簇
文件存储的常用方式:
- 连续分配;
- 磁盘链接表;
- 内存的链接分配表;
- i-结点;
连续分配
把每个文件作为一连串的数据块放在磁盘上。
优点:
- 实现简单,记录每个文件用到的簇仅需存储两个数字即可:第一块的磁盘地址 和 文件的块数;
- 读操作性能好,在单个操作中就能从磁盘上读取整个文件;
缺点:磁盘变得零碎,空闲的连续簇形成 空洞。
磁盘链接表
为每个文件构造簇的 链接表,每个簇开始的几个字节用于存放下一个簇的簇号,簇的其他部分存放数据,每个文件可以存放在不连续的簇中。
缺点:随机存取相当缓慢,要获得文件的第n块,每一次都要从头开始读取前面的n-1块。
内存的链接分配表
将文件所在的磁盘的簇号放在内存的表(文件分配表)中。
典型:MS-DOS
缺点:必须把 整个表都存放在内存 中,磁盘容量大时,表占的内存比较大。
i-结点
为每个文件赋予一个被称为 i结点 的数据结构,其中列出了 文件属性 和 文件块的磁盘地址。
实现目录
- CP/M 中的目录:以 簇 为单位来记录文件长度;
- MS-DOS 中的目录:使用 文件分配表FAT 作为索引表来存放文件数据所在簇的簇号;
- UNIX 中的目录;
磁盘空间管理
磁盘空间管理是文件系统的重要功能,包括记录空闲磁盘信息、设计文件的存放方式,以及规定文件系统的 簇大小 等内容。
簇大小:文件系统为文件分配磁盘空间以 簇 为单位。
簇大小过大:容易造成空间浪费。
簇大小过小:文件跨越簇,访问文件时间延长。
一般簇大小是 2的整数次幂 个 连续的扇区。
记录空闲块,跟踪记录空闲块的两种常用方法:
- 空闲簇链接表:用一些空闲簇存放空闲簇的簇号;
- 位图:用 n位 位图对应磁盘的 n个簇;
- 1:表示空闲簇;
- 0:表示已分配簇;