文件系统
- 文件控制块
- 简称 FCB。包括文件的各种基本元信息:文件名、位置、类型、大小、时间、权限等。
- FCB 保存在目录文件中,占用目录项。
- 文件分类
- 按用途:
- 系统文件
- 库文件
- 应用程序文件
- 用户文件
- Unix 划分方式:
- 普通文件
- 目录文件
- 特殊文件:把对文件操作转换为对特定设备的操作。
- 块设备特殊文件
- 字符设备特殊文件
- 管道文件
- 套接字文件
- 符号链接文件
- 按用途:
- 目录结构
- 纯树形目录结构:禁止共享文件和目录。
- 无环图目录结构:允许共享文件和子目录,共享文件只有一个副本。
- 文件结构
- 分类
- 逻辑结构:用户看到的文件组织方式,和存储设备无关。
- 物理结构:文件在外存上的存储方式,与存储设备有很大关系。
- 文件系统作用:在逻辑结构和物理结构之间建立映射。
- 逻辑结构
- 无结构的字节流文件
- 有结构的记录式文件:分为定长记录和变长记录。
- OS 不关心具体的逻辑和意义,这些都与具体应用程序相关,OS 层面都按照字节流处理。
- 存取方法
- 顺序存取:适用于各种存储设备。
- 随机存取:仅适用于硬盘等可以随机存取的设备。
- 存取字节流文件:按照偏移量移动读写指针。
- 存取记录式文件:按照记录的索引访问。
- 分类
- 物理结构
- 块结构
- 物理块:把存储空间划分为大小相等的块,是分配和传输信息的基本单位。
- 逻辑块:与物理块大小相等。
- 分类
- 连续文件
- 文件内容连续存放在同一段。
- 优点:
- 实现简单。
- 支持随机存取和顺序存取。
- 存取速度快:已知文件管理信息时,可以访问文件中任意位置。
- 缺点:
- 不灵活:需要提前确定文件长度。
- 容易产生碎片:不断创建、删除文件后,出现许多空洞。
- 链接文件
- 文件内容可以不在连续的区域,把物理块用指针链接。
- 优点:
- 文件可以动态增长。
- 解决碎片问题。
- 缺点:
- 只能按照指针顺序存取。
- 存取性能低,要多次访问外存。
- 优化:额外在一个单独的索引表中存放所有块的下一个块指针,先访问索引表再访问物理块。
- 索引表可以存放在内存,速度更快,相比多次访问外存相当于随机存取。
- 索引表长度就是块数,表项长度是编码索引需要的长度。
- DOS 使用(包括优化)。
- 索引文件
- 为每个文件建立独立的索引表,用索引表记录文件内容的存放位置,访问文件时先加载索引表。
- 一级索引表过大时,将索引表拆分成多级。
- Unix 和 Linux 的 ext2 使用。
- 优点:
- 文件可以动态修改。
- 支持随机存取和顺序存取。
- 缺点:
- 索引表需要占据额外空间。
- 访问索引表需要额外的外存读写。
- 索引顺序文件
- 索引顺序文件是顺序文件和索引文件的结合。整个文件被分为若干组,每组内顺序存放,索引表储存所有组的逻辑、物理块起始编号和块数。
- Windows 的 NTFS 使用,其中的主控文件表(MFT)就是索引表。
- 连续文件
- 存储介质
- 磁带
- 只支持顺序存取。
- 磁盘
- 以块为单位进行存取,支持随机和顺序存取。
- 磁带
- FAT 文件卷
- 磁盘低级格式化时,把磁盘划分成磁道、扇区。每个扇区 512B。扇区头标记录柱面、磁头、扇区编号。
- 硬盘分区:
- 划分一个主引导扇区(MBR),位于 0 柱面 0 磁道 1 扇区,共 512B,其属于整个硬盘而不属于特定分区。
- MBR 包括主引导程序、硬盘分区表(DPT)、固定的有效标志。
- 分区最多划分 4 个主分区或 3个主分区和一个扩展分区,扩展分区可以划分多个分区。
- 一个分区的 FAT 文件卷包括:
- 引导或保留扇区
- 文件分配表(FAT):记录存储空间的使用情况。
- 根目录区:记录文件或目录在根目录的使用情况。
- 文件数据区:实际存放各种文件。
- 文件记录的组块和分解
- 块因子:一个物理块可以存放的逻辑记录个数。
- 读写时,需要使用内存缓冲区,从外存加载后,在内存中记录分解。
- 块结构
- 存储空间的管理
- 空白文件目录
- 空白文件:连续未使用的空闲块。
- 空白文件目录:为空白文件建立表。
- 适合文件的静态分配,即连续文件的分配,但不适合动态分配。
- 空闲块链表
- 把所有空闲块连接成链表。
- 适合动态分配,但是需要多次访问外存,效率低。
- 空闲块成组链表
- 盘空闲块:特殊的空闲块,用指针连接成链表,其中用于存放其他空闲块的编号。
- 适合连续文件、连接文件、索引文件的存储分配。
- Unix 使用空闲块成组链表。
- 位图
- 用二进制位表示块是否可用。
- 容易找到连续的空闲块,可以保存在内存,便于分配和回收空间。
- ext2 把硬盘分为块组,在块组中使用位图。NTFS 也使用位图。
- 空白文件目录
- 文件的共享
- 硬链接
- 硬链接的 FCB 不同,但是 FCB 指向同一个索引节点。
- 索引节点保存有引用计数。
- 符号链接
- 符号链接是完全独立的文件,其内容包括指向的文件的路径。
- 优点:可以链接任意的文件,不受文件系统的限制。
- 缺点:占用磁盘空间,增加访问次数。
- 硬链接
- 文件的保护
- 保护域
- 域:包含可以操作的对象和可用的权限。
- 存取控制矩阵:每一列对应一个对象,每一行对应一个域,元素记录权限。
- 缺点:空项太多,浪费空间。
- 存取控制表
- 为每个对象创建一个,记录每个域的权限。
- 记录在 FCB 中。
- Unix 中文件的 mode 就是一种存取控制表,三个域分别为所有者、组内用户、其他用户。
- 保护域
- 文件系统的组织结构
- 应用程序接口:检查用户调用命令的正确性、合法性。
- 逻辑文件系统:管理目录,按照路径名查找目录。
- 文件组织模块:把文件的读写位置转换为文件的相对块号,再转换为物理块号。
- 基本文件系统:对设备驱动程序的调用。
- IO 调度及控制模块:把上层命令转换为设备 IO 指令和设备地址,调度命令。
- 内存映射文件
- 把文件映射到进程地址空间,返回虚拟地址,需要时再读取文件数据。
- 与页式虚拟内存管理机制一样,访问的页不在主存时,产生缺页中断读入主存
- OS 提供系统调用。