文件的逻辑结构

从用户角度看文件,由用户的访问方式确定。

逻辑结构:文件内部的数据应该如何组织起来

  • 无结构文件:文件内部的数据就是一系列二进制流或字符流组成,又称 流式文件
  • 有结构文件:由一组相似的记录组成,又称 记录式文件。每条记录又有若干个数据项组成。如:数据库表文件。一般来说,每条记录有一个数据项可作为 关键字(作为识别不同记录的 ID)。根据每条记录是否等长,又可分为 定长记录 可变长记录。
    • 顺序文件
    • 索引文件
    • 索引顺序文件

流式文件:构成文件的基本单位是字符(文件是有逻辑、无结构的一串字符串的集合) 记录式文件:文件由若干个记录组成,可以按记录进行读、写、查找等操作(每条记录有其内部结构)

  • 顺序存取(访问)
  • 随机存取(访问)

提供读写位置(当前位置),例如:UNIX 的 seek 操作

文件的物理结构

文件的物理结构,又称存储结构,指的是文件在存储介质上的存放方式。

主要解决两个问题:

  • 假设一个文件被划分成 N 块,这 N 块在磁盘上是怎么存放的?
  • 其地址(块号或簇号)在 FCB 中是怎样记录的?

因为磁盘具有直接访问的特性,所以用磁盘存放文件,有很大的灵活性。

连续结构/顺序结构

文件的信息存放在若干连续的物理块中。

  • 优点
    • 简单
    • 支持顺序存取和随机存取
    • 所需的磁盘寻道次数和寻道时间最少
    • 可以同时读入多个块,检索一个块也很容易
  • 缺点
    • 文件不能动态增长(需要为每个文件预留若干物理块以满足文件增长的部分需要)
    • 不利于文件插入和删除
    • 外部碎片:紧缩技术

链接结构

一个文件的信息存放在若干不连续的物理块中,各块之间通过指针连接,前一个物理块指向下一个物理块。

  • 优点
    • 提高磁盘空间利用率,不需要为每个文件预留物理块
    • 有利于文件插入和删除
    • 有利于文件动态扩充
  • 缺点
    • 存取速度慢,不适于随机存取
    • 当物理块间的连接指针出错时,数据丢失
    • 更多的寻道次数和寻道时间
    • 链接指针占用一定的空间,降低了空间利用率

索引结构

  • 一个文件的信息存放在若干不连续物理块中
  • 系统为每个文件建立一个专用数据结构——索引表,并将这些物理块的块号存放在该索引表中
  • 索引表就是磁盘块地址数据,其中第 i 个条目指向文件的第 i 块

优缺点:

  • 优点
    • 既能顺序存取,又能随机存取
    • 满足了文件动态增长、插入删除的要求
    • 能充分利用磁盘空间
  • 缺点
    • 较多的寻道次数和寻道时间
    • 索引表本身带来了系统开销,如:内存、磁盘空间、存取时间

UNIX的三级索引结构

UNIX 文件系统采用的是多级索引结构(综合模式)

  • 每个文件的祝索引表有 15 个索引项(FCB中),每项 2 个字节
  • 前 12 项直接存放文件的物理块号(直接寻址)
  • 如果文件大于 12 块,则利用 13 项指向一个物理块,在该块中存放的是一个索引表

假设扇区大小大小为 512 字节,物理块等于扇区块大小,以及索引表可以存放 256 个物理块号。