軟考(軟件設計師)存儲管理—存儲空間管理,文件共享保護

一、文件存取方法

1. 順序存取(Sequential Access)
  • 原理:按記錄寫入順序依次訪問
  • 特點
    • 讀操作:讀取當前位置,指針自動前移
    • 寫操作:追加到文件末尾
  • 適用場景:磁帶設備、日志文件
文件頭
記錄1
記錄2
記錄3
當前指針
記錄4
文件尾
2. 直接存取(Direct Access / Random Access)
  • 原理:直接定位到任意位置讀寫
  • 操作方式
    • seek(offset) 移動文件指針
    • read(size)/write(data) 在當前位置操作
  • 磁盤支持:通過計算物理地址實現
ProgramFileseek(offset=1024)read(128 bytes)返回第1024-1151字節ProgramFile
3. 索引存取(Indexed Access)
  • 原理:通過索引表查找記錄位置
  • 工作流程
    1. 搜索索引找到記錄鍵
    2. 獲取記錄物理地址
    3. 直接訪問該地址
找到位置
查詢記錄 ID=100
搜索索引塊
位置:0x1200
直接訪問磁盤塊0x1200

二、存儲空間管理技術

1. 空閑空間管理方法
空閑空間管理
位示圖 Bitmap
空閑鏈表
空閑區表
成組鏈接
2. 位示圖法(Bitmap)

位示圖法是一種用二進制位管理磁盤空間的技術,其基本原理如下:

  1. 數據結構:創建一個位數組(bit array),數組長度等于磁盤總塊數
  2. 映射關系
    • 每個二進制位對應一個磁盤塊
    • 0 表示空閑塊
    • 1 表示已分配塊
  3. 存儲位置:位示圖通常存儲在磁盤固定位置(如超級塊附近)
位示圖
0=空閑
1=占用
0=空閑
...
狀態
0
位0
1
位1
0
位2
...
...
?
位N
磁盤塊0
磁盤塊1
磁盤塊2
...
磁盤塊N
完整示例:16塊磁盤的位示圖管理

初始狀態(全空閑):

磁盤塊號: 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
位示圖值: 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

操作1:分配塊2、塊5、塊7

更新后位示圖
塊1:0
塊0:0
塊2:1
塊3:0
塊4:0
塊5:1
塊6:0
塊7:1
其他:0
分配請求
掃描位示圖
找到空閑塊2,5,7
更新位示圖

更新后位示圖:

0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
0  0  1  0  0  1  0  1  0  0  0  0  0  0  0  0

操作2:分配3個連續塊

AppFSBitmap請求3個連續塊掃描連續3個0找到塊8-10設置位8-10=1確認更新返回塊8,9,10AppFSBitmap

更新后位示圖:

0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
0  0  1  0  0  1  0  1  1  1  1  0  0  0  0  0

操作3:釋放塊5和塊10

釋放塊5
計算位置:i=5
設置bit5=0
釋放塊10
計算位置:i=10
設置bit10=0

更新后位示圖:

0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
0  0  1  0  0  0  0  1  1  1  0  0  0  0  0  0
關鍵技術細節
1. 地址轉換計算
  • 塊號 → 位位置

    • 字節偏移 = 塊號 / 8
    • 位偏移 = 塊號 % 8
  • 示例:訪問塊13

    字節偏移 = 13 / 8 = 1 (第二個字節)
    位偏移 = 13 % 8 = 5
    檢查第2字節的第5位(從0開始計數)
    
2. 空間占用計算

假設:

  • 磁盤容量:1TB
  • 塊大小:4KB

計算過程:

總塊數 = 1TB / 4KB = 2^30 / 2^12 = 2^18 = 262,144 塊
位示圖大小 = 262,144 bits / 8 = 32,768 bytes = 32KB
位示圖法優缺點分析
優點缺點
? 空間效率高:僅需約 0.0039% 的額外空間(1/256)? 分配連續空間需線性掃描
? 狀態切換快:位操作效率極高? 大磁盤中掃描效率低
? 實現簡單:數據結構簡潔? 外部碎片問題仍然存在
? 隨機訪問快:直接計算位置? 需要整個位圖載入內存
3. 空閑鏈表法
  • 物理鏈表實現
