文件系统-文件存储空间管理

        文件存储空间管理的核心是空闲块的组织、分配与回收,确保高效利用磁盘空间并快速响应文件操作(创建、删除、扩展)。以下是三种主流方法:

 

1. 空闲表法(连续分配)

原理:类似内存动态分区,维护空闲盘区表(表项含起始块号、块数),按首次适应、最佳适应等算法分配连续盘区。

  • 分配示例:文件需5块 → 查空闲表找≥5块的连续区(如块10-14,块数5)→ 分配并更新表。
  • 回收示例:释放块20-24 → 检查前后是否相邻(如块15-19已空闲)→ 合并为15-24(块数10)。

优缺点
优点

  • 分配速度快(连续块减少磁盘寻道,适合小文件,如1-5块)。
  • 支持快速空间回收(合并相邻空闲区)。

缺点

  • 产生外部碎片(删除文件后形成小空闲区难以利用)。
  • 大文件分配需大连续区(磁盘碎片化后难满足)。

 

2. 空闲链表法(离散分配)

将空闲盘区/块用链表组织,分盘块链盘区链

空闲盘块链
  • 原理:每个空闲盘块含指向下一块的指针,链表头尾指针存超级块。
  • 分配:链首摘块(如请求1块 → 取链首块,链头后移)。
  • 回收:新释放块链入尾部。

优缺点
优点

  • 分配/回收简单(单块操作,适合零散小分配)。
  • 无外部碎片(离散分配)。

缺点

  • 分配多块需遍历链表(如要5块 → 循环摘5次,效率低)。
  • 链表长(每个块1指针,大磁盘链表庞大)。
空闲盘区链

原理:空闲盘区(多连续块)组成链表,盘区含指向下区指针块数

分配:按首次适应查链(如要5块 → 找首个≥5块的盘区,分割分配)。

回收:检查相邻盘区是否合并(类似空闲表法)。

优缺点
优点

  • 分配大块高效(一次分配多块,减少I/O)。
  • 链表短(盘区数<盘块数)。

缺点

  • 分配逻辑复杂(需维护盘区大小,分割/合并盘区)。

3. 位示图法(高效映射)

原理:用二进制位表示盘块状态(0=空闲,1=已分配),位示图存内存。

分配示例

  1. 扫描位示图找首个0位(如行i=2,列j=3,n=每行位数16)。
  2. 计算块号 ( b = 16×(2-1)+3 = 19 )。
  3. 置map[2,3]=1。

回收示例

  1. 块号 ( b=19 → i=(19-1)/16+1=2,j=(19-1)%16+1=3 )。
  2. 置map[2,3]=0。

优缺点
优点

  • 分配/回收快速(内存操作,O(1)查位)。
  • 支持位运算快速查找空闲块/连续块(如用__builtin_ffs找首个0位)。
  • 位示图小(如1TB磁盘,块大小4KB → 总块数 ( 1TB/4KB=220 ),位示图需 ( 220/8=128KB ))。

缺点

  • 磁盘扩容麻烦(需扩展位示图,重新映射)。

 


对比总结

方法

分配单位

数据结构

适用场景

典型系统

空闲表法

连续盘区

空闲盘区表

小文件(1-5块),磁盘碎片化少

早期OS(如DOS部分场景)

空闲链表

盘块/盘区

盘块链/盘区链

零散小分配(盘块链)/大块分配(盘区链)

嵌入式系统/老文件系统

位示图法

单个盘块

内存位示图

现代OS(如Linux ext4部分场景)

Linux、Windows(部分模块)


核心考点 📌

1、位示图公式

  • 块号 b = n×(i-1)+j (n=每行位数,i=行,j=列)。
  • i = (b-1) \div n + 1 ,列 j = (b-1) \% n + 1

2、空闲链表差异

  • 盘块链:分配单块快,多块慢(遍历)。
  • 盘区链:分配大块快,管理复杂。

3、外部碎片问题

  • 空闲表法/盘区链可能产生(连续分配),位示图法/盘块链无(离散分配)。

 


总结

文件存储空间管理是“空间效率”与“时间效率”的博弈:

  • 位示图法因内存映射和位运算优势,成为现代OS首选(如Linux用位图管理inode分配)。
  • 空闲链表/表法作为补充,用于特定场景(如U盘的简单FAT文件系统用链表)。
    理解每种方法的适用场景,能更好地分析文件系统性能(如大文件写入为何慢——是否因缺乏连续空闲区)。

一句话记忆:空闲表管大连续,链表分块或分区,位示图快省空间,公式计算莫忘记! ✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90101.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫实战-小案例:爬取苏宁易购的好评

一、项目背景与价值1 为什么爬取商品好评? 消费者洞察:分析用户真实反馈,了解产品优缺点 市场研究:监测竞品评价趋势,优化产品策略二.实现代码from selenium import webdriver from selenium.webdriver.edge.options i…

Spring Boot环境搭建与核心原理深度解析

