磁盘空间分配分为三种策略:连续分配(Continuous allocation)、链接分配(Linked allocation)、索引分配(Indexed allocation)
1. 连续分配(Contiguous Allocation)
-
每个文件在磁盘上占据一组连续的块。
-
简单,只需要起始位置(块号)和长度(块数)的信息。
-
支持随机访问。在这种情况下,访问任何块都只需要1次物理读取,因为块是连续存储
的。
-
浪费空间(动态存储分配问题),因为文件需要连续的空间。
-
文件不能动态增长。
基于Extent的文件系统是许多较新的文件系统所采用的一种修改后的连续分配方案。在Extent-based文件系统中,磁盘块以Extent的形式分配。
2. 链接分配(Linked Allocation)
其中每个文件都被表示为磁盘块的链表,这些块可以散布在磁盘的任何地方。
-
每个文件是一个由磁盘块组成的链表,这些块可以分散在磁盘上的任何位置。
-
简单,只需要起始地址。
-
无需额外的空间管理系统,不会浪费磁盘空间。
-
不支持随机访问。因为要访问文件中的某个块,必须按照链表顺序遍历整个文件。
-
要访问特定的逻辑块,需要从⽂件的起始块开始,沿着链接列表遍历,直到达到⽬标块。
3. 索引分配(Indexed Allocation)
它将所有指针汇总到索引块中。
-
将所有指向文件数据块的指针集中存储在索引块中。
-
提供了逻辑视图,使文件的访问更加方便。
-
需要索引表(Index Table)来管理文件的索引块。
-
支持随机访问,因为通过索引块可以直接访问文件的任意块。
-
允许动态访问,而不会产生外部碎片问题,但需要索引块的额外开销
索引分配的一个典型应用场景是将逻辑地址映射到物理地址,其中文件的最大大小为256K字(或512块),块大小为512字。在这种情况下,只需要1个索引块来管理索引表,以便进行逻辑到物理地址的映射。
计算过程:
需要8位地址,即1字,所以一个块中可以储存512个地址,对应512块