文件系统概要

什么是文件?

  信息按一定结构方式组成文件,由文件名进行标识

什么是文件系统?

  文件与管理信息资源的管理程序的集合称为文件系统

文件目录

  • 文件控制块(FCB)

    • File Control Block(简称FCB)是操作系统为每个文件建立的唯一数据结构
    • 一个文件有两部分:FCB和文件体(即文件信息)。每创建一个文件,系统就要为其建立一个FCB;每当存取文件时,先找到其FCB,才能定位到其物理位置
  • 文件目录

    • 目录文件便是由许多的FCB汇集在一起所形成的文件,它保存在外存上并至少包含两个文件:当前目录(即自身)“.”和其父目录“..”
    • 文件目录的基本功能是将文件名转换成该文件在磁盘上的物理位置
  • 索引节点inode

    • 文件系统的信息空间可认为是一系列逻辑块构成的,不同文件系统的逻辑块大小不定,但通常为512B的整倍数。逻辑块到物理块的转换则由操作系统软件负责
    • Linux系统中,FCB中的文件名和其他管理信息分开,其他信息单独构成一个数据结构,即索引节点inode,这些inode被集中存放在磁盘上的inode区。索引节点位置由inode标号标识,所以目录项中仅有文件名和inode标号,称为基本目录项
    • inode结构示例:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      struct inode {
      ……
      unsigned long i_ino; //inode号
      atomic_t i_count; //inode引用数
      kdev_t i_dev; //inode所在设备
      ……
      union {
      struct minix_inode_info minix_i;
      struct ext2_inode_info ext2_i;
      ……
      }
      }
    • 因为在文件访问过程中会频繁使用inode,所以Linux在系统所占的内存区内开辟了一张内存索引节点表,又活动inode表,含有100个表项,每个表项称一个活动inode。访问文件时,若在活动inode表中找不到其inode,就申请一个空闲活动inode,把磁盘inode内容复制给它,类似存储管理中的虚拟存储

  • 层次目录结构

    • Linux系统中,文件目录结构是一颗倒置的树,树根是根目录,树枝是子目录,树叶是文件。在树状目录中,一个文件的全名包括从根目录起至文件为止,在通路上所遇到的所有子目录路径,子目录名之间用斜线隔开。Linux文件系统中,根目录下包含dev(设备子目录),usr(命令程序文件和库程序子目录),var(变化的文件子目录),etc(基本数据文和实用程序子目录),home(用户文件主目录)等
    • 纯树形目录结构有一个缺点:文件的共享不是对称的,其他被授权用户必须经过文件父目录才能访问该文件。而有向无环图目录结构可以解决这个问题,属于不同用户的多个目录可能使用不同的文件名访问和共享同一个文件。有向无环图需要为每个文件维护一个引用计数,以此记录文件的父目录个数,当引用计数值为1时,删除操作才能移去文件,否则仅删除相关记录
    • Linux系统支持多父目录,但其中有一个是主父目录,文件被物理地存储在此目录下,其他父目录通过link方式来链接和引用文件
  • 文件目录检索

    • 前面有提到每个目录至少包含“.”和“..”两个目录项,其中目录项“.”中的inode标号即为当前目录的inode标号,同理,目录项“..”中的inode标号即为父目录的inode标号
    • 对于根目录来说,“..”和“.”的inode标号相同
    • 假设现在应用进程要打开“/home/fei1/myfile.c”:
        首先,遇到根目录“/”(通常被存放在磁盘的固定盘块),将其作为当前工作索引节点并把第一个物理块读入内存缓冲区,接着对根目录进行搜索,直至找到“home”的inode标号;然后检索活动inode表,若找不到home的inode,为其分配一个活动inode,经核对访问权限,将home作为当前工作索引节点,搜索和“fei1”匹配的物理块……最后找到myfile.c的inode号,从磁盘装入内容。其中任何一布出错都会返回错误码

文件组织与数据存储

  • 文件逻辑结构

    逻辑结构是指为方便用户使用而对物理结构的一种抽象
    • 流式文件和记录式文件

      • 流式文件
        • 一种无结构的文件,文件内的数据只是一串顺序的信息的集合,又称字节流文件
        • 流式文件中的每一个字节都有一个索引,第一个字节索引为1,第二个字节索引为2……打开文件的进程使用文件读写指针来访问文件中的特定字节
        • 为了简化系统,大多数操作系统如Linux系统只提供流式文件
      • 记录式文件
        • 一种有结构的文件,包含若干条逻辑记录,逻辑记录式文件中按信息在逻辑上的独立含义所划分的信息单位,如数据库文件
        • 在记录式文件中,逻辑记录是文件内独立的最小单位,文件的记录位置取代字节位置
        • 记录式文件有两种常用的记录组织和使用方法:
          • 记录式顺序文件
          • 记录式索引顺序文件
    • 成组和分解

      • 一条逻辑记录被存放到存储介质时可能占用一个或多个物理块,或者一个物理块包含多条逻辑记录。若干逻辑记录合并成一组,写入一块叫做记录成组,这时每块中的逻辑记录的个数称为块因子
      • 成组操作先在系统输出缓冲区内进行,缓冲区满时文件管理才发出一次I/O请求
      • 反之,把逻辑记录从块中分离出来的操作叫做分解
    • 记录格式

      记录格式就是记录内数据的排列方式,有以下三种:
      • 定长记录
        所有逻辑记录具有相同长度,成组时除了最后一块,每块的逻辑记录数是一个常数
      • 变长记录
        逻辑记录不相等,但每条逻辑记录的长度处理之前能预先确定。逻辑记录的第一字段指明字节个数,第二字段存放记录信息。变长记录可以节省存储空间
      • 跨块记录
        当变长记录大于物理块长时,会发生逻辑记录跨越物理块的情形,这种情况下,逻辑记录被分割成段写到块中,读出时再做分配。跨块记录适合文件在不同物理特性的设备类型之间传送时使用
    • 记录键

      为了方便组织和管理记录式文件,定义了一个能标识某条逻辑记录的数据项,称为记录键,也叫关键字,简称。同一个文件中,能唯一地标识某条逻辑记录的键称为主键。类似于数据库表的主键
  • 文件物理结构

    文件的物理结构和组织是指逻辑文件在物理存储空间中的存放方法和组织关系,有两类方法可用来构造文件物理结构:计算法(设计映射算法)和指针法(设置专门指针),下面是几种常见的文件物理结构
    • 顺序文件

      • 又称连续文件,其逻辑记录顺序和物理块顺序完全一致,记录按照出现的次序被顺序读写或修改
      • FCB中保存的磁盘定位信息由第一个物理块地址和文件信息块的总块数组成
      • 磁带上的文件是典型的顺序文件
      • 优点:速度快
      • 缺点:插入,修改文件记录困难;处理变长记录困难;浪费空闲块
    • 连接文件

      • 使用连接字(又称指针)来标识文件中各条记录之间的关系(类似于数据结构中的链表)
      • 存取信息必须通过缓冲区,待获得连接字后,才能找到下一个物理块的位置,因而仅适宜于顺序存储
      • 连接结构克服了顺序结构不适宜增删改的缺点,但在其他方面又会失去一些性能
    • 索引文件

      • 系统为每个文件建立索引表,利用索引表来搜索记录的文件称为索引文件
      • 索引结构是连接结构的一种扩展,记录可以散列存储,具有直接读写任意记录的能录
    • 直接文件

      • 为了改善连接文件查找需遍历整个链接结构的缺点,利用哈希法将记录的关键字与其地址之间建立某种对应关系,以便实现快速存取。又称散列文件或哈希文件