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