空閑鏈頭
塊3
塊7
塊9
NULL

在這里插入圖片描述

4. 空閑區表法(Extent-Based)
原理

空閑區表法(Free Space Management with Extent Lists)是一種通過記錄連續空閑區域來管理磁盤空間的技術,特別適合處理連續分配的場景。其核心思想是:

  1. 數據結構:維護一張表格(或鏈表),每個表項記錄:
    • 空閑區的起始塊號
    • 空閑區的長度(連續塊數)
  2. 分配策略:當需要空間時,在表中查找滿足需求的空閑區
  3. 合并機制:釋放空間時自動合并相鄰空閑區
FreeExtent
+start_block: int
+block_count: int
+next: FreeExtent*
完整示例:16塊磁盤的空閑區表管理

初始狀態(全空閑):

空閑表頭
起始塊:0 長度:16
NULL

操作1:分配3個連續塊

AppFSFreeList請求3個連續塊查找足夠空閑區找到[0-15]長度16從頭部分配3塊更新為[3-15]長度13alt[首次適應]返回塊0-2AppFSFreeList

更新后空閑表:

空閑區1: 起始塊=3, 長度=13

操作2:再分配5個連續塊

首次適應
請求5塊
查找策略
掃描表項
找到3-15長度13>5
分配塊3-7
更新為起始塊=8,長度=8

更新后空閑表:

空閑區1: 起始塊=8, 長度=8

操作3:釋放塊0-2(3塊)

與塊8不相鄰
釋放塊0-2
創建新空閑區
起始塊=0,長度=3
檢查相鄰性
插入表頭
新表:0,3->8,8

更新后空閑表:

空閑區1: 起始塊=0, 長度=3
空閑區2: 起始塊=8, 長度=8

操作4:釋放塊3-7(5塊)

左鄰塊2
右鄰塊8
釋放塊3-7
創建新區間3,5
檢查相鄰性
與0,3合并:0+3+5=8 -> 0,8
與8,8合并:0+8+8=16 -> 0,16

最終空閑表:

空閑表頭
起始塊:0 長度:16
NULL
分配策略對比
策略操作方式優點缺點
首次適應從表頭掃描,選擇首個足夠大的區域分配速度快易產生外部碎片
最佳適應掃描整個表,選擇最小的足夠區域減少大空閑區割裂易產生微小碎片
最差適應掃描整個表,選擇最大的空閑區減少微小碎片破壞大空閑區
空間占用計算

假設:

  • 磁盤容量:1TB
  • 塊大小:4KB
  • 平均空閑區大小:16塊

計算:

總塊數 = 1TB / 4KB = 256M 塊
平均空閑區數 = 256M / 16 = 16M
表項大小 = 8字節(4字節起始塊 + 4字節長度)
總空間 = 16M × 8B = 128MB
優缺點分析
優點缺點
? 減少外部碎片? 分配時間隨表增大而增加
? 高效管理大文件? 小碎片無法利用
? 支持快速連續訪問? 需要定期合并操作
? 實現相對簡單? 大磁盤中表可能很大
5. UNIX成組鏈接法

成組鏈接法是UNIX文件系統采用的高效空閑塊管理方法,核心思想是:

  1. 分組管理:將空閑塊分成若干組
  2. 鏈式連接:每組最后一個塊存儲下一組信息
  3. 超級塊緩存:內存中緩存第一組空閑塊信息
塊102指向
塊202指向
超級塊
塊100,101,102
塊200,201,202
塊300,301,302
完整示例:12塊磁盤的成組鏈接管理

初始狀態(3塊/組):

