【概述】
文件分配方式,就是在用户使用逻辑地址操作文件时,OS 负责实现文件从逻辑地址到物理地址的映射
而文件的物理结构与外存的组织方式有关,对于不同的外存组织方式,将形成不同的文件物理结构
因此,不同的外存组织方式就导致了映射的方式不同,目前常用的外存组织方式有:
- 连续分配方式:为每个文件分配一片连续的磁盘空间,由此形成的物理结构是顺序式的文件结构
- 链接分配方式:为每个文件分配不连续的磁盘空间,通过链接指针将一个文件的所有盘块链接在一起
- 索引分配方式:形成索引式文件结构
【连续组织方式】
连续组织方式又称连续分配方式,其为每个文件分配一组相邻的盘块,逻辑文件中的记录顺序地存储到邻接的物理块中,使得逻辑文件中的记录顺序与存储器中文件占用盘块的顺序一致
该方式顺序访问相对容易,且速度较快,但要求为一个文件分配连续的存储空间会产生大量的外碎片,严重地降低了外存空间的利用率,且创建文件时要给出文件大小,存储空间利用率不高,不利于文件的动态增加和修改
【链接组织方式】
链接方式
采用链接组织方式时,将文件分配多个不连续的盘块,再通过盘块上的链接指针,将同属一个文件的多个离散的盘块链接成一个链表,由此形成链接文件
其有两种链接方式:
- 隐式链接:在文件目录的每个目录项中,包含指向链接文件第一个盘块和最后一个盘块的指针,每个盘块拿出若干字节,记录指向下一盘块号的指针,即链接信息隐含记录在盘块数据中
- 显示链接:将用于链接各物理块的指针显示地存放在内存的一张链表中,在整个磁盘中仅设置一张
对于隐式链接,其问题在于只能顺着盘块读取,对随机访问是低效的
对于显示链接,由于查记录的过程是在内存中进行的,因此其不仅显著地提高了检索速度,还大大减少了访问磁盘的次数
由于显示链接将分配给文件的所有盘块号都放在该表中,故将该表称为文件分配表(File Allocation Table,FAT)
FAT 表的相关计算
FAT 表的有关计算与下列三个公式有关:
- $表项个数 = 盘块个数 = \frac{容量}{盘块大小}$
- 表项大小:与盘块数量编号需要的位数有关
- FAT 表大小 = 表项个数 * 表项大小
例如:一个 $1.2M$ 的磁盘,盘块 $512B$,文件系统采用 FAT12 格式,问 FAT 表大小是多少
由于磁盘容量为 $1.2M$,盘块 $512B$,因此,有:
采用 FAT12 格式,盘块数量编号所需位数为 $12$ 位
那么,有:
【索引组织方式】
对于链接方式来说,其不能支持高效的盘块直接存取,如果要对一个文件进行直接存取,仍需在 FAT 中顺序的查找许多盘块号。因此,FAT 需占用较大的内存空间,当磁盘容量较大时,FAT 可能要占用数 MB 以上的内存空间
因此,在系统运行时,只需要涉及部分文件,FAT 表无需全部调入内存,即对每个文件单独建索引表,记录所有分配给它的盘块号,同时,在建立文件时,分配一定的外存空间用于存放文件盘块索引表信息
索引形式适合大文件,对于中小型文件,需要若干链接即可,若用索引分配方式,用一个盘块存放少量索引信息反而不适用
若文件较大,存放索引表也需要多个盘块,如果索引盘块较多,则需要对索引盘块也采取索引方式管理,即多级索引
也就是说,若采用 $m$ 层索引结构,且顶层索引表未调入内存,那么访问一次数据块要进行 $m+1$ 次读磁盘
【三种方式的对比】
三种外存组织方式的对比如下表:
方式 | 访问第 $n$ 条记录 | 目录项 | 优点 | 缺点 |
---|---|---|---|---|
连续组织方式 | 访问磁盘 $1$ 次 | 起始块号、文件长度 | 顺序存取访问快,支持随机访问 | 有外碎片,不利于文件扩展 |
隐式链接方式 | 访问磁盘 $n$ 次 | 起始块号、结束块号 | 无外碎片,文件扩展方便 | 只能顺序访问 |
显式链接方式 | 访问磁盘 $1$ 次 | 起始块号 | 可通过 FAT 实现随机访问 | FAT 占据一定空间 |
索引组织方式 | 访问磁盘 $m+1$ 次 | 链接方式:第一个索引块块号 混合方式:顶级索引块块号 |
支持随机访问,且文件扩展方便 | 索引表占据一定空间,访问数据前要先读索引块 |