文件分配方法
分配方法定义了文件在磁盘块中的存储方式。有三种主要的磁盘空间或文件分配方法。
- 连续分配
- 关联分配
- 索引分配
这些方法背后的主要思想是提供:
- 有效的磁盘空间利用率。
- 快速访问文件块。
这三种方法各有优缺点,如下所述:
1. 连续分配
在这个方案中,每个文件都占据磁盘上一组连续的块。例如,如果一个文件需要 n 个块,并且给定一个块 b 作为起始位置,那么分配给该文件的块将是: b、b+1、b+2、……b+n-1。这意味着给定起始块地址和文件的长度(以所需的块数表示),我们可以确定文件占用的块。
具有连续分配的文件的目录条目包含
- 起始块地址
- 分配部分的长度。
下图中的文件'mail'从第19个块开始,长度为6个块。因此,它占用了19、20、21、22、23、24 个块。
好处:
- 顺序访问和直接访问都受此支持。对于直接访问,从块 b 开始的文件的第 k 个块的地址可以很容易地获得为 (b+k)。
- 这是非常快的,因为由于文件块的连续分配,搜索次数很少。
缺点:
- 这种方法受到内部和外部碎片的影响。这使得它在内存利用率方面效率低下。
- 增加文件大小很困难,因为这取决于特定实例中连续内存的可用性。
2. 链表分配
在这个方案中,每个文件都是一个不需要连续的磁盘块的链表。磁盘块可以分散在磁盘上的任何位置。
目录条目包含指向起始和结束文件块的指针。每个块包含一个指向文件占用的下一个块的指针。
下图中的文件“jeep”显示了块是如何随机分布的。最后一个块 (25) 包含 -1 表示一个空指针并且不指向任何其他块。
好处:
- 这在文件大小方面非常灵活。由于系统不必寻找连续的内存块,因此可以轻松增加文件大小。
- 这种方法不会受到外部碎片的影响。这使得它在内存利用率方面相对更好。
缺点:
- 由于文件块在磁盘上随机分布,因此需要大量寻道来单独访问每个块。这会使链接分配变慢。
- 它不支持随机或直接访问。我们不能直接访问文件的块。可以通过块指针从文件的起始块开始依次遍历 k 个块(顺序访问)来访问文件的块 k。
- 链接分配中所需的指针会产生一些额外的开销。
3. 索引分配
在该方案中,称为索引块的特殊块包含指向文件占用的所有块的指针。每个文件都有自己的索引块。索引块中的第 i 个条目包含第 i 个文件块的磁盘地址。如镜像所显示,目录条目包含索引块的地址:
好处:
- 这支持对文件占用的块的直接访问,因此提供对文件块的快速访问。
- 它克服了外部碎片化的问题。
缺点:
- 索引分配的指针开销大于链接分配。
- 对于非常小的文件,例如仅扩展 2-3 个块的文件,索引分配将为指针保留一个完整的块(索引块),这在内存利用率方面是低效的。然而,在链接分配中,我们失去了每个块只有 1 个指针的空间。
对于非常大的文件,单个索引块可能无法容纳所有指针。
以下机制可用于解决此问题:
- 链接方案:该方案将两个或多个索引块链接在一起以保存指针。每个索引块然后将包含指向下一个索引块的指针或地址。
- 多级索引:在该策略中,一级索引块用于指向二级索引块,二级索引块又指向文件占用的磁盘块。这可以扩展到 3 个或更多级别,具体取决于最大文件大小。
- 组合方案:在该方案中,一个称为Inode(信息节点)的特殊块包含文件的名称、大小、权限等所有信息,Inode的剩余空间用于存储包含的磁盘块地址实际文件如下图所示。 Inode 中的前几个指针指向直接块,即指针包含包含文件数据的磁盘块的地址。接下来的几个指针指向间接块。间接块可以是单间接、双间接或三间接。单个间接块是不包含文件数据的磁盘块,而是包含文件数据的块的磁盘地址。同样,双间接块不包含文件数据,而是包含包含文件数据的块地址的块的磁盘地址。