塊3存儲
塊6存儲
塊9存儲
塊12存儲
超級塊
塊1,2,3
下一組指針:塊4
塊4,5,6
下一組指針:塊7
塊7,8,9
下一組指針:塊10
塊10,11,12
結束標記:0

內存超級塊內容:

空閑塊數空閑塊列表
3[1, 2, 3]

操作1:分配3個塊

AppSuperBlockDisk請求分配3塊直接分配塊1,2,3讀取塊3內容返回[下一組指針:塊4]讀取塊4內容返回塊4,5,6信息分配成功超級塊更新為空閑數=3列表=[4,5,6]AppSuperBlockDisk

操作2:再分配1個塊

空閑數=3
分配1塊
超級塊狀態
分配塊4
更新超級塊
空閑數=2
列表=5,6

操作3:釋放塊10,11,12

AppSuperBlockDisk釋放塊10,11,12檢查超級塊狀態添加塊10,11,12到列表釋放成功將當前組寫入新釋放塊確認寫入重置超級塊指向新組alt[超級塊未滿][超級塊已滿]AppSuperBlockDisk
優缺點分析
優點缺點
? 分配效率高(O(1)平均)? 實現復雜度高
? 釋放操作快速? 小規模磁盤不劃算
? 減少磁盤I/O(超級塊緩存)? 需維護鏈式結構
? 天然抵抗碎片化? 極端情況需遞歸加載

三、文件共享和保護

文件共享機制

軟鏈接與硬鏈接

硬鏈接(Hard Link)

底層原理

在 Linux 文件系統中:

  • 每個文件對應一個唯一的 inode(索引節點)
  • inode 存儲文件的元數據(權限、大小、時間戳等)
  • 硬鏈接是指向同一個 inode 的多個目錄項
file.txt
backup.txt
目錄A
Inode 123
目錄B
數據塊
元數據:鏈接數=2

創建與操作(終端命令)

# 創建原始文件
$ echo "Original Content" > original.txt# 創建硬鏈接
$ ln original.txt hardlink.txt# 查看inode信息
$ ls -li
123456 -rw-r--r-- 2 user group 17 Jan 1 10:00 hardlink.txt
123456 -rw-r--r-- 2 user group 17 Jan 1 10:00 original.txt
# ↑ 相同的inode號(123456)和鏈接數(2)# 修改硬鏈接文件
$ echo "New content" >> hardlink.txt# 檢查原始文件
$ cat original.txt
Original Content
New content# 刪除原始文件
$ rm original.txt# 硬鏈接仍然有效
$ cat hardlink.txt
Original Content
New content

關鍵特性

特性說明
inode 相同所有硬鏈接共享同一 inode
文件大小與原文件相同(不占用額外空間)
跨文件系統? 不支持
鏈接目錄? 不允許(避免循環引用)
刪除影響減少鏈接計數,僅當計數為0時刪除數據
權限同步所有硬鏈接權限始終相同(同一 inode)

使用場景

  • 文件多重備份(防止誤刪)
  • 同一文件需要在多個位置訪問
  • 節省空間的"副本"創建
軟鏈接(Symbolic Link / Symlink)

底層原理

  • 軟鏈接是獨立的文件,有自己的 inode
  • 內容存儲目標文件的路徑(字符串)
  • 類似Windows的快捷方式
file.txt
symlink.txt
內容為
目錄A
Inode 123
數據塊
目錄B
Inode 456
/path/to/file.txt

創建與操作(終端命令)