一、开发环境准备 1.1 工具链选择 JDK版本:推荐使用JDK 17(LTS版本),与Spring Boot 3.2.5完全兼容,支持虚拟线程等JDK 21特性可通过配置启用构建工具:Maven 3.8.6(配置阿里云镜像加速依赖下载…

Java自动拆箱机制

在黑马点评项目中,提到了一个细节,就是Java的自动拆箱机制,本文来简单了解一下。Java 的​​自动拆箱机制(Unboxing)​​是一种编译器层面的语法糖,用于简化​​包装类对象​​(如 Integer、Boo…

哈希算法(Hash Algorithm)

哈希算法(Hash Algorithm)是一种将任意长度的数据映射为固定长度的哈希值(Hash Value)的算法,广泛应用于密码学、数据完整性验证、数据结构(如哈希表)和数字签名等领域。🧠 一、哈希…

黑马点评使用Apifox进行接口测试(以导入更新店铺为例、详细图解)

目录 一、前言 二、手动完成接口测试所需配置 三、进行接口测试 一、前言 在学习黑马点评P39实现商铺缓存与数据库的双写一致课程中,老师使用postman进行了更新店铺的接口测试。由于课程是22年的,按照我从24年JavaWebAI课程所学习使用的Apifox内部其实…

Ubuntu 虚拟机配置 与Windows互传文件

在VMware中为Ubuntu虚拟机设置共享文件夹 设置共享文件夹可以传递大量文件 在VMware的设置中打开共享文件夹功能,并设置共享文件夹的目录。 点击添加后,选择一个电脑上的文件夹,这个文件夹最好是新建的空的。 完成后在“文件夹”列表中就…

机器学习对词法分析、句法分析、浅层语义分析的积极影响

机器学习在自然语言处理的词法、句法及浅层语义分析中产生了革命性影响,显著提升了各任务的精度和效率。以下是具体影响及实例说明:​​一、词法分析​​1. ​​中文分词​​​​提升歧义消解能力​​:传统方法依赖规则或统计,但深…

初学者STM32—USART

一、简介USART(Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步/异步收发器)是一种常见的串行通信协议,广泛应用于微控制器、传感器、模块和其他电子设备之间的数据传输。本节课主要学习USART的基本结构以及其…

A316-V71-Game-V1:虚拟7.1游戏声卡评估板技术解析

引言 随着游戏产业的蓬勃发展,沉浸式音频体验成为提升游戏体验的关键因素。本文将介绍一款专为游戏音频设计的评估板——A316-V71-Game-V1,这是一款基于XMOS XU316技术的虚拟7.1游戏声卡评估平台。产品概述 A316-V71-Game-V1是一款专为虚拟7.1游戏声卡设…

小白成长之路-部署Zabbix7

文章目录一、概述二、案例三、第二台虚拟机监控总结一、概述 二、案例 实验开始前: systemctl disable --now firewalld setenforce 0 Rocky9.4部署Zabbix7 一、配置安装源 rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-5.el…

飞书非正常显示与权限问题解决方案

可能是本地缓存导致的,让员工参考以下方法操作下:看不懂下面的建议删除飞书再重新安装;博主就遇到过版本低的原因,试过下面方面都不行。结果就是删除重新安装,博主是mac电脑。Windows 系统关闭飞书。如果不能关闭&…

第十八节:第八部分:java高级:动态代理设计模式介绍、准备工作、代码实现

程序为什么需要代理以及代理长什么样如何为java对象创建一个代理对象代码: BigStar类 package com.itheima.day11_Proxy;public class BigStar implements Star {private String name;public BigStar(String name) {this.name name;}public String sing(String nam…

Grok网站的后端语言是php和Python2.7

老马的Grok模型 https://grok.com/#subscribephp语法这里还出现了两个bug后端语言能看到是php和python2.7要说卷还是得看中国的程序员啊,天天就是新技术,赶不上别人就35岁毕业退休

开发者的AI认知指南:用大模型重新理解人工智能(下)

第三篇 深度学习探索:神经网络的奥秘解析 从手工特征工程到自动特征学习,深度学习为什么能让AI"看懂"图片、"听懂"语音?让我们用开发者的视角揭开神经网络的神秘面纱。 深度学习的"代码革命" 还记得我们在第二…

基于单片机智能消毒柜设计

传送门 👉👉👉👉其他作品题目速选一览表 👉👉👉👉其他作品题目功能速览 概述 本设计实现了一种基于单片机的高效智能消毒柜系统,集精准灭菌、安全防护与能耗管理于…

什么是GCN?GCN与GNN有哪些区别?

文章目录1. 什么是图神经网络(GNN)GNN通用计算框架2. 图卷积网络(GCN)详解2.1 GCN核心公式2.2 GCN特点3. GCN与GNN的区别4. 如何选择GCN或GNN5. 典型应用案例6. 代码示例(PyTorch Geometric)7. 发展趋势1. 什么是图神经网络(GNN) 图神经网络(Graph Neural Network, GNN)是一类…

【HarmonyOS】ArkUI - 声明式开发范式

一、UI 开发框架 在 HarmonyOS 开发中,官方主要推出了两种开发框架,一个是基于 Java 的,一个是基于 ArkTS 的。 基于 Java:应用中所有用户界面元素都由基础组件 Component 和组件容器 ComponentContainer 对象构成。基于 ArkTS&…

Python 绘制各类折线图全指南:从基础到进阶

折线图是数据可视化中最常用的图表类型之一,适用于展示数据随时间或有序类别变化的趋势。无论是分析销售额波动、温度变化,还是对比多组数据的趋势差异,折线图都能直观呈现数据的变化规律。本文将详细介绍如何用 Python 的 Matplotlib、Seabo…

MySql 运维性能优化

内存相关配置 innodb_buffer_pool_size:这是 InnoDB 存储引擎最重要的参数,用于缓存数据和索引。建议设置为服务器可用内存的 50%-70%(对于专用数据库服务器)。 innodb_buffer_pool_size 8G # 根据服务器内存调整innodb_log_buf…

UG 图形操作-找圆心

【1】点击分析-测量【2】 选择点,点对话框【3】选择圆弧中心【4】 选择对象