【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)中应用广泛,也是常见的考核点。

相关推荐
花 满 楼33 分钟前
RTA-OS 任务调度机制深度拆解:从 alarm 到期到任务切换的全链路(PowerPC e200)
os·嵌入式软件·汽车电子
海绵宝宝转agent42 分钟前
2026-10-19学习笔记
笔记·学习
金色光环1 小时前
【概率论详细笔记】泊松分布是怎么来的?应该怎么用?
笔记·概率论
又見山1 小时前
双向链接的本质:链接不是功能,是思考留下的痕迹
笔记·obsidian
云水初1 小时前
【agent篇】RAG Agent避坑指南(附高级RAG Agent汇总)
开发语言·笔记·python·学习·langchain·agent·rag
JasmineX-12 小时前
数据结构(笔记)——顺序栈
c语言·数据结构·笔记
坤坤子吖2 小时前
Linux 线程同步与互斥——互斥锁
linux·服务器·c++·笔记·学习
撩得Android一次心动2 小时前
Jetpack Compose 知识点整理3【个人用】
android·笔记·学习·kotlin·android compose
威嵌神州3 小时前
国产化加固计算机项目选型笔记|板卡、整机、平板与定制模块评估要点
笔记·fpga开发·电脑
阿梦Anmory3 小时前
规划领域定义语言(PDDL)学习笔记
笔记·学习