複製鏈接
請複製以下鏈接發送給好友

UNIX文件系統

鎖定
Unix文件系統是對存儲設備上的數據和元數據進行組織的機制。UNIX文件系統是UNIX系統的心臟部分,提供了層次結構的目錄和文件。
中文名
UNIX文件系統
外文名
UNIX file system
學    科
計算機應用
應    用
Unix/Linux系統
物理結構
索引文件結構
目錄結構
採用多級樹型目錄結構

UNIX文件系統軟件介紹

Unix系統的產生和流行推動了操作系統的革命,它的設計思想和在發展過程中積累的豐富經驗及教訓仍可為人們借鑑。文件系統負責系統內文件信息的管理,在整個系統中起着至關重要的作用,文件系統是Unix成功的關鍵。Unix系統採用樹形文件結構、內核與外核的結合、設備與文件一樣的管理機制和使用方法等技術和措施,使得Unix文件系統成為當代非常優秀的系統 [1] 

UNIX文件系統管理結構

圖1 圖1
Unix文件系統是通過“磁盤索引i節點”、“目錄項”來進行管理的,在文件被打開或被引用後還需要“內存索引i節點”、“用户文件描述表”、“文件表”。文件系統磁盤結構如圖1。管理塊主要管理磁盤結構中各部分區域的大小及資源(i節點,磁盤塊)的使用情況與管理方式。i節點區用於存放該文件系統全部磁盤i節點結構,磁盤索引節點包含文件的重要信息如下:文件所有者標識符;文件類型;文件存取許可權;文件聯結數目;文件存取時間;文件長度;文件地址索引表。
Unix的每個目錄項只存放文件名和i節點號,共16個字節,而文件中除名字以外的信息都存放到i節點中,優點是系統各級目錄的規模大大減少。在Unix文件系統中,為了提高系統效率,減少內存空間的佔用,當打開一個文件時,只是將與該文件相聯繫的目錄項和磁盤i節點拷貝到主存中,為了對打開的文件進行管理,因此又設置了打開文件管理機構,它又由下列三部分組成:
1、活動i節點(內存i節點)。作用是反映文件當前活動的情況,因此它添加了一些項目:內存索引節點狀態、設備號、索引節點號、內存索引節點的訪問計數。
2、打開文件表。i節點中只包含有文件的靜態信息,但當一個文件被同一進程或不同進程、用同一或不同路徑名、相同的或互異操作同時打開時,僅靠i節點就不能滿足要求,因此,打開文件表記錄了打開文件所需的一些附加信息:讀寫狀態、引用計數、指向內存索引點的指針、讀/寫位置指針。
3、用户文件描述符表。每個用户進程有一個用户文件描述符表,每一個表項就是一個指針,並指向打開文件表的一個表項,這個表的作用就是保證每個進程能夠打開多個文件,或者對同一個文件以不同形式操作打開。假定一個進程執行下列代碼:
fd1= open(”/etc/pad”,O- RDONLY);
fd1= open(”/etc/pad”,O- RDWD);
圖2 圖2
則這三個表的作用和關係如圖2所示。

UNIX文件系統物理結構

圖3 圖3
Unix文件系統採用的是索引文件結構,在索引節點中建立有13個地址項,如圖3。
對於長度不超過10個物理塊的小型文件,可直接找到該文件所在的盤塊號;對於中、大型文件採用一次或兩次間接尋址;對超大型文件採用三次間接尋址。索引節點的優點是:索引節點佔用的空間小,對小文件的索引速度快,同時又允許組織大型和超大型文件。文件最多可佔用的物理塊數可達到10+ 256+256^2+ 256^3個。
Unix的統計數據表明,80%為小文件,20%為大文件(其中1%為超大文件),這組數據就更加説明了Unix文件系統設計的精妙和科學。為了提高磁盤空間的利用率,允許文件在磁盤上不連續存放,且其尋址方式最多可達到三次。它的缺點是造成訪問文件的尋道時間延長和多次訪問磁盤。在非實時場合是可行的,但在實時場合,它的這一缺點就很突出。例如:假設磁盤的平均尋道時間為15ms,每個磁盤塊的大小為512字節,某文件大小為3kB,如果連續存放,尋道時間只需15ms;如果不連續存放,它要佔用6個分散的磁盤塊,可能位於不同的磁道,因此尋道時間需90ms,比連續存放多浪費75ms。

UNIX文件系統空閒磁盤塊

