Linux檔案系統結構分析論文

摘 要:闡述了Linux系統的檔案結構型別,指出了EXT2是在Linux系統中最為常用的檔案系統。

Linux檔案系統結構分析論文

分析了EXT2檔案系統的磁碟佈局、索引結點及目錄結構,研究了EXT2系統實現按名存取的方法,檔案讀取速度更高效

關鍵詞EXT2檔案系統;索引結點;混合索引;檔案目錄

Linux系統的一個重要的特徵就是支援多種不同的檔案系統,如:EXT、FAT、EXT2、EXT3、SYSV等。目前,Linux主要使用的檔案系統是EXT2和EXT3檔案系統,也是Linux使用者最常用的檔案系統。

各種Linux的系統釋出都將EXT2作為作業系統的基礎。EXT2檔案系統支援標準UNIX檔案型別:普通檔案、目錄檔案、特別檔案和符號連結。

1 EXT2磁碟佈局

EXT2和其他邏輯塊檔案一樣,由邏輯塊序列組成,根據用途劃分,這些邏輯塊通常有:引導塊、超級塊、inode區及資料區等。

EXT2將其所佔的邏輯分區劃分為塊組,由一個引導塊和其他塊組組成,每個塊組又由超級塊、組描述符表、塊點陣圖、索引節點點陣圖、索引節點表、資料區構成,如圖1所示。

圖1 EXT2磁碟佈局在邏輯空間的映像每個塊中儲存的這些資訊是有關EXT2檔案系統的備份資訊。當某個塊組的超級塊或inode受損時,這些資訊可以用來恢復檔案系統。

2 EXT2索引結點

EXT2檔案系統中的資料是以資料塊的方式儲存在檔案中的。這些資料塊的大小相同,其大小在EXT2建立時設定。磁碟上儲存檔案的基本單位是簇。一個簇也稱為一個磁碟塊,它通常是2n個磁碟扇區大小。

EXT2檔案系統用一個inode資料結構描述系統中的每一個檔案,定義系統的拓撲結構。一個inode描述了一個檔案中的資料佔用了哪些塊以及檔案的訪問許可權、檔案的修改時間和檔案的型別。EXT2檔案系統中的每一個檔案都用一個inode描述,而每一個inode都用一個獨一無二的數字標識。檔案系統的inode都放在一起,在inode索引表中。

EXT2塊組中組描述符中的項稱為組描述符,用於描述某個塊組的整體資訊。每個塊組都有一個相應的組描述符來描述它,所有的組描述符形成一個組描述符表,並在使用時被調入塊快取記憶體。

EXT2中每個塊組有兩個位示圖塊,一個用於表示資料塊的使用情況,叫資料塊點陣圖;另一個用於表示索引結點的使用情況,叫索引結點點陣圖。點陣圖中的每一位表示該組中一個數據塊或一個索引塊的使用情況,用0表示空閒,用1表示已分配。

在Linux的EXT2檔案系統中,索引結點inode分為兩類,即磁碟索引結點和記憶體索引結點,通常也分別叫做EXT2 inode和VFS inode。

(1)磁碟索引節點

磁碟索引節點是指存放在磁碟上的索引節點。每個檔案有唯一的一個磁碟索引節點,它主要包括以下內容:檔案所有者標識號:指擁有該檔案的檔案主或同組的識別符號。

檔案型別:指明檔案是普通檔案、目錄檔案還是特別檔案等型別。

檔案實體地址:指出資料檔案所在的物理塊號。如在Linux系統中,通過15個地址項來表明檔案所在的物理塊號。

檔案存取許可權:使用者對檔案的操作型別,如讀、修改、執行等。

檔案大小:檔案所佔有的位元組個數。

檔案連線計數:指明系統中共享該檔案的程序個數。

檔案存取時間:指出該檔案最近被程序存取的時間、最近被修改的時間及索引節點最近被修改的時間等。

(2)記憶體索引節點

記憶體索引節點是指存放在記憶體的索引節點。當檔案開啟時,要將磁碟索引節點複製到記憶體索引節點中,便於以後使用。記憶體索引節點包括以下內容:索引節點編號:標識記憶體索引節點。

