跳转至

第五章 文件系统

文件是信息存储和访问的基本单位

负责处理文件的部分就叫做文件系统

用户关心的:

  • 对外提供的用户接口有如何

操作系统关心的:

  • 有关文件的各个模块如何实现

用户视角

文件是一种抽象机制:可以视作一个单独的连续的逻辑地址空间

  1. 文件要命名:文件名.扩展名(Unix 区分大小写,Windows 不区分大小写;最多255个字符)

  2. 文件的结构:逻辑结构;内部无结构:字节流,对外有组织的结构

  3. 文件的分类:普通文件(二进制 or ASCII)& 目录文件(管理文件系统结构的系统文件)

  4. 文件的属性:保护信息、创建者、只读标志位、隐藏标志位、系统标志位、创建时间、最后访问时间、最后修改时间、文件长度
  5. 文件的使用:存取(随机存取,读写指针直接移动到对应位置);访问:...;控制:...

目录是一种管理、组织、分类文件的方法

目录是一张表格,记录了在该目录下的每一个文件的文件名,其他管理信息

表格本身以文件的形式存放在硬盘上;

系统开发者视角

物理块:磁盘上一个个大小相同的块【一个或多个连续的扇区】

逻辑块:逻辑地址空间的块

布局

主磁盘的扇区 0 是主引导记录(MBR),结尾是一个分区表【记录所有分区的起始扇区和大小,有一个活动分区

某个分区的内容:

  1. 引导块:一个将操作系统程序装入内存的程序
  2. 分区控制块:保存了这个分区的一些重要参数
  3. 空闲空间管理
  4. I 结点
  5. 根目录
  6. 普通文件和目录

MBR 的限制:分区大小 2^32 * 2^9 最大 2 TB

分区总数最大位 4

新的分区结构 GPT

分区大小最大 8 ZB (Windows 限制 128TB)

分区总数 windows 限制 128 个

文件的实现

文件控制块:文件存在的标志(文件的各种属性以及文件所在的物理块信息)【称为 i-node】

物理结构:逻辑块和物理块之间的映射关系

  1. 连续结构
    1. 优点:快、简单
    2. 缺点:外碎片,不能动态增长
  2. 链表结构
    1. 优点:克服了连续结构的所有问题
    2. 缺点:不能随机访问,否则速度会很慢;链表信息破坏物理块完整度
    3. 改进:带有文件分配表(FAT)的链表结构
      1. 把每一个物理块中的链表抽出来,单独构成一个表格,放到内存之中,叫做文件分配表
      2. 实现:按照物理块建立 FAT 索引,在 FCB 中记录第一个块的位置,在 FAT 的每一个块中记录该文件下一个块的位置
      3. FAT 表的大小 = FAT 表项的个数 * 表项宽度;FAT 表能表示的磁盘分区的最大容量:FAT表项的最大个数 * 块的大小
  3. 索引结构:直接全部存到 FCB
    1. 每一个文件都有一个索引节点(就是维护一个小小的数组)
      1. 如果物理块太多了,就新建一个二级索引
    2. 只将正在使用的文件索引装入内存

目录的实现

目标:给出路径名,对应到控制块

  1. 目录项的内容
    1. 直接法:目录项 = 文件名 + FCB
    2. 间接法:目录项 = 文件名 + FCB 的地址
  2. 长文件名问题
  3. 目录搜索方法

系统调用的实现

Info

这里会考。具体的实现结构。和系统调用一起考。

数据结构:

  • 位于外存上的数据结构:
    • 目录结构
    • 文件控制块 FCB
  • 位于内存中的数据结构
    • 系统打开文件表
      • 已经打开的文件的 FCB 和共享计数(打开了多少次)
    • 进程打开文件表
      • 打开方式、读写指针、在系统表中的索引
  • 打开文件的方式
    • 第57页ppt,好长...
    • 检查合法性
    • (系统 + 1 项目)共享计数值 + 1
    • FCB 读入内存
    • 进程 +1 项目
    • 返回一个指针,指向文件表
  • 关闭文件的方式

    1. 删除进程文件表
    2. 共享计数值 -1
    3. 复制回外存(删除系统表)
  • 读取文件

    1. 找 FCB
    2. 验证合法性
    3. 以块位单位来访问外存

空闲空间管理

  1. 位图法: bitmap...
  2. 链表法: 把空闲块通过指针串起来
  3. 索引法: 专门维护一个表,记录所有空闲块的编号