【OS笔记36】:文件存储空间管理(一)- 空闲区表法

文章目录

    • [1. 空闲区表的数据结构](#1. 空闲区表的数据结构)
    • [2. 分配算法 (迁移自内存管理)](#2. 分配算法 (迁移自内存管理))
      • [(a) 最先适应算法 (First Fit)](#(a) 最先适应算法 (First Fit))
      • [(b) 最佳适应算法 (Best Fit)](#(b) 最佳适应算法 (Best Fit))
      • [(c ) 最差适应算法 (Worst Fit)](#(c ) 最差适应算法 (Worst Fit))
    • [3. 空闲块的分配与回收流程](#3. 空闲块的分配与回收流程)
    • [4. 内存管理与外存管理的异同](#4. 内存管理与外存管理的异同)

核心思想 :空闲区表法(又称空闲文件目录)与内存管理中的"动态分区分配"极为相似。它将磁盘上的空闲物理块组织成一个表,记录每一组连续空闲块的信息。

1. 空闲区表的数据结构

系统为所有的空闲区建立一张表,每一项对应磁盘上的一个连续空闲区域。

  • 登记单位 :以空闲块为单位进行登记。
  • 记录内容 :空闲区域的起始块号块数
  • 排序规则 :为了提高搜索效率,表中的记录可以:
    • 块号大小排列(方便回收时合并)。
    • 空闲块数量排列(方便分配)。

2. 分配算法 (迁移自内存管理)

当文件申请空间时,系统参照内存管理中"可变分区管理"的算法,从空闲区表中选择一个合适的区域。

(a) 最先适应算法 (First Fit)

  • 排序方式 :空闲块按起始地址(块号)递增的顺序排列。
  • 分配逻辑 :从表头开始查找,找到第一个能满足要求(块数足够)的空闲区即进行分配。

(b) 最佳适应算法 (Best Fit)

  • 排序方式 :空闲区按块数递增的顺序排列。
  • 分配逻辑 :找到第一个能满足要求的空闲区。这种分配后剩下的碎块最小。

(c ) 最差适应算法 (Worst Fit)

  • 排序方式 :空闲区按块数递减的顺序排列。
  • 分配逻辑 :直接看第一项(最大的空闲区)。如果第一项都不能满足,则分配失败。其优点是剩下的碎块依然较大,可以继续利用。

3. 空闲块的分配与回收流程

分配操作

  1. 根据选定的算法(如 FF, BF)从表中选出一个空闲区。
  2. 若分配后有剩余:修改该表项,更新起始块号和剩余块数,将其作为新的空闲区登记。
  3. 若正好分配完(无剩余):直接从空闲区表中删除该记录项。

回收操作

  1. 用户删除文件时,系统回收其占用的物理块。
  2. 核心步骤:合并相邻区
    • 查看回收区的物理块号是否与表中已有的空闲区相邻(前相邻或后相邻)。
    • 若相邻:则合并成一个更大的连续空闲区,更新表项。
    • 若不相邻:在表中增加一个新的记录项。

4. 内存管理与外存管理的异同

学习空闲区表法时,一个关键的区别需要明确:

思考:为什么对内存管理记录"首地址和长度",而对外存管理记录"块号和块数"?

解析:

  1. 访问机制不同
    • 内存 :CPU访问内存是直接根据逻辑地址 通过地址映射机构转换为物理地址。内存是按字节或字编址的,因此记录"首地址"最直观。
  2. 物理结构不同
    • 外存(硬盘) :CPU无法直接访问硬盘,必须通过I/O指令。硬盘的物理结构由磁道、柱面、磁头组成。
    • 块 (Block):为了方便管理,操作系统将磁盘抽象为大小相同的"块"。磁盘读写的最小单位是块,因此记录"块号"和"块数"最符合磁盘的物理特性。

小结

  • 适用场景 :空闲区表法主要适用于连续分配方式的文件系统。
  • 优点:结构简单,分配连续空间时效率高。
  • 缺点:随着系统运行时间增加,会产生大量的磁盘碎片(外部碎片),且当磁盘空间极大时,空闲区表本身会变得很大,检索效率下降。

后续内容:

空闲区表法是管理方式的一种。后续会学习 "空闲块链接法""位示图法"。位示图法在现代操作系统(如Linux, Windows)中应用广泛,也是常见的考核点。

相关推荐
菩提小狗9 小时前
Sqlmap双击运行脚本,双击直接打开。
前端·笔记·安全·web安全
代码游侠9 小时前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
逑之9 小时前
C语言笔记11:字符函数和字符串函数
c语言·笔记·算法
逑之9 小时前
C语言笔记1:C语言常见概念
c语言·笔记·c#
镜中人★9 小时前
408计算机组成原理考纲知识点
网络·笔记
ljt272496066110 小时前
Compose笔记(六十八)--MutableStateFlow
android·笔记·android jetpack
强子感冒了10 小时前
Java 学习笔记:File类核心API详解与使用指南
java·笔记·学习
别了,李亚普诺夫11 小时前
USB拓展坞-PCB设计学习笔记
笔记·学习
逑之11 小时前
C语言笔记14:结构体、联合体、枚举
c语言·开发语言·笔记