# 創建原始文件
$ echo "Source Content" > source.txt# 創建軟鏈接(絕對路徑)
$ ln -s /home/user/source.txt abs_link.txt# 創建軟鏈接(相對路徑)
$ ln -s source.txt rel_link.txt# 查看鏈接信息
$ ls -l
lrwxrwxrwx 1 user group 11 Jan 1 10:00 abs_link.txt -> /home/user/source.txt
lrwxrwxrwx 1 user group 10 Jan 1 10:00 rel_link.txt -> source.txt
-rw-r--r-- 1 user group 15 Jan 1 10:00 source.txt# 訪問軟鏈接
$ cat rel_link.txt
Source Content# 刪除原始文件
$ rm source.txt# 軟鏈接失效(斷鏈)
$ cat rel_link.txt
cat: rel_link.txt: No such file or directory# 檢查斷鏈狀態
$ ls -l rel_link.txt
lrwxrwxrwx 1 user group 10 Jan 1 10:00 rel_link.txt -> source.txt  # 紅色顯示

關鍵特性

特性說明
inode獨立于目標文件
文件大小等于路徑字符串長度
跨文件系統? 支持
鏈接目錄? 允許
刪除影響目標文件刪除后失效
權限總是 777(實際權限由目標決定)

核心區別對比

特性硬鏈接軟鏈接
本質同一文件的多個目錄項存儲路徑的特殊文件
inode與目標文件相同獨立 inode
跨文件系統? 不支持? 支持
鏈接目錄? 禁止? 允許
原始文件刪除仍可訪問(鏈接數減1)鏈接失效(斷鏈)
文件大小與目標文件相同路徑字符串長度
路徑依賴相對路徑依賴位置
更新影響所有鏈接同步更新鏈接指向不變,目標可更換
權限與目標相同總是 lrwxrwxrwx
查找命令find . -samefile 文件find -type l -ls
Linux 系統視角
Inode表
文件A inode
文件B inode
軟鏈接 inode
數據塊
數據塊
路徑字符串
目錄
fileA → inodeX
hardlink → inodeX
目錄
symlink → inodeY
文件保護機制
1. 訪問控制矩陣
訪問控制矩陣
域:用戶/進程
對象:文件
權限:R/W/X
2. 訪問控制列表(ACL)
  • 原理:為每個文件維護權限列表
  • 結構
文件X ACL
用戶A:RWX
用戶B:R--
組C:R-X
3. UNIX權限模型(9-bit)

權限位分解

“文件類型”: 1
“所有者權限” : 3
“組權限” : 3
“其他用戶” : 3

權限示例

第一位表示文件的類型,-代表文件,d代表目錄

 -rwxr-xr--↑↑↑↑ ↑↑│||| |└─ 其他:讀│||| └── 組:執行│|│└── 組:讀││└──── 所有者:執行|└───── 所有者:寫└────── 所有者:讀

[“hardlink → inodeX”]
Directory2[目錄] --> EntryC[“symlink → inodeY”]


#### 文件保護機制##### 1. 訪問控制矩陣```mermaid
graph LRA[訪問控制矩陣] --> B[域:用戶/進程]A --> C[對象:文件]B --> D[權限:R/W/X]
2. 訪問控制列表(ACL)
  • 原理:為每個文件維護權限列表
  • 結構
文件X ACL
用戶A:RWX
用戶B:R--
組C:R-X
3. UNIX權限模型(9-bit)

權限位分解

“文件類型”: 1
“所有者權限” : 3
“組權限” : 3
“其他用戶” : 3

權限示例

第一位表示文件的類型,-代表文件,d代表目錄

 -rwxr-xr--↑↑↑↑ ↑↑│||| |└─ 其他:讀│||| └── 組:執行│|│└── 組:讀││└──── 所有者:執行|└───── 所有者:寫└────── 所有者:讀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913692.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913692.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913692.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Thinkphp6中如何將macro方法集成到Request類中

在學習crmeb的時候發現他使用了一個macro的方法用在中間件中,于對macro進行了簡單的研究,發現這個方法可以在中間件中進行定義一些方法,然后讓后面的控制器進行使用。 如: 在授權的中間件中,定義了$request->macro…

Java List 使用詳解:從入門到精通

一、List 基礎概念1.1 什么是 List&#xff1f;List 就像是一個智能書架&#xff1a;可以按順序存放書籍&#xff08;元素&#xff09;每本書都有固定位置&#xff08;索引&#xff09;可以隨時添加、取出或重新排列書籍// 創建一個書架&#xff08;List&#xff09; List<S…