Unix文件系統通過管理塊來實現空閒塊管理。管理塊的數據結構如下:
struct filsys{    
    int s- isize; /*i節點區總塊數*/   
    int s- fsize; /*文件卷總塊數*/  
    int s- nfree; /*直接管理的空閒塊數*/   
    int s- free[100] ; /*空閒塊號棧*/   
    int s- ninode; /*直接管理的空閒i節點數*/   
    int s- inode[100] ;/*空閒i節點號棧*/
… …
} 
空閒塊的管理方法是:將空閒塊從後向前,若干個空閒塊(如100個)分為一組(最後一組為99塊),每組最後一塊作為索引表,用來登記下一組100的物理塊號和塊數,最前的一組物理塊號和塊數存放在管理塊的s_free[100]和s_nfree中。這種對空閒塊先分組,再把組與組進行鏈接的管理方法稱為組鏈接法。對空閒塊的分配和釋放類似於棧,使用後進先出算法。但其管理機構分為兩級,一級常駐內存(管理塊的s-nfree和s-free[]),另一級則駐在各組的第一個盤塊上。其優點是常駐內存的只有一個組,而不是將所有組的空閒表都調入內存,這樣就大大的節省了內存空間,同時軟件開銷也小。缺點是可能導致物理塊的利用率不均勻。例如:假設當前的s-nfree= 80,此時某進程釋放一個文件塊,其佔用的物理塊號為300,系統回收它後,s-nfree= 81,s-free[81]= 300。接着某用户又申請物理空間,文件系統總是從索引表中取最後一項的值,即s-free[81]出棧,將300號物理塊又立即分配使用。可以想象,300號塊還會面臨再釋放,再分配的可能。300號塊多次被使用,而其它空閒塊卻未被分配使用,即有些物理塊可能長期被使用,而有些物理塊可能長期得不到使用,因此對外存儲器的使用壽命不利。

UNIX文件系統結構和共享

Unix的文件系統採用多級樹型目錄結構,其優點是有效的解決了文件重名問題,又可以很方便地實現文件共享。基本文件系統和子文件系統是可安裝和可拆卸的,但在多用户環境下,多用户間共享數據同樣感到不方便,絕對路徑名是文件的唯一符號名,用户難以用另外符號名使用共享文件,因此Uinx文件又提供瞭如下兩種鏈接機制。
1、硬鏈接技術。如果想為文件1.c建立一個硬鏈接2.c,則只需將2.c的目錄項指針指到文件1.c的i節點,同時將i節點鏈接數加1即可。這樣用户似乎是增加了一個物理拷貝,可實際卻只有一個文件實體,當刪除鏈接時,只要刪除一個目錄項和將鏈接數減1。
2、符號鏈接技術。如果想為usr/sxk/1.c建立一個符合鏈接2.c,則Unix通過read link讀出文件內容,即找到原文件路徑名,再通過原文件路徑名去打開文件。符號鏈接相當於給文件增加了一個別名。也可為目錄建立符號鏈接,並且可以跨文件系統。Unix文件鏈接的優點是用很小的開銷為多用户共享文件提供了有效方式,且能快速定位文件和目錄;缺點是對多用户使用文件不能加以併發控制,易造成數據的不一致性。硬鏈接只適用於普通文件,而不適用於目錄文件和不同文件系統。

UNIX文件系統安全性

Unix是多用户操作系統,且它的各種外圍設備都由相應的文件表示,因此安全性就很重要,它的安全主要通過磁盤i節點的權限設置來實現,每個Unix文件和Unix目錄,都有3個允許的比特位設置,分別定義文件所有者、分組和其他人的使用權限,如:允許讀、允許寫、允許執行、允許SUID、允許SGID等,系統對文件保護的支持是比較充分的,只要正確設置文件和目錄的權限,文件安全是有保障的。但需要注意的是,權限為SGID和SUID的可執行文件。SGID(SUID)中的S指set,程序在運行時,其進程的EUID(Effective UserID)或EGID(Effective Group ID)會被設成文件擁有者的UID、GID,從而進程也具有了Owner或OwnerGroup的權限。因此,如果使用不當,SGID和SUID程序會給系統安全性帶來極大的危害。另外,在Unix系統中還應當留意設備文件,謹防它成為不安全的後門。例如,如果某個用户擁有/dev/lmem的讀寫權限,他就可以使用debugger(或其它程序)修改優先級或其它屬性,也可以讀取系統緩衝區的數據。Unix中的日誌文件能夠記錄操作系統的使用狀況,通過分析日誌文件可以發現攻擊跡象。
參考資料