1. 程式人生 > >作業系統知識點總結(十七)檔案系統知識點總結

作業系統知識點總結(十七)檔案系統知識點總結

磁碟結構

引導控制塊(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。