Java零基礎筆記06(數組:一維數組、二維數組)

明確: 程序是用來處理數據的, 因此要掌握數據處理的數據結構數組是編程中常用的數據結構之一&#xff0c;用于存儲一系列相同類型的元素。在Java中&#xff0c;數組是一種對象&#xff0c;可以存儲固定大小的相同類型元素的集合。1.一維數組數組是一個數據容器,可用來存儲一批同…

10倍處理效率提升!阿里云大數據AI平臺發布智能駕駛數據預處理解決方案

阿里云大數據AI平臺重磅發布智能駕駛數據預處理解決方案&#xff0c;可幫助汽車行業客戶實現構建高效、穩定的數據預處理產線流程&#xff0c;數據包處理效率相比自建可提升10倍以上&#xff0c;數據處理推理任務優化提速1倍以上&#xff0c;相同資源產能提升1倍[1]&#xff0c…

SAP HANA內存數據庫解析:特性、優勢與應用場景 | 技術指南

SAP HANA 是一款列式內存關系數據庫&#xff0c;集 OLAP 和 OLTP 操作于一體。相較于同類產品&#xff0c;SAP HANA 需要的磁盤空間更少&#xff0c;并且可擴展性高。SAP HANA 可以部署在本地、公有云或私有云以及混合場景中。該數據庫適用于各種數據類型的高級分析和事務處理。…

Openharmony4.0 rk3566上面rknn的完美調用

一 背景&#xff1a; 我們都知道如果要在android上面使用rknn推理模型需要按照如下的步驟&#xff1a; 詳細請參考筆者的文章&#xff1a;Android11-rk3566平臺上采用NCNN&#xff0c;RKNN框架推理yolo11官方模型的具體步驟以及性能比較-CSDN博客 簡而言之就是 模型轉換&#…

Java多線程知識小結:Synchronized

在Java中&#xff0c;synchronized 關鍵字是實現線程同步的核心工具&#xff0c;用于保證同一時刻只有一個線程可以執行被修飾的代碼塊或方法。以下從基本原理、鎖升級過程、應用場景及優化建議四個維度詳細解析&#xff1a; 一、基本原理 1. 同步的對象 synchronized 鎖的是對…

MTK項目wifi.cfg文件如何配置的Tput和功耗參數

下面的MTK參數主要與無線網絡(Wi-Fi)配置相關,特別是與WMM(Wi-Fi Multimedia)和功率控制相關的設置 WMM相關參數: WmmParamCwMax/WmmParamCwMin:定義競爭窗口的最大/最小值,這里設置為10/4,用于控制信道訪問的退避機制13 WmmParamAifsN:仲裁幀間間隔數,設置為3影響不同…

分水嶺算法:圖像分割的浸水原理

分水嶺算法&#xff1a;基于拓撲地貌的邊界提取核心原理 分水嶺算法將圖像視為拓撲地貌&#xff0c;灰度值代表海拔高度。通過模擬浸水過程&#xff1a;局部極小值&#xff1a;對應集水盆&#xff08;區域內部&#xff09;。分水嶺線&#xff1a;集水盆之間的山脊&#xff08;區…

汽車功能安全系統階段開發【技術安全方案TSC以及安全分析】5

