第五章 文件系统¶
文件是信息存储和访问的基本单位
负责处理文件的部分就叫做文件系统
用户关心的:
- 对外提供的用户接口有如何
操作系统关心的:
- 有关文件的各个模块如何实现
用户视角¶
文件是一种抽象机制:可以视作一个单独的连续的逻辑地址空间
-
文件要命名:文件名.扩展名(Unix 区分大小写,Windows 不区分大小写;最多255个字符)
-
文件的结构:逻辑结构;内部无结构:字节流,对外有组织的结构
-
文件的分类:普通文件(二进制 or ASCII)& 目录文件(管理文件系统结构的系统文件)
- 文件的属性:保护信息、创建者、只读标志位、隐藏标志位、系统标志位、创建时间、最后访问时间、最后修改时间、文件长度
- 文件的使用:存取(随机存取,读写指针直接移动到对应位置);访问:...;控制:...
目录是一种管理、组织、分类文件的方法
目录是一张表格,记录了在该目录下的每一个文件的文件名,其他管理信息
表格本身以文件的形式存放在硬盘上;
系统开发者视角¶
物理块:磁盘上一个个大小相同的块【一个或多个连续的扇区】
逻辑块:逻辑地址空间的块
布局¶
主磁盘的扇区 0 是主引导记录(MBR),结尾是一个分区表【记录所有分区的起始扇区和大小,有一个活动分区】
某个分区的内容:
- 引导块:一个将操作系统程序装入内存的程序
- 分区控制块:保存了这个分区的一些重要参数
- 空闲空间管理
- I 结点
- 根目录
- 普通文件和目录
MBR 的限制:分区大小 2^32 * 2^9 最大 2 TB
分区总数最大位 4
新的分区结构 GPT
分区大小最大 8 ZB (Windows 限制 128TB)
分区总数 windows 限制 128 个
文件的实现¶
文件控制块:文件存在的标志(文件的各种属性以及文件所在的物理块信息)【称为 i-node】
物理结构:逻辑块和物理块之间的映射关系
- 连续结构
- 优点:快、简单
- 缺点:外碎片,不能动态增长
- 链表结构
- 优点:克服了连续结构的所有问题
- 缺点:不能随机访问,否则速度会很慢;链表信息破坏物理块完整度
- 改进:带有文件分配表(FAT)的链表结构
- 把每一个物理块中的链表抽出来,单独构成一个表格,放到内存之中,叫做文件分配表
- 实现:按照物理块建立 FAT 索引,在 FCB 中记录第一个块的位置,在 FAT 的每一个块中记录该文件下一个块的位置
- FAT 表的大小 = FAT 表项的个数 * 表项宽度;FAT 表能表示的磁盘分区的最大容量:FAT表项的最大个数 * 块的大小
- 索引结构:直接全部存到 FCB
- 每一个文件都有一个索引节点(就是维护一个小小的数组)
- 如果物理块太多了,就新建一个二级索引
- 只将正在使用的文件索引装入内存
- 每一个文件都有一个索引节点(就是维护一个小小的数组)
目录的实现¶
目标:给出路径名,对应到控制块
- 目录项的内容
- 直接法:目录项 = 文件名 + FCB
- 间接法:目录项 = 文件名 + FCB 的地址
- 长文件名问题
- 目录搜索方法
系统调用的实现¶
Info
这里会考。具体的实现结构。和系统调用一起考。
数据结构:
- 位于外存上的数据结构:
- 目录结构
- 文件控制块 FCB
- 位于内存中的数据结构
- 系统打开文件表
- 已经打开的文件的 FCB 和共享计数(打开了多少次)
- 进程打开文件表
- 打开方式、读写指针、在系统表中的索引
- 系统打开文件表
- 打开文件的方式
- 第57页ppt,好长...
- 检查合法性
- (系统 + 1 项目)共享计数值 + 1
- FCB 读入内存
- 进程 +1 项目
- 返回一个指针,指向文件表
-
关闭文件的方式
- 删除进程文件表
- 共享计数值 -1
- 复制回外存(删除系统表)
-
读取文件
- 找 FCB
- 验证合法性
- 以块位单位来访问外存
空闲空间管理¶
- 位图法: bitmap...
- 链表法: 把空闲块通过指针串起来
- 索引法: 专门维护一个表,记录所有空闲块的编号