Unix系統(tǒng)的心臟Unix文件系統(tǒng)
我們知道Unix文件系統(tǒng)是Unix系統(tǒng)的心臟部分,提供了層次結(jié)構(gòu)的目錄和文件.文件系統(tǒng)將磁盤空間劃分為每1024個字節(jié)一組,稱為塊(block)(也有用512字節(jié) 為一塊的,如:SCO XENIX).編號從0到整個磁盤的***塊數(shù).
全部塊可劃分為四個部分,塊0稱為引導(dǎo)塊,Unix文件不用該塊;塊1稱為專用塊,專用塊含有許多信息,其中有磁盤大小和全部塊的其它兩部分的大小.從塊2開始是i節(jié)點表,i節(jié)點表中含有i節(jié)點,表的塊數(shù)是可變的,后面將做討論.
i節(jié)點表之后是空閑存儲塊(數(shù)據(jù)存儲塊),可用于存放文件內(nèi)容. 文件的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)是十分不同的,邏輯結(jié)構(gòu)是用戶敲入cat命令 后所看到的文件,用戶可得到表示文件內(nèi)容的字符流.物理結(jié)構(gòu)是文件實際上如何存放在磁盤上的存儲格式.用戶認(rèn)為自己的文件是邊疆的字符流,但實際 上文件可能并不是以邊疆的方式存放在磁盤上的,長于一塊的文件通常將分散地存放在盤上.
然而當(dāng)用戶存取文件時,Unix文件系統(tǒng)將以正確的順序取各塊, 給用戶提供文件的邏輯結(jié)構(gòu). 當(dāng)然,在Unix系統(tǒng)的某處一定會有一個表,告訴文件系統(tǒng)如何將物理結(jié)構(gòu)轉(zhuǎn)換為邏輯結(jié)構(gòu).這就涉及到i節(jié)點了.
i節(jié)點是一個64字節(jié)長的表,含有有關(guān)一個Unix文件的信息,其中有文件大小,文件所有者,文件存取許可方式,以及文件為 普通文件,目錄文件還是特別文件等.在i節(jié)點中最重要的一項是磁盤地址表. 該表中有13個塊號.前10個塊號是文件前10塊的存放地址.這10個塊號能給出一個至多10塊長的文件的邏輯結(jié)構(gòu),文件將以塊號在磁盤地址表中出現(xiàn)的順序 依次取相應(yīng)的塊.
當(dāng)文件長于10塊時又怎樣呢?磁盤地址表中的第十一項給出一個塊號,這 個塊號指出的塊中含有256個塊號,至此,這種方法滿足了至多長于266塊的文件(272,384字節(jié)).如果Unix文件大于266塊,磁盤地址表的第十二項給出一個塊號, 這個塊號指出的塊中含有256個塊號,這256個塊號的每一個塊號又指出一塊, 塊中含256個塊號,這些塊號才用于取Unix文件的內(nèi)容.
磁盤地址中和第十三項索引 尋址方式與第十二項類似,只是多一級間接索引. 這樣,在Unix系統(tǒng)中,文件的***長度是16,842,762塊,即17,246,988,288 字節(jié),有幸是Unix系統(tǒng)對Unix文件的***長度(一般為1到2M字節(jié))加了更實際的 限制,使用戶不會無意中建立一個用完整個磁盤窨所有塊的文件.
Unix文件系統(tǒng)將文件名轉(zhuǎn)換為i節(jié)點的方法實際上相當(dāng)簡單.一個目錄實際上 是一個含有目錄表的文件:對于目錄中的每個文件,在目錄表中有一個入口項, 入口項中含有文件名和與文件相應(yīng)的i節(jié)點號.
【編輯推薦】


















