下面隨筆給出塊設(shè)備文件與文件系統(tǒng)之間的關(guān)系解析,。 Linux操作系統(tǒng)秉承“一切皆文件”的設(shè)計思想,,將所有的設(shè)備頁看作文件來進行處理。目前的Linux版本中,,當(dāng)內(nèi)核發(fā)現(xiàn)一個塊設(shè)備時,,用戶空間會利用udev這一數(shù)據(jù)結(jié)構(gòu)以及相關(guān)的操作來為塊設(shè)備創(chuàng)建其所需的塊設(shè)備文件。 關(guān)于塊設(shè)備文件,,可以從兩方面來進行理解,。從塊設(shè)備文件的外部表現(xiàn)來看,它是屬于某個外部文件系統(tǒng)上的一個文件,。通常Linux內(nèi)核將其存放在/dev目錄下,,用戶像對常規(guī)文件一樣來對其進行訪問。從塊設(shè)備文件的內(nèi)部實現(xiàn)來看,,它可以看作是一種特殊文件系統(tǒng)的所屬文件,,同時該塊設(shè)備文件的文件邏輯編號與塊設(shè)備邏輯編號一一對應(yīng)。 那如何對常規(guī)文件與塊設(shè)備文件進行區(qū)分,?當(dāng)類似于/dev目錄下的掛載在宿主系統(tǒng)中的塊設(shè)備文件,,主要通過文件所對應(yīng)的inode結(jié)構(gòu)中i_mode字段來進行判別,另外在inode結(jié)構(gòu)中i_zone[0]字段中存儲了所對應(yīng)的塊設(shè)備的編號,。 而為了對塊設(shè)備文件進行便捷的組織與管理,,Linux內(nèi)核創(chuàng)建了bdev文件系統(tǒng),該文件系統(tǒng)的目的是為了建立塊設(shè)備文件在外部表現(xiàn)與內(nèi)部實現(xiàn)之間的關(guān)聯(lián)性,。bdev文件系統(tǒng)是一個“偽”文件系統(tǒng),,它只被內(nèi)核使用,而無需掛載到全局的文件系統(tǒng)樹上,。 塊設(shè)備文件除了與常規(guī)文件類似的在根文件系統(tǒng)上存在inode之外,,其在bdev文件系統(tǒng)上也存在對應(yīng)的inode。兩個inode之間通過塊設(shè)備編號相關(guān)聯(lián),,需要注意的是,,前者的inode稱之為次inode,而后者稱之為主inode。 Linux中,,存在對設(shè)備抽象之后的目錄,,即/dev,也就是前邊所描述的宿主文件系統(tǒng)下的塊設(shè)備文件,。該目錄由指向系統(tǒng)中硬件的特殊文件組成,。所以程序員可以便捷的對硬件進行訪問,而不需要使用一些特殊的接口函數(shù),。 **這些文件其所對應(yīng)的inode所具有的特征有以下幾點:** **1. 文件模式為塊設(shè)備文件** **2. 文件內(nèi)容為塊設(shè)備編號,,保存在inode當(dāng)中** **3. 文件長度為0** 雖然bdev文件系統(tǒng)是一個“偽”文件系統(tǒng),不會掛載在全局文件系統(tǒng)樹中,,且只存在于內(nèi)存中,。但是Linux內(nèi)核仍然根據(jù)文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)來對其進行創(chuàng)建。 對于每個塊設(shè)備,,在bdev文件系統(tǒng)中都有一個indoe,,同時磁盤和分區(qū)也會有屬于自己的inode。Linux內(nèi)核利用blokc_inode數(shù)據(jù)結(jié)構(gòu)表示塊設(shè)備的inode,,其中包含了兩個字段,,分別是struct block_device,即塊設(shè)備描述符,。另一個是struct inode,,即inode描述符。但是Linux系統(tǒng)為了能夠?qū)φw的inode進行統(tǒng)一的管理,,因此在宿主系統(tǒng)中創(chuàng)建了與bdev文件系統(tǒng)中相對應(yīng)的inode,。 |
|