1. 程式人生 > >《計算機作業系統》總結九(磁碟)

《計算機作業系統》總結九(磁碟)

4.12 檔案系統知識點總結

磁碟結構

引導控制塊(Boot Control Block)包括系統從該分割槽引導作業系統所需要的資訊。如果磁碟沒有作業系統,那麼這塊的內容為空。它通常為分割槽的第一塊。UFS稱之為引導塊(Boot Block); NTFS 稱之為分割槽引導扇區(Partition Boot Sector)。

分割槽控制塊(Partition Control Block)包括分割槽詳細資訊,如分割槽的塊數、塊的大小、 空閒塊的數量和指計、空閒FCB的數量和指標等。UPS稱之為超級塊(Superblock);而NTFS 稱之為主控檔案表(Master File Table)。

記憶體結構

記憶體分割槽表包含所有安裝分割槽的資訊。

記憶體目錄結構用來儲存近來訪問過的目錄資訊。對安裝分割槽的目錄,可以包括一個指向分割槽表的指標。

系統範圍的開啟檔案表,包括每個開啟檔案的FCB複製和其他資訊。

單個程序的開啟檔案表,包括一個指向系統範圍內已開啟檔案表中合適條目和其他資訊的指標。

檔案系統實現概述

為了建立一個檔案,應用程式呼叫邏輯檔案系統。邏輯檔案系統知道目錄結構形式,它將分配一個新的FCB 給檔案,把相應目錄讀入記憶體,用新的檔名更新該目錄和FCB,並將結果寫回到磁碟。圖4-32顯示了一個典型 的 FCB。


圖4-32  典型的FCB

一旦檔案被建立,它就能用於I/O,不過首先要開啟檔案。呼叫open將檔名傳給檔案系統,檔案系統根據給定檔名搜尋目錄結構。部分目錄結構通常快取在記憶體中以加快目錄操作。找到檔案後,其FCB複製到系統範圍的開啟檔案表。該表不但儲存FCB,也有開啟該檔案的程序數量的條目。

然後,單個程序的開啟檔案表中會增加一個條目,並通過指標將系統範圍的開啟檔案表的條目同其他域(檔案當前位置的指標和檔案開啟模式等)相連。呼叫open返回的是一個 指向單個程序的開啟檔案表中合適條目的指標。所以檔案操作都是通過該指標進行。

檔名不必是開啟檔案表的一部分,因為一旦完成對FCB在磁碟上的定位,系統就不 再使用檔名了。對於訪問開啟檔案表的索引,UNIX稱之為檔案描述符(File Descriptor);而Windows 2000稱之為檔案控制代碼(File Handle)。因此,只要檔案沒有被關閉,所有檔案操 作通過開啟檔案表來進行。

當一個程序關閉檔案,就刪除一個相應的單個程序開啟檔案表的條目即目錄項,系統範 圍內開啟檔案表的開啟數也會遞減。當開啟檔案的所有使用者都關閉了一個檔案時,更新的文 件資訊會複製到磁碟的目錄結構中,系統範圍的開啟檔案表的條目也將刪除。

在實際中,系統呼叫open會首先搜尋系統範圍的開啟檔案表以確定某檔案是否已被其 他程序所使用。如果是,就在單個程序的開啟檔案表中建立一項,並指向現有系統範圍的打 開檔案表的相應條目。該演算法在檔案已開啟時,能節省大量開銷。

混合索引分配的實現

混合索引分配已在UNIX系統中釆用。在UNK SystemV的索引結點中,共設定了 13 個地址項,即iaddr(O)~iaddr(12),如圖4-33所示。在BSD UNIX的索引結點中,共設定了 13個地址項,它們都把所有的地址項分成兩類,即直接地址和間接地址。


圖4-33 UNIX系統的inode結構示意圖

1) 直接地址

為了提高對檔案的檢索速度,在索引結點中可設定10個直接地址項,即用iaddr(O)~iaddr(9)來存放直接地址。換言之,在這裡的每項中所存放的是該檔案資料所在盤塊的盤塊號。假如每個盤塊的大小為4KB,當檔案不大於40KB時,便可直接從索引結點中讀出該文 件的全部盤塊號。

2)  一次間接地址

對於大、中型檔案,只釆用直接地址並不現實。可再利用索引結點中的地址項iaddr(lO) 來提供一次間接地址。這種方式的實質就是一級索引分配方式。圖中的一次間址塊也就是索 引塊,系統將分配給檔案的多個盤塊號記入其中。在一次間址塊中可存放1024個盤塊號, 因而允許檔案長達4MB。

3) 多次間接地址

當檔案長度大於4MB+40KB(—次間址與10個直接地址項)時,系統還須釆用二次間 址分配方式。這時,用地址項iaddr(11)提供二次間接地址。該方式的實質是兩級索引分配方 式。系統此時是在二次間址塊中記入所有一次間址塊的盤號。在釆用二次間址方式時,檔案 最大長度可達4GB。同理,地址項iaddr(12)作為三次間接地址,其所允許的檔案最大長度可 達 4TB。