文件系統-文件存儲空間管理

????????文件存儲空間管理的核心是空閑塊的組織、分配與回收,確保高效利用磁盤空間并快速響應文件操作(創建、刪除、擴展)。以下是三種主流方法:

?

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
英文地址,請注明出處:http://en.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】 選擇對象