文章目錄1 技術安全方案 (Technical Safety Concept - TSC)2 系統安全架構設計 (System Safety Architecture Design)3 如何進行安全分析 (Safety Analysis)4 技術安全需求 (TSR) 如何分配到系統架構1 技術安全方案 (Technical Safety Concept - TSC) 技術安全方案 (Technical…

學習軟件測試的第十二天(接口測試)

一.如果一個接口請求不通&#xff0c;那么你會考慮那些方面的問題&#xff1f;如果一個接口請求不通&#xff0c;我會像“排查水管漏水”一樣一步步定位問題發生在哪一段&#xff0c;主要從這幾個方向去思考&#xff1a;當一個接口請求不通時&#xff0c;我會從以下幾個方面進行…

Linux下的C/C++開發之操作Zookeeper

ZooKeeper C 客戶端簡介與安裝ZooKeeper C API 簡介ZooKeeper 官方提供了多語言客戶端&#xff0c;C 語言客戶端是最底層的實現之一&#xff0c;功能全面且穩定&#xff0c;適合嵌入式開發、系統級組件、C 項目集成等場景。zookeeper.h 是 ZooKeeper 提供的 C 語言客戶端頭文件…

【openp2p】學習3:【專利分析】一種基于混合網絡的自適應切換方法、裝 置、設備及介質

本專利與開源項目無關,但可能是實際商用的一種專利。專利地址從此專利,可見p2p的重要性。透傳服務可能是實時轉發服務,提供中繼能力 透傳服務可以是指一種通過公網服務器將數據從第一客戶端傳遞到另一個設備 或客戶端的服務。這種服務通常用于克服網絡中的障礙,如防火墻、…

OpenCV中DPM(Deformable Part Model)目標檢測類cv::dpm::DPMDetector

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 OpenCV 中用于基于可變形部件模型&#xff08;DPM&#xff09; 的目標檢測器&#xff0c;主要用于行人、人臉等目標的檢測。它是一種傳統的基于特…

macOS 26快捷指令更新,融入AI打造智能操作體驗

快捷指令作為Mac系統中提升用戶操作效率的得力助手&#xff0c;在macOS 26中迎來了一次具有突破性的重大更新。此次更新融入了先進的AI技術&#xff0c;推出“智能操作”&#xff08;Intelligent Actions&#xff09;功能&#xff0c;讓快捷指令從簡單的自動化工具升級為真正的…

InstructBLIP:邁向具備指令微調能力的通用視覺語言模型

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" InstructBLIP&#xff1a;邁向具備指令微調能力的通用視覺語言模型 摘要 大規模的預訓練與instruction tuning在構建通用語言模型方面已取得顯著成效。然而&#xff0c;構建通用的視覺-語言模型仍然具有挑戰性&…

基于dropbear實現嵌入式系統ssh服務端與客戶端完整交互

以下基于 Dropbear 實現 SSH 服務端與客戶端交互的完整步驟&#xff0c;涵蓋服務端部署、客戶端連接、認證配置及消息傳輸&#xff0c;結合了多篇權威資料的核心實踐&#xff1a;環境準備與安裝 服務端安裝 ? Linux 系統&#xff08;以 Ubuntu/CentOS 為例&#xff09; Ubuntu…

深圳安銳科技發布國內首款4G 索力儀!讓斜拉橋索力自動化監測更精準高效

近日&#xff0c;深圳安銳科技正式發布國內首款無線自供電、一體化的斜拉索實時監測設備 “4G索力監測儀”&#xff0c;成功攻克了傳統橋梁索體監測領域長期存在的實時性差、布設困難和成本高昂的行業難題&#xff0c;為斜拉橋、系桿拱橋提供全無線、自動化、云端實時同步的索力…

Pipeline 引用外部數據源最佳實踐

場景解析在企業網絡安全日志處理場景中&#xff0c;防火墻、入侵檢測系統&#xff08;IDS&#xff09;等設備會持續產生大量日志&#xff0c;記錄網絡流量、訪問請求、異常事件等基礎信息&#xff0c;但這些原始日志僅能呈現表面現象&#xff0c;難以全面剖析安全威脅&#xff…

UI + MCP Client + MCP Server(并且鏈接多個Server)

項目結構前端項目--------->MCP Client----------->MCP Serverserver就不過多贅述了&#xff0c;他只是相當于添加了多個的tools 鏈接前后端 http.createServer創建一個服務器// ---------------------------------------------------------------- // server.js import …