5. 空闲分区管理

1. 存储空间的划分 & 初始化

划分:将物理磁盘划分为一个个的文件卷逻辑卷、逻辑盘),如 C 盘、D 盘等

初始化:把每个文件卷划分为目录区、文件区

  • 目录区:存放文件目录信息(FCB)、用于磁盘存储空间管理的信息

  • 文件区:用于存放文件数据

2. 空闲表法

适用于连续分配方式

2.1 分配磁盘块

与内存管理中动态分区分配类似,为一个文件分配连续的存储空间。同样可采用首次适用最佳适应最坏适应等算法来决定要为文件分配哪个区间

2.2 回收磁盘块

与内存管理中动态分区分配类似,当回收某个存储区时需要有四种情况:

  • 回收区前后都没有空闲区

  • 回收区前面有空闲区

  • 回收区后面有空闲区

  • 回收区前后都有空闲区

注意:合并

3. 空闲链表法

3.1 空闲盘块链

盘块为单位组成一条链

操作系统保存着链头链尾指针

分配方法:若某文件申请 K 个盘块,则从链头依次摘下 K 个盘块分配,并修改空闲链的链头指针

回收方法:回收的盘块依次挂到链尾,并修改空闲链的链尾指针(适用于离散分配的物理结构)

3.2 空闲盘区链

盘区为单位组成一条链

操作系统保存着链头链尾指针

分配方法:若某文件申请K 个盘块,则可以采用首次适应、最佳适应等算法,从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘区,分配给文件。若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针、盘区大小等数据

回收方法:若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。若回收区没有和任何空闲区相邻,将回收区作为单独的一个空闲盘区挂到链尾(离散分配、连续分配都适用)

4. 位示图法

每个二进制位对应一个盘块。在下图中,“0” 代表盘块空闲, “1” 代表盘块已分配。位示图一般用连续的“字”来表示,如本例中一个字的字长是 16 位,字中的每一位对应一个盘块。因此可以用(字号,位号)对应一个盘块号

(字号,位号)= (i,j)的二进制对应的 盘块号 b = n * i + j

分配方法:若文件需要 K 个文件

  1. 顺序扫描位示图,找到 K 个相邻或不相邻的 “0”

  2. 根据字号、位号算出对应的盘块号,将相应盘块分配给文件

  3. 将相应位设置为 “1”

回收方法:

  1. 根据回收的盘块号计算出对应的字号、位号

  2. 将相应二进制位设为 “0”

5. 成组链接法

Last updated