310 likes | 566 Views
Operating System Concepts 作業系統原理 CHAPTER 3 檔案系統的製作. CHAPTER 3 檔案系統的製作. 3.1 檔案系統結構 3.2 檔案系統製作 3.3 目錄製作 3.4 配置方法 3.5 可用空間的管理 3.6 效率和性能 3.7 復原 3.8 NFS 3.9 範例:WAFL檔案系統. 3.1 檔案系統結構. 檔案系統可以提供有效而且方便地存取磁碟方法,那就是允許資料能容易地儲存、找到,以及重新取出。
E N D
CHAPTER 3 檔案系統的製作 3.1 檔案系統結構 3.2 檔案系統製作 3.3 目錄製作 3.4 配置方法 3.5 可用空間的管理 3.6 效率和性能 3.7 復原 3.8 NFS 3.9 範例:WAFL檔案系統
3.1 檔案系統結構 • 檔案系統可以提供有效而且方便地存取磁碟方法,那就是允許資料能容易地儲存、找到,以及重新取出。 • 磁碟提供了維護檔案系統所在的大量輔助記憶體。磁碟有兩項重要的特性,使它們可以很方便地儲存多個檔案: • 它們可以就地被改寫;可以從磁碟讀出一區段,修改此區段,然後寫回同一 位置。 • 可以直接從磁碟取用任何區段。因此,對於任何檔案無論是循序或隨機存取 都很簡單,而且從一個檔案轉移到另一個檔案只需要移動讀寫頭,然後等待磁碟機解決。
3.2 檔案系統製作 • 11.2.1 概論 • 一個啟動控制區段可能包含作業系統需要的資訊以便將作業系統從該分割區啟動。如果磁碟沒有包含作業系統,啟動控制區段可能是空的。通常它是分割區的第一個區段。 • 一個卷區控制區段(volume control block)包含卷(或分割區)的詳細資料, 例如此分割區的區段數目、區段大小、未使用區段的數目、未使用區段的指 標、未使用FCB數目與指標。 • 目錄結構被用在組織檔案。 • 每個檔案的FCB包含許多該檔案的細節,其中包括了: 檔案允許權、所有權、大小和資料 區段的位置。
3.2.2 分割和安裝 • 根分割區(root partition)包含作業系統核心和其它系統檔案,它在啟動時被安裝(mounted)。 • 成功的安裝動作中,作業系統藉由要求裝置驅動程式讀取裝置目錄,並且驗證目錄中有所期望的格式來完成。如果格式不是有效,分割區必須做一致性檢查,並且有可能的話做修正。最後,作業系統在它的記憶體中之安裝表格(mount table)記錄檔案系統已安裝,和此檔案系統的型態。
3.2.3 虛擬檔案系統 • 它藉由定義一項乾淨的VFS介面可將檔案系統的一般操作和製作方式分開。在同一台機器上可能其有不同製作VFS介面的方式,使得局部架設的不同檔案可允許透明的存取。 • VFS對獨一無二的網路檔案提供一個機制。VFS是基於一種稱為vnode的檔案表示結構,vnode包含一項對於整體網路之檔案是獨一無二的數值指示器。整體系統的獨特性對於網路檔案系統的支援是必要的。核心為每一個工作的節點 (檔案或目錄)維護一份vnode結構。
3.3 目錄製作 • 3.3.1 線性串列 • 製作一個目錄最簡單的方法是使用一個線性串列的檔名,並以指標指向資料區段。這種方法很容易寫程式但執行上很浪費時間。 • 線性串列所組成的目錄進入點之真正缺點在於線性尋找檔案。 • 確保串列維持成排序狀態的要求也可能使產生和刪除檔案變複雜,因為可能必須移動大量的目錄資訊才能維持排序的目錄。 • 一個更複雜的樹狀資料結構 (例如B-tree)在這裹可能會有幫助。排序串列的優點是不需要分別的排序步驟就可以產生一個已經排序的目錄串列。 • 3.3.2 雜亂表格(hash table) • 另外一種曾經用在檔案目錄的資料結構是雜亂表格。 • 這種方法中,一個線性串列儲存目錄的進入點,但同時也使用了一個雜亂方法的資料結構。雜亂表格從檔名計算出一個數值,並且傳回一個指標給線性串列中的檔名。因此它可以大量的降低目錄搜尋時間。
3.4 配置方法 • 有三種主要的分配磁碟空間方法正被廣泛使用中:連續的(contiguous)、鏈接的 (linked)、索引的 (indexed)。每種方法都是利弊互見。 • 3.4.1 連續式分配 • 連續分配法需要令每個檔案佔用一組磁碟上的連續位址。磁碟位址定義了一個線性的磁碟上排列次序。請注意此時的順序 (假設只有一個工作對磁碟做存取),在存取b區段之後存取b+1區段時一般不需要移動磁頭。若是要移動磁頭 (由一磁柱的最後一個區段移至另一磁柱的第一區段),也只是移動一條磁軌而已。 • 存取連續分配檔案的尋找次數將可達到最小,且搜尋時間亦為最短 (即最終需要搜尋時)。IBM的VM/CMS作業系統使用連續式分配,因為此方式提供較好的效率。
連續分配有一些其它問題。最主要問題是在判斷一個檔案需要多少空間的問題。當建立一個新檔案的時候,必須找到並且分配一切必須的空間。連續分配有一些其它問題。最主要問題是在判斷一個檔案需要多少空間的問題。當建立一個新檔案的時候,必須找到並且分配一切必須的空間。 • 預先分配其空間可能是沒有效率的。對一個長期成長緩慢的檔案而言,必須為其最後大小分配到足夠的空間,縱使大部份的空間長久都沒有用到。所以最後檔案仍有大量的內部斷裂。
3.4.2 鏈接式分配 • 最大的問題就是它只能有效地使用在循序存取檔案中。若要找出檔案第i區段,必須由該檔案的起點開始並且循著指標找下去,直到找到第i區段為止。每次對指標的存取都需要做磁碟讀入。因此,無法提供直接存取的能力。 • 鏈接分配的另一項缺點就是指標本身所要佔用的空間。如果一個指標就佔用一個512位元組區段中的4個位元組,那麼磁碟空間的百分之0.78被利用在指標上了,而不是用於存放資料。因此每個檔案就需要更多的空間。 • 更嚴重地是可信度 (reliability)的問題。因為檔案是由散佈在磁碟中的指標鏈接起來的,一旦有一個指標搞錯了或是被破壞了,資料查詢將會發生錯誤。作業系統軟體中的錯誤或是磁碟硬體上的損壞都會造成指標錯誤指向。
鏈接式配置方法的一項重要變化方式是採用檔案配置表格 (file-allocation table,FAT)。
3.4.3 索引式分配 • 用鏈接分配可解決外部斷裂和連續分配必須做檔案大小宣告的問題。但是,因缺乏一個FAT,鏈接分配無法使用直接存取,因為檔案的各個區段散佈在磁碟中。更重要的是,指向各區段的指標也是散佈在整個磁碟中而且需要依序取出。索引分配可以解決上述的問題,因為它把所有的指標都集中起來放在一個地方--索引區段(index block)。
3.4.4 效 能 • 在各種不同分配方法之間儲存效能差異很大。同時對磁碟上區段的存取所花費的時間也各有不同。這個因素在作業系統製作時該選擇的正確方法是非常重要的。 • 循序存取的系統其使用的方法應該和主要是隨機存取的系統不相同。無論是用那一種存取方式,連續分配只需要用一次存取來得到一個磁碟區段。因為可以很方便地將檔案的起始位址保存在磁蕊(Core)中,所以可以立刻算出第 i區段的磁碟位址 (或下一個區段的位址)並且將它直接讀出。 • 對於鏈接分配來說,可以將下一個區段的位址保存在記憶體中並且直接讀取。這種方法適用於循序存取,但是對於直接存取,對第 i個區段的存取可能需要做i次讀磁碟的工作。 • 索引分配的效能要完全看索引結構、檔案大小和所要找的區段來決定。
3.5 可用空間的管理 • 為了要保留可用磁碟空間的磁軌,系統採用了一種可用空間串列(free space list)。可用空間串列記錄了所有可用磁碟的區段(block)(也就是尚未分配給任何檔案的記憶空間)。 • 若要建一個檔案,就搜尋可用空間串列來找尋所需的空間量,並且將它分配給新的檔案。於是這些空間就從可用空間串列中移掉。當一個檔案被除掉之後,它的磁碟空間就加到可用空間串列上。 • 3.5.1 位元向量 • 可用空間串列用位元映像(bit map)或位元向量(bit vector)來執行工作。 • 每個區段用一位元來表示。如果某區段是可用的,該位元為1;若某區段已被配置,該位元為0。
3.5.2 鏈接串列 • 另外一種方法是將所有可用磁碟區段鏈接在一起。由一個指標指向第一個可用區段。這一個區段又包含有指向下一個區段的指標,如此下去。 • 3.5.3 組群 • 修正可用串列方法是將n個區段的位址存放在第一個區段中。前n-1個是實際可用的區段。最後一個是存放另一個含有另外n個可以使用的區段在磁碟上的位址。 • 這樣執行的重要性是使得大量可用區段的位址可以很快地尋獲。
3.5.4 計數 • 另一種方法乃是利用一般上都是許多連續區段同時為可用或同時被分配掉的事實,尤其是在使用連續分配的時候。因此,並不需要使用含有n個可用磁碟位址的表,只需要記住第一個可用區段的位址及其後面所連接的n個連續可用區段的數量即可。 • 3.5.5 空間地圖 • 空間地圖是一個按照時間順序和計數格式去紀錄所有區塊活動的日誌(配置和釋放)。
3.6 效率和性能 • 考慮區段配置和目錄管理對於磁碟使用的效率和性能。 • 3.6.1 效率 • 用來存取資料的指標大小對於效率的有相當的影響。大部份系統使用16或32位元的指標在整個作業系統中。這個指標的大小限制了檔案的長度為16 (64KB),或32(4GB)位元組。有些系統使用64位元指標以增加限制,這確實是一個非常大的數字。但是,64位元的指標需要更多的空間來儲存,而且會造成配置方法和未使用空間管理方法 (鏈結串列,索引等)使用更多的磁碟空間。 • 3.6.2 性能 • 增進性能的方法,緩衝區快取(buffer cache)。
沒有一致性的緩衝區快取如圖11.11所示 ,read和write系統呼叫會經歷緩衝的快取區。記憶體對映的呼叫需要使用兩種快取-分頁快取和緩衝快取。記憶體對映是從檔案系統的磁碟區段讀入,然後存入緩衝快取區。因為虛擬記憶體系統不能做為緩衝快取區介面,因此緩衝快取區的檔案內容必須被拷貝到分頁快取區。這種情況就稱為雙重快取 (double caching),並且需要對檔案系統的資料快取兩次。 • 一致性的緩衝快取區,記憶體對映和read與write系統呼叫使用相同的分頁快取區。這種做法有避免掉雙重快取的優點,並且允許虛擬記憶體系統管理檔案系統的資料。一致性的緩衝快取區如圖11.12所示。
另一個影響輸出入的效能是檔案系統寫入是否同步或非同步發生。另一個影響輸出入的效能是檔案系統寫入是否同步或非同步發生。 • 同步寫入(synchronous write)依據磁碟子系統接收的順序發生,而且寫入資料不做緩衝。因此呼叫常式必須等待資料到達磁碟機之後才能繼續。 • 在非同步寫入時,資料存入快取區後控制權即交還呼叫者。中間資料以及其它資料可以同步執行。 • 大多數時間所執行的則是非同步寫入(asynchronous write) 。然而,作業經常包含一個旗標在系統呼叫open中,以允許行程要求寫入能同步地被執行。
3.7 復 原 • 檔案和目錄都同時存放在主記憶體和磁碟上,所以必須小心以確保系統失效時不會造成資料遺失或是資料不一致。 • 該如何處理這些議題以及系統如何在錯誤中復原。 • 3.7.1 一致性的檢查 • 一致性檢查器(consistency checker)是一個系統程式,比較目錄結構的資料和磁碟上的資料區段,並且試著修正它所發現的任何不一致。 • 3.7.2 登錄結構的檔案系統 • 登錄演算法成功地應用在一致性檢查的問題上。所產生的製作被稱為登錄為基礎的交易傾向(log-based transaction-oriented)檔案系統。
3.7.3 其它的解法 • 建立一份快照,快照的內容為該檔案系統上一次更新前的面貌。這種做法應該不需要一致性的檢查,不過前提是指標會自動更新。 • 3.7.4 備份或復原 • 因為有時候會發生磁碟失效,所以必須小心以確保資料不會永久遺失。為了達到這個目的,系統程式可以從磁碟將資料備份 (backup)到另外的儲存裝置 (例如軟碟、磁帶或光碟)。 • 個別檔案或一整個磁碟從遺失的情況下復原就是將資料從備份復原 (restore) 。
3.8 網路檔案系統 (NFS, Network File System) • NFS經由LANs(或甚至是經由WANs)存取遠程檔案之軟體系統之製作方式及規格。 • 3.8.1 總論 • NFS將一組互相連接的工作站視為一組具有獨立檔案系統的獨立機器。其目標是要以透明的方式來在這些檔案系統間做到某種程度的共用。共用是基於伺服器/用戶間之關係。
(a)將 S1:/usr/shared 架設在U:/usr/local上。 • (b)將 S2:/usr/dir2 架設在U:/usr/local/dir1上。 • 使用者若架設了一個共用檔案系統,並可簽入任何工作站且得到其原先自己的環境—稱為User Mobility 。
3.8.2 架設協定(mount protocol) • 架設協定 是用來在伺服器與用戶間建立起始之邏輯連接。在Sun的製作方式中,每部機器均在核心外具有一伺服器行程來執行協定之功能。 • 一項架設之運作包括所架設的遠程目錄之名稱以及儲存它的伺服器機器之名稱。 • 架設要求被對映至相對之RPC並且送至在特定伺服器機器上執行之架設伺服器。伺服器維持了一份出口串列 (export list)(在 Solaris中之 /etc/dfs/dfstab,只能由超級使用者修改),規格也包含存取權限 (如唯讀)。
3.8.3 NFS協定 • NFS協定提供一組供遠程檔案運作的遠程程序呼叫。此程序提供下列運作: • 在目錄內搜尋某個檔案、讀取一組目錄項目、操作連結及目錄、存取檔案屬性、讀取及寫入檔案。
3.8.4 路徑名稱之轉譯 • NFS中的路徑名稱轉譯(Path-name translation)涉及到將路徑名稱如/user/local/dir1/file.txt分析成個別的目錄項目或元件:(1)user,(2)local,和(3)dir1。 • 路徑名稱轉譯藉由將路徑打散成構成元件之名稱而且為每個元件名稱及目錄vnode執行一項個別之NFS查詢呼叫(lookup call),便可達到路徑名稱之轉譯(path-name translation)。 • 3.8.5 遠程的運作 • 除了開啟及關閉檔案之外,在普通檔案運作之UNIX系統呼叫與NFS協定之RPC間,幾乎具有一對一之對應關係。因此,一項遠程檔案運作可直接轉譯成對應的RPC。
更多標準檔案系統的重要改變是空白區段映對每一個區段超過一位元。每一個使用區段的快照是一位元組的位元映像。當已使用區段的所有快照被刪除時,那一個區段的位元映像均為零,而此空白的區段可被重複使用。使用的區段不能被覆蓋,因此寫入很快速,因為寫入會發生最靠近檔頭地點的空白區段。在WAFL中也有許多其它的表現最佳化。更多標準檔案系統的重要改變是空白區段映對每一個區段超過一位元。每一個使用區段的快照是一位元組的位元映像。當已使用區段的所有快照被刪除時,那一個區段的位元映像均為零,而此空白的區段可被重複使用。使用的區段不能被覆蓋,因此寫入很快速,因為寫入會發生最靠近檔頭地點的空白區段。在WAFL中也有許多其它的表現最佳化。 • 許多快照能同時地存在,因此每月之每日,每日之每時都可以得到快照。當使用者在任何時間使用快照時在被帶的時候,他們存取這些快照時也能存取檔案。快照設備也對備份、測試、版本等等有用。WAFL的快照設備非常有效率,甚至每個被使用的資料區段在區段被修正前不需要寫入時複製的副本。其它檔案系統提供快照,但是常常效率比較差。