索引節點狀態:指示該節點是否已被修改或已被上鎖。

訪問計數:當程序訪問該節點時,訪問計數加1,訪問完再減1。

連結指標:指向空閒連結串列和雜湊佇列的指標。

邏輯裝置名:含有該檔案的檔案系統的邏輯裝置名。

3 檔案的目錄結構

Linux系統的目錄結構採用了將檔名與檔案描述資訊分開的方法。檔案目錄由檔名和該檔案的索引節點號構成,一個目錄項共佔16B。其中,檔名佔14個位元組,索引節點號(或索引節點指標)佔2個位元組。因此,1KB的盤塊中可以存放64(1K/16)個目錄項,這樣就節省了系統查詢及訪問檔案的時間。在一個共有640個FCB的'檔案目錄中查詢一個檔案時,平均只需啟動磁碟5次,因此大大減少了系統開銷。如表1所示為一個檔案目錄的例項。

一個檔案的磁碟索引節點佔64個位元組,主要包括檔案識別符號、檔案存取許可權、檔案實體地址、檔案長度、檔案連線係數、檔案存取時間等一些檔案的重要資訊。

4 檔案的物理結構

Linux系統檔案的物理結構採用混合索引方式,對分配給檔案的磁碟塊進行管理。在Linux檔案系統的索引節點中存在一項i。addr[14],用於存放該檔案的磁碟塊號。如圖2所示為Linux系統的混合索引檔案結構。

(1)直接定址。i。addr[0]—i。addr[9]這10項用於直接存放該檔案所佔用的磁碟塊號,檔案的前10個磁碟塊號依次放入其中。如果磁碟塊的大小為1KB,則當檔案長度不大於10K時,作業系統可採用直接索引檔案的方式對檔案進行訪問,直接從索引節點中找出該檔案所在的磁碟塊號,訪問速度較快。

(2)一次間接定址方式。i。addr[10]項中存放的磁碟塊號所指向的磁碟塊再用來存放下一級的磁碟塊號。假設一個磁塊大小為1KB,每個磁碟塊號佔4個位元組,則一個磁碟塊可存放256個(1KB/4B)磁碟塊號。這樣,通過一次間接定址,i。addr[10]項就引出了256個磁碟塊號,所以,這一級可支援的檔案長度為256K。

(3)二次間接定址方式。i。addr[11]存放的磁碟塊號採用兩級索引的方式,如果沿用以上的假設,則該項可引出2562個磁碟塊,可支援的檔案長度為2562K。

(4)三次間接定址方式。i。addr[12]存放的磁碟塊號採用三級索引的方式,如果仍沿用以上的假設,則該項可引出2563個磁碟塊,可支援的檔案長度為2563K。

由以上分析可以看出,UNIX系統對於長度較小的檔案具有較快的讀寫速度,同時又具有支援大檔案的功能。

圖2 Linux的混合索引檔案結構

Linux系統檔案實現了按名查詢。通過檔名訪問檔案的過程如下:通過檔名查詢檔案目錄,找到該檔案的索引結點號;通過索引結點號查詢索引節點區,找到該檔案的索引點;根據索引結點中提供a。ad—dr,找到該檔案在磁碟的相應的塊號序列;根據塊號,找到檔案內容。

FAT檔案系統與NTFS檔案系統目錄的比較:FAT檔案系統直接以檔案控制塊作為檔案目錄,這樣檔案系統目錄相應較大,查詢速度較慢。以索引結點作為檔案目錄,對於一些小的檔案系統是可以的,但是對較大型的檔案系統就不適用了。Linux系統的檔案目錄為:檔名、索引結點號。這使得Linux系統的檔案目錄更小,查詢速度更快。

5 結束語

由於Linux系統的EXT2檔案系統採用了合理巧妙的檔案系統結構,以及目錄結構,使得該檔案系統多項效能得到優化。採用EXT2系統,能夠大大改善磁碟I/O速度,提高I/O組織的靈活性及程式設計效率。

因此,EXT2檔案系統為開發嵌入式系統及實時應用系統提供了廣泛的基礎和手段。