一、文件系統
- 磁盤提供大多數的外存,以便維護文件系統
- 文件系統提供高效和便捷的磁盤訪問,以便允許輕松存儲、定位、提取數據
- 在存儲設備上組織文件的方法和數據結構
- 操作系統中負責管理和存儲文件信息的模塊
- 系統角度的:
- 對存儲設備的空間進行組織和分配
- 負責文件檢索、讀寫等操作
- 目標:存取速度和存儲空間效率
- 用戶角度:
- 提供按名存取的文件訪問機制
- 文件的組織管理,如目錄等
- 目標:方便的文件存取機制
1.文件系統結構
- 文件系統本身通常由許多不同的層組成,文件系統具有層次架構
- 每層設計利用更底層的功能,創建新的功能,以用於更高層服務
- 當使用分層結構實現文件系統時,可最小化代碼的重復
- I/O控制的代碼,有時還包括基本文件系統的代碼,可以用於多個文件系統
- 每個文件系統可以擁有自己的邏輯文件系統和文件組織模塊
- 分層可能增加了操作系統開銷,導致性能降低
- I/O控制:
- 包括設備驅動程序(Device Drivers)和中斷
- 設備驅動程序:
- 控制I/O設備運行
- 向硬件控制器發送專門控制命令
- 操作系統通過設備驅動程序控制設備進行文件的讀寫操作
- 可以作為翻譯器
- 輸入為高級命令
- 輸出由底層的、硬件特定的指令組成,硬件控制器利用這些指令來使I/O設備與系統其他部位相連
- 設備驅動程序通常在I/O控制器的特定位置寫入特定位格式,告訴控制器對設備的什么位置采取什么動作
- 基本文件系統:
- 負責物理塊讀寫
- 每個物理塊由磁盤的數字地址來標識
- 向設備驅動程序發送控制命令控制設備控制器對存儲設備(磁盤的物理塊)進行讀寫操作
- 管理內存緩沖區和保存各種文件系統、目錄和數據塊的緩存
- 在進行磁盤塊傳輸之前,分配一塊緩沖區
- 當緩沖區已滿時,緩沖管理器必須找到更多緩沖內存或釋放緩存空間,以便允許完成I/O請求
- 緩存用於保存常用的文件系統元數據,以提高性能
- 文件組織模塊:
- 管理文件、邏輯塊和物理塊
- 把文件的邏輯地址轉換為物理地址,以供基本文件系統傳輸
- 每個文件的邏輯塊從0(或1)到N編號,而包含數據的物理塊並不與邏輯號匹配,因此需要通過轉換來定位塊
- 管理空閑空間
- 為文件分配物理塊
- 可用空間管理器:以跟蹤未分配的塊並根據要求提供給文件組織模塊
- 邏輯文件系統:
- 管理文件系統中的元數據
- 除了文件數據外的所有結構數據
- 文件按名存取,根據給定文件名稱為文件組織模塊提供所需信息
- 文件目錄組織管理
- 把文件名轉換為文件ID,文件句柄
- 管理FCB,通過文件控制塊來維護文件結構
- FCB:包含有關文件的信息,包括所有者、權限、文件內容的位置等
- 存儲保護
- 管理文件系統中的元數據
2.文件系統實現
- 為了創建新的文件,應用程序調用邏輯文件系統。邏輯文件系統知道目錄結構的格式;它會分配一個新的FCB。(或者如果文件系統的實現在文件系統創建時已經創建了所有的FCB,則可從空閑的FCB集合中分配一個可用的FCB)然后,系統將相應的目錄讀到內存,使用新的文件名和FCB進行更新,並將它寫回到磁盤
2-1.基本概念
- 物理塊(簇):一個或多個(2n)扇區組成,基本文件讀寫單位
- (物理)分區(Partition):磁盤分割成若干個獨立的空間,每個空間稱為分區
- 兩大類分區:主分區和擴展分區
- 主分區:能夠安裝操作系統的啟動分區
- 擴展分區:不能直接使用,必須分成若干邏輯分區
- 卷(邏輯磁盤)(Volume):磁盤上的邏輯分區,建立在物理分區上
- 一般每個卷可以建立一個文件系統:
- 一般每個卷可以建立一個文件系統:
- 典型文件系統:
2-2.兩種文件系統
- 文件系統的實現需要采用多個磁盤和內存的結構
- 磁盤文件系統和內存文件系統
- 磁盤文件系統:
- 可能包含的信息:如何啟動存儲在那里的操作系統、總的塊數、空閑塊的數量和位置、目錄結構以及各個具體文件等
- 引導控制塊:包含了系統引導操作系統的各種信息,只有安裝操作系統的分區才會有引導控制塊
- UFS:引導塊(Boot block)
- NTFS:分區引導扇區(Partition boot sector)
- 分區控制塊(卷控制塊):包含分區(卷)信息
- 總的塊數、空閑塊數、塊大小、空閑塊的數量和指針、空閑的FCB數量和FCB指針等信息
- UFS:超級塊(superblock)
- NTFS:主控文件表(master file table)
- 目錄結構
- 用於組織文件
- 在UFS中,包含文件名和相關的inode的號碼
- 在NTFS中,存儲在主控文件表中
- FCB
- 包含該文件的許多詳細信息
- 有一個唯一的標識號,以便與目錄條目相關聯
- 在NTFS中,這些信息實際上存儲在主控文件表中,它使用關系數據庫結構,每個文件獨占一行
- 用戶文件
- 磁盤結構:
- 內存文件系統
- 內存中的信息用於管理文件系統並通過緩存來提高性能
- 這些數據在安裝文件系統時被加載,在文件系統操作期間被更新
- 在卸載時被丟棄
- 包含:
- 分區表:所有安裝分區信息
- 目錄緩沖結構:保存最近訪問的目錄信息
- 系統打開文件表:包括每個打開文件的FCB的副本以及其他信息
- 進程打開文件表:包括一個指向整個系統的打開文件表中的適當條目的指針,以及其他信息
- 文件操作需要用到內存文件系統
- 目的:通過緩沖技術提高文件系統性能
- 引入內存文件系統的目的是為了節省外存空間
- 內存中文件系統結構:
- 內存中的信息用於管理文件系統並通過緩存來提高性能
2-3.虛擬文件系統(Virtual File System)
- 目的:
- 為了支持多個文件系統,引入虛擬文件系統VFS
- 把多個文件系統整合成一個目錄結構
- 為用戶屏蔽各個文件系統的差異
- 虛擬文件系統可以把多個文件系統整合成一個目錄結構,為用戶屏蔽各個文件系統的差異
- 虛擬文件系統(VFS):
- 提供了一種面向對象的方法來實現文件系統
- 為不同類型的文件系統提供了接入VFS的接口
- 為用戶提供了統一的系統調用接口(API)
- 文件系統接口(File system interface):
- 統一的應用程序訪問文件的接口
- 各個文件系統提供給應用程序的接口可能不同,如:open、openfile、openf、open_file等
- VFS接口(VFS interface):
- 為各類不同的文件系統定義VFS接口
- 符合該接口的文件系統都可以接入VFS
- 示意圖:
2-4.網絡文件系統(NFS)
- 網絡文件系統(NFS,Network File System):用於通過LAN(或WAN)訪問遠程文件系統的軟件系統的實現或規范
- 好處:節省存儲空間,實現共享
2-5.CIFS
- 通用Internet文件系統(Common Internet File System):在Windows主機之間進行網絡文件共享
- CIFS使用客戶/服務器模式
2-6.常用文件系統
- Windows:
- FAT(File Allocation Table)
- NTFS(New Technology File System)
- ReFS(Resilient File System)
- Linux:
- Ext(Ext2、Ext3、Ext4)
- Mac OS:
- HFS(Hierarchical File System)
- CD:
- CDFS
- CDFS
二、分配方法
1.基本概念
1-1.物理塊
- 讀寫存儲設備的基本單位
- 文件讀寫操作時,以塊為單位進行讀寫
- 好處:減少讀寫次數,提高訪問效率
- 存儲設備的基本分配單位
- 以物理塊為單位為文件分配存儲空間
- 和內存的頁面大小相對應
- 頁面大小:4KB
- 物理塊大小:4KB的倍數
1-2.邏輯塊
- 在文件空間中的塊
- 編號從0開始
- 大小和物理塊一致
- 一個邏輯塊存儲在一個物理塊中
1-3.存儲空間分配方式
- 連續存儲空間:連續存儲空間分配,和內存的連續分配相似,是指一個 文件在磁盤上存儲在連續的物理塊中
- 連續分配
- 離散存儲空間:離散存儲空間分配,是指一個文件的物理塊可以分布在 磁盤的各處,類似於內存分配中的分頁和分段
- 鏈接分配
- 索引分配
- 物理塊塊號:
- 一維空間
- 從0開始編號
- 可以根據物理設備的特性進行轉換
2.連續分配
2-1.基本概念
- 連續分配問題可以作為通用動態存儲分配問題的一個具體應用
- 從一組空閑孔中尋找一個空閑孔的最為常用的策略是:首次適合和最優適合
- 每個文件在磁盤上占用一組連續的物理塊
- FCB僅需給出:
- 起始塊號
- 長度
- 例:
2-2.地址映射
- 邏輯地址LA:文件內相對地址(一維)
- 物理地址(B,D):存在在物理塊中的地址(二維)
- 物理塊大小S
2-3.性能分析
- 優點:
- 支持順序訪問
- 支持隨機訪問(可直接訪問指定塊號的物理塊)
- 存取速度快(上一個塊到下一個塊移動距離短)
- 適用一次性寫入操作
- 例:
- 缺點:
- 存在外部碎片
- 預分配可能產生內部碎片(文件增長緩慢)
- 難以確定一個文件需要多少空間
- 浪費空間(小空間無法分配)
- 文件不能動態增長(文件A)
- 不利於文件的插入和刪除(需要移動數據)
- 例:
2-4.連續分配的改進
- 改進的連續分配方案(Veritas File System)
- 基於擴展的文件系統(局部連續)
- 擴展是一組連續的磁盤塊集合
- 擴展在文件分配時被分配
- 一個文件可能包含一個或多個擴展
- 需要一個指向下一個擴展的指針
- 文件塊的位置記錄:地址、塊數、下一擴展的首塊的指針
3.鏈接分配
3-1.基本概念
- 鏈接分配:
- 文件信息存放在若干個不連續物理塊中
- 文件的所有物理塊通過指針鏈接成鏈表結構
- 用戶不能使用這些指針,在計算大小時要減去指針的大小
- 分類:
- 顯式鏈接
- 隱式鏈接
3-2.隱式鏈接-基本概念
- 鏈表的指針隱藏在物理塊中
- 每個物理塊中的指針指向下一個物理塊
- FCB給出文件首塊地址
- 文件結束於空指針
- 每個物理塊用於存放文件信息的空間變小
- 減去指針占據的空間
- 4KB物理塊,指針4Bytes:4092Bytes
- 例:
3-3.隱式鏈接-地址映射
- 邏輯地址LA:文件內相對地址(一維)
- 物理地址(B,D):存在在物理塊中的地址(二維)
- 物理塊大小S
- 指針大小P
3-4.隱式鏈接-性能分析
- 優點:
- 沒有外碎片,無需合並磁盤空間
- 可以離散存放,提高磁盤的利用率
- 可以動態擴充文件大小
- 便於文件的插入和刪除操作
- 缺點:
- 只能有效用於順序訪問文件
- 無法實現隨機訪問,訪問文件慢,訪問第i塊,需要把0-(i-1)塊都讀入
- 指針需要存儲空間
- 指針分散存放
- 可靠性差
- 解決方法:①雙向鏈表②每塊存儲文件名稱和相對塊號(這些方案都為文件增加了額外開銷)
- 優化方法:多塊集合成組(簇),按簇而不是按塊來分配
3-5.顯示鏈接-基本概念
- 指針集中存放
- 把所有指針存放在一張鏈接表中
- 每個卷的開頭部分的磁盤用於存儲該表
- 在該表中,每個磁盤塊都有一個條目,並可按塊號來索引
- 大大提高了檢索速度
- 先訪問鏈接表,再訪問物理塊
- 鏈接表一般在文件系統裝載時裝入內存
- 鏈接表大小
- 表項16位:最大216*2Bytes=128KB
- 表項32位:最大232*4Bytes=16GB
- 不適合大容量磁盤
- 如4TB磁盤,物理塊4KB
- 鏈接表大小=(4TB/4KB)*4Bytes=4GB
- 例:
- FAT:
- FAT32:
- FAT:
4.索引分配
4-1.基本概念
- 每個文件一張文件分配表,即索引表
- 磁盤地址塊的數組
- 索引塊的第i個條目指向文件的第i個塊
- 目錄包含索引塊的地址
- 當查找和讀取第i個塊時,采用第i個索引塊條目的指針
- 磁盤訪問的次數:索引塊訪問次數+文件塊的訪問次數
- 索引塊:存放指向文件每個物理塊塊號的物理塊
- 索引塊中的第i個項:存放第i個邏輯塊對應的物理塊塊號
- FCB指向索引塊
- 例:
4-2.地址映射
- 邏輯地址LA:文件內相對地址(一維)
- 物理地址(B,D):存在在物理塊中的地址(二維)
- 物理塊大小S
4-3.索引分配性能
- 優點:
- 支持隨機訪問(先訪問索引塊,然后訪問具體的物理塊)
- 離散存放,沒有碎片
- 缺點:
- 需要額外空間存放索引表
- 磁盤訪問時間增加(物理塊分布在磁盤各地)
4-4.索引分配-鏈接策略
- 一個索引塊通常為一個磁盤塊
- 本身支持直接讀寫
- 可以通過將多個索引塊鏈接起來來支持大文件
- 把索引塊通過鏈表組織(沒有長度限制)
- 訪問塊號B=索引表中第Q1塊索引塊中第Q2項存放的塊號
- 塊內偏移D=R2
- 指針大小P
- 缺點:可能需要讀入多個索引塊
4-5.索引分配-多級索引
- 比較適合大文件
- 磁盤訪問的次數:索引塊訪問次數+文件塊的訪問次數
- 大文件無法用單級索引實現
- 物理塊大小S=4KB
- 表項大小:4個字節(最多232塊)
- 每個物理塊存放的塊號數目:4K/4=1K個
- 單級目錄最大文:1K*4KB=4MB
- 大於4MB的文件如何存放?⇨多級索引
- 二級索引:
- 把索引塊通過再次索引的模式組織(有長度限制)
- 二級索引
- 外層索引表(一個物理塊)
- 內層索引表(物理塊數目=外層索引表的項數)
- 二級索引地址映射:
- 訪問塊號B=外層索引表中第Q1項中存放的塊號對應的內層索引塊中第Q2項存放的塊號
- 塊內偏移D=R2
- 索引和文件大小:
4-6.聯合策略:UNIX(每塊4KB)
- 多種索引混合
- 將索引塊的前幾個指針存在文件的inode中
- 這些指針的前12個指向直接塊,即包含存儲文件數據的塊的地址
- 接下來的3個指針(13、14、15)指向間接塊,分別對應一級間接塊、二級間接塊、三級間接塊
- 0級索引:
- FCB中12個指針指向文件開頭的12個邏輯塊
- 一級索引:
- 1K項,對應1K個物理塊,總大小為4MB
- 二級索引:
- 1M塊,容量為4GB
- 三級索引:
- 1G塊,容量為4TB
5.性能
- 好的分配方法依賴於訪問類型
- 連續分配可用於隨機或順序訪問,效率高
- 鏈接分配適合順序訪問,不適合隨機訪問
- 在文件創建時根據訪問類型選擇鏈接還是連續
- 索引分配更加復雜
- 依賴於索引結構、文件大小、塊大小
- 增加磁盤I/O速度是提高性能的一個因素
三、空閑空間管理
1.基本概念
- 文件系統不僅需要記錄下磁盤上還沒有分配出去的空閑物理塊,還需要為新文件分配物理塊和回收被刪除文件的物理塊,所以文件系統需要包含空閑空間管理模塊
- 把不連續的空閑塊集合在一起
- 有利於給文件分配連續的物理塊
2.空閑空間管理方法
2-1.空閑表
- 空閑區:連續的未分配物理塊集合
- 空閑表:
- 每個表項對應一個空閑區
- 內容:空閑區的第一塊號、空閑塊的塊數
- 條目可以存儲在平衡樹而不是鏈表中,以便於高效查找、插入和刪除
- 空閑表適用連續分配
- 分配和回收方式:和內存的連續分配類似
- 缺點:需要額外空間來存放空閑表
- 例:
2-2.空閑鏈表
- 將磁盤上所有空閑塊鏈接在一個鏈表中
- 分配:從鏈表頭依次摘下適當數目的空閑塊
- 回收:空閑塊加入鏈表尾部
- 優點:不需專用塊存放管理信息,不浪費空間
- 缺點:增加I/O操作,得到連續空間難
- 例:
2-3.位示圖
- 利用二進制一位(bit)來表示一個塊的使用情況
- 1:盤塊空閑
- 0:盤塊已分配
- 所有塊都有一個二進制位與之對應
- 所有塊對應的位形成位示圖
- 位示圖存放在物理塊中
- 分配:1⇨0 回收:0⇨1
- 比較容易得到連續物理塊
- 在查找磁盤上的第1個空閑塊和第n個連續的空閑塊時相對簡單和高效
- 塊號計算:
- 例:
2-4.成組鏈接
- 結合了空閑表和空閑鏈表
- 例:
- 從頭分配,從頭回收
- 分配:從前往后分配,從第一組開始分配,分完再分下組
- 回收:
- 先將釋放的空閑塊放到第一組
- 滿100塊后,在第一組前再開辟一組
- 原來的第一組變成第二組,新組為第一組
四、一致性檢查
- 一致性檢查程序:比較目錄結構的數據和磁盤的數據塊,並且試圖修復發現的不一致。分配和空閑空間管理的算法決定了檢查程序能夠發現什么類型的問題,及其如何成功修復問題
- 每個文件的目錄或FCB中會記錄這個文件分配到的物理塊信息,位示圖同樣會記錄每個物理塊是否被使用,這兩者應該是一致的
- 即文件系統中所有的物理塊減去文件用掉的,剩余的都是空閑塊。但是有 時不是這樣,存不一致性
- 所以,文件系統提供了一致性檢查,將目錄結構數據與磁盤空閑塊結構相 比較,糾正發現的不一致
- 空閑塊在某個文件的物理塊中(A)
- 非空閑塊不屬於任意一個文件(B)
- 一個物理塊屬於多個文件(C)