1. 文件和文件系统
1.1 文件系统架构⭐
- 设备驱动—Device IO layer(外设指磁盘,磁带等辅存设备)
- 基本文件系统—Physical layer
- 基本IO管理程序—Directory management layer
- 逻辑IO—Logical layer
2. 文件组织和访问
文件组织 | 数据结构 | ||
---|---|---|---|
堆 Pile | 优点 | 最简单,按照达到顺序被收集,记录的组成域可以不同,没有规范 |
|
缺点 | 堆文件没有结构,访问记录是需要穷举查找 | ||
顺序文件 |
优点 | 最常见,每条记录长度相同,且组成记录的域也是数量相同,长度固定 | |
缺点 | 记录有规范,域的位置大小都已知,只需要保存域的值,访问记录还是需要使用顺序查找 | ||
索引顺序文件 |
优点 | 保持了顺序文件的特点,增加了索引和溢出文件 |
|
缺点 | 基于文件的域进行处理,无法使用其他属性查找记录 |
||
索引文件 | - 完全索引类似索引顺序方式 - 部分索引运行使用定义的属性进行查找 |
||
直接/散列文件 | 允许直接访问磁盘中任何一个地址已知块 |
3. 记录组块
.
记录组块 | 如上图所示,记录是访问结构化文件的逻辑单元,而内存中的块是与辅存IO交互的基本单位,因此记录必须组织成块 |
---|---|
定长 | 记录定长,且若干完整记录在一块,因此块内会产生内部碎片 |
变长跨越式 | 使用变长记录,使得块中无剩余空间,但有些记录会跨块,使用指针连接 |
变长非跨越式 | 使用变长记录,但不允许跨块,因此还会有内部碎片 |
4. 辅存管理
4.1 文件空间分配:
文件空间分配时有三个问题:
- 是否一次分配空间
- 空间分配多少
- 如何追踪分配给文件的分区
对应解决:
分配策略 | - 预分配:开始就声明文件大小,一次就分配完成 - 动态分配:有需要时分配 |
---|---|
分区大小 | - 动态的大规模分区:性能好又避免浪费 - 以块为单位:灵活性强,但需要的FAT更大 |
如何追踪 | 使用文件分配表FAT来管理 |
4.2 文件分配方式
连续 | 文件创建时分配一组连续的块,采用基于长度可变分区的预分配策略 |
---|---|
链式 | 基于单个块的动态分配,适合顺序文件,局部性原理不再适用,可周期性合并 |
索引 | 每个文件在FAT中有一级索引,文件每个分区在索引中有一个表项,文件的索引单独保存在一块中 |
既可以基于分区,也可以基于块,需要定期整理<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/670787/1579338338305-744a43e3-eace-4413-9cef-c01aa9e2745f.png#align=left&display=inline&height=199&name=image.png&originHeight=347&originWidth=852&size=324700&status=done&style=none&width=487) |