# 5.4 文件存储空间管理 ## 一、存储空间管理概述 ### 1.1 管理对象 **空闲空间**: - 未分配给文件的磁盘块 - 需要记录和管理 **已分配空间**: - 已分配给文件的磁盘块 - 通过文件系统管理 ### 1.2 管理目标 - **有效利用空间**:减少浪费 - **快速分配**:提高分配效率 - **快速回收**:提高回收效率 --- ## 二、空闲空间管理方法 ### 2.1 空闲表法 **思想**: - 使用空闲表记录所有空闲块 - 每个表项包含起始块号和块数 **空闲表结构**: | 序号 | 起始块号 | 块数 | |-----|---------|------| | 1 | 5 | 3 | | 2 | 12 | 5 | | ... | ... | ... | **分配算法**: - **首次适应**:选择第一个满足要求的空闲区 - **最佳适应**:选择满足要求的最小空闲区 **适用**: - 连续分配方式 ### 2.2 空闲链表法 **思想**: - 将所有空闲块链接成链表 - 每个空闲块包含指向下一个空闲块的指针 **实现**: - 空闲块的第一项作为指针 - 最后一个空闲块的指针为NULL **分配**: - 从链表头部取出一个空闲块 **回收**: - 将回收块插入链表头部 **适用**: - 链接分配方式 ### 2.3 位示图法 **思想**: - 使用二进制位表示磁盘块的使用情况 - 0表示空闲,1表示已分配 **位示图结构**: ``` 块号:0 1 2 3 4 5 6 7 8 9 ... 位: 0 1 1 0 1 0 0 1 0 0 ... ``` **计算**: - 块号 = i × 字长 + j - i为字号,j为位号 **优点**: - 占用空间小 - 容易找到连续的空闲块 **缺点**: - 需要扫描位示图 ### 2.4 成组链接法(UNIX) **思想**: - 将空闲块分成若干组 - 每组记录下一组的空闲块号 - 最后一组用特殊标记结束 **实现**: - 内存中保存一组空闲块号 - 分配时从内存中的组取 - 组空时,从下一组读入 **分配过程**: 1. 从内存中的空闲块组取出一个块 2. 如果是索引块(记录下一组),读入下一组 3. 分配该块 **回收过程**: 1. 将回收块号加入内存中的组 2. 如果组满,将组写入回收块,该块成为新的索引块 **优点**: - 结合了空闲表和空闲链表的优点 - 分配和回收效率高 - 占用内存少 --- ## 三、磁盘配额 ### 3.1 什么是磁盘配额 **磁盘配额**:限制用户或组可以使用的磁盘空间。 ### 3.2 配额类型 **软限制**: - 可以暂时超过 - 超过时会收到警告 - grace period内必须降到限制以下 **硬限制**: - 绝对不能超过 - 超过后不能写入 ### 3.3 配额管理 - 按用户配额 - 按组配额 - 按文件系统配额 --- ## 四、考研重点 1. **空闲空间管理方法**: - 空闲表法:结构、分配算法 - 空闲链表法:实现、分配回收 - 位示图法:结构、计算 - 成组链接法:实现、分配回收过程 2. **各种方法的适用场景** 3. **磁盘配额**:软限制、硬限制 --- *下一节:5.5 文件共享与保护*