操作系統-第十一章-文件系統的實現


一、文件系統

  • 磁盤提供大多數的外存,以便維護文件系統
  • 文件系統提供高效和便捷的磁盤訪問,以便允許輕松存儲、定位、提取數據
  • 在存儲設備上組織文件的方法和數據結構
  • 操作系統中負責管理存儲文件信息的模塊
  • 系統角度的
    • 對存儲設備的空間進行組織和分配
    • 負責文件檢索、讀寫等操作
    • 目標:存取速度和存儲空間效率
  • 用戶角度
    • 提供按名存取的文件訪問機制
    • 文件的組織管理,如目錄等
    • 目標:方便的文件存取機制

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

二、分配方法

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

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)



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM