文件系统

  • 文件控制块
    • 简称 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 提供系统调用。