跳转至

文件系统

文件管理

数据项,记录,文件文件系统的三级结构

文件名与文件类型

  • 文件名 与 拓展名
  • 常见的无结构文件有 源程序,可执行文件,库函数

文件系统的层次结构

alt text

  • I\O 控制层 由磁盘驱动程序等组成
  • 基本文件系统 用于实现内存和磁盘之间的数据块交换
  • 文件组织模块(基本I/O管理程序)
  • 逻辑文件系统 用于记录与处理同文件相关的操作

文件的操作 重点是 打开\关闭 操作

文件的逻辑结构

顺序文件

  • 隐式寻址方式 通过读\写指针查询对应的记录

alt text

  • 显示寻址方式 定长记录可以通过记录的下标直接计算出起始地址(类比于数组的随机访问);但变长记录则无法做到

索引文件

alt text

  • 所有关键字 建立一张索引表(这张表本身是定长记录的顺序文件),此时可以通过定长记录的随机查找快速查找对应记录的首地址

索引顺序文件 索引文件+顺序文件

alt text

  • 将边长记录顺序文件的所有记录分为若干组,为文件建立一张索引表,为每组的第一个记录建立一个索引项,包含指向该记录的指针.
  • 平均查找次数为 \(\sqrt{n}\)
  • 具体理论见DS-分块查找
  • 可以建立多级索引来降低查找次数(类比于多级页表)

文件物理结构

文件物理结构是对磁盘空间的组织方式

连续组织方式

alt text

  • 在连续组织方式的文件目录项中,应该设置物理起始地址域总长度
  • 需要为每一个文件分配连续空间的磁盘,此容量有时候并非总能得到满足;且不适合动态增长(需要整体移动)
  • 会产生 外部碎片

隐式链接组织方式

alt text

  • 在文件目录中应该设置物理块的起始地址和终止地址,每个块中包含指向下一个块的指针
  • 可以分配多个不连续的盘块,消除了外部碎片
  • 只能顺序访问

一组磁盘盘块

显示链接组织方式 引入FAT(文件分配表)来保持盘块间的指针

alt text

  • 在以簇为单位的FAT文件系统中, 簇成为了分配单位

索引组织方法

alt text

  • 在文件目录中,仅记录索引块号,索引块中存放对应盘块的盘块号
  • 支持直接存却
  • 相较于FAT系统, 无须将大FAT表调入内存, 只需要将索引块加入内存即可
  • 不会产生外部碎片

多级索引组织方式

alt text

Unix 混合索引方式

alt text

  • 将索引区划分为直接索引\一级间接索引\二级间接索引等等
  • 可以很好的配合不同大小的作业要求

空闲区表示法和空闲链表

alt text

  • 空闲区表示法,将连续空闲的空闲盘块分配一个表项,其中记录第一个空闲盘块号和空闲盘块数目
  • 起始盘号按递增的次序排列
  • 其分配和回收操作与动态分区基本一致
  • 通常对换空间采取连续组织方式

位示图表示法

alt text

  • 通过将某一个盘块的没一个比特位作为某一个盘块是否使用的标志
  • 例如 [2, 3] 位置的 1 表示序号为16 * 2 + 3 = 35的盘块已被使用
    • 将二维矩阵映射为一维数据 \(b = n \times (i - 1) + j\)

磁盘物理地址(盘块号)与逻辑地址的转换(三维地址)

成组链接法

alt text

  • 栈指针S.free()执向存有当前空白盘块栈含有的空闲盘块的总数
    • 除最后一个空闲盘块栈,其包含的空闲盘块要减1,用0表示结束不是真实的空闲盘块
  • S.free() - 1 指向下一个空闲盘块号栈的首盘块号
    • 若为0则表示这是最后一个空闲盘块栈

文件目录

文件控制块(FCB) 为文件设置用于描述和控制文件的数据结构,文件与FCB 一一对应. FCB的有序集合被称为 文件目录, 一个FCB即是一个文件目录项.一个文件目录也是一个文件即 目录文件.

索引节点(iNode) 对文件目录的一种简化

alt text

  • 文件目录项仅包含文件名与指向索引结点的编号
  • 查询的时候仅需将由iNode组成的文件目录载入内存即可

alt text

单级文件目录和两级文件目录

alt text

alt text

  • 单级目录的缺点在于文件名不允许重复,且查找速度较慢,不便于实现用户文件的共享
  • 二级目录能在一定程度上改善单级目录的缺陷,但同样不便于实现用户文件的共享

树形目录

alt text

  • 从根目录到目的文件的FCB的路径称为绝对路径
  • 从当前目录到目的文件的FCB的路径称为相对路径
  • 树形目录删除一个目录需要注意
    • 若目录下的不含其他目录和文件,则直接删除
    • 否则, 要么递归的删除其下的所有文件与目录;要么 同时 删除所有子目录与文件.

无环有向图目录 对树形目录的自然拓展,便于文件共享.

alt text

文件共享与保护

硬链接 利用索引节点解决共享问题

alt text

  • count 表示当前有多少个目录共享该文件
  • 当count != 0 的时候不可以对共享文件进行删除,会导致空指针问题,必须等待所有共享该文件的目录释放了这个链接才可以.

alt text

符号连接(软连接) 本质是从当前目录出发到目的地址路径的别名

alt text

  • 只有文件的拥有者才拥有为指向其索引节点的指针
  • 其他共享该文件的目录,都是通过OS查询相对路径后对该文件间接操作的
  • 系统会为软连接创建 LINK类型文件, 该文件也需要配置索引节点

访问权 进程对某对象的进行操作,通常包括读\写\打开\删除等等

保护域(域) 进程对一组对象的访问权的集合

  • 进程保护域可以使静态的,在运行区间都不能发现改变
  • 也可以是动态的,在运行直接能在不同域间进行切换

虚拟文件系统与文件系统挂载

虚拟文件系统 屏蔽不同文件系统的差异与操作细节,向上为用户提供了文件操作的统一接口,当用户访问文件的时候,通过VFS提供的统一调用函数来操作不同文件系统的文件.

alt text

文件系统的挂在(mounting) 文件系统在使用前都需要先进行挂载,将设备的文件系统挂载到某个目录后,就可以通过这个目录来访问设备(逻辑设备)上的文件.

Linux文件系统举例

alt text

Linux默认支持虚拟文件系统,通过系统调用实现应用程序与内核中不同文件系统的交互

alt text

  • 文件系统最前面有一个启动扇区,这个启动扇区安装引导装载程序
    • 便于挂载
    • 不用去覆盖硬盘的主引导记录(MBR)扇区
  • 超级块 记录整个文件系统的信息
  • 组描述符 描述每个组块的开始和结束的数据块号
  • 块位图 数据位示图
  • 索引节点位图(iNode bitmap) 表示索引节点是否被使用
  • 索引节点表(iNode table) 内个文件仅占用一个索引节点,文件系统能创建的文件数量与索引节点有关
  • 数据块 ext2仅支持 1KB, 2KB, 4KB三种,每个数据块中仅能放一个文件的数据