下面隨筆給出塊設備文件與文件系統之間的關係解析。node
Linux操做系統秉承「一切皆文件」的設計思想,將全部的設備頁看做文件來進行處理。目前的Linux版本中,當內核發現一個塊設備時,用戶空間會利用udev這一數據結構以及相關的操做來爲塊設備建立其所需的塊設備文件。程序員
關於塊設備文件,能夠從兩方面來進行理解。從塊設備文件的外部表現來看,它是屬於某個外部文件系統上的一個文件。一般Linux內核將其存放在/dev目錄下,用戶像對常規文件同樣來對其進行訪問。從塊設備文件的內部實現來看,它能夠看做是一種特殊文件系統的所屬文件,同時該塊設備文件的文件邏輯編號與塊設備邏輯編號一一對應。數據結構
那如何對常規文件與塊設備文件進行區分?當相似於/dev目錄下的掛載在宿主系統中的塊設備文件,主要經過文件所對應的inode結構中i_mode字段來進行判別,另外在inode結構中i_zone[0]字段中存儲了所對應的塊設備的編號。函數
而爲了對塊設備文件進行便捷的組織與管理,Linux內核建立了bdev文件系統,該文件系統的目的是爲了創建塊設備文件在外部表現與內部實現之間的關聯性。bdev文件系統是一個「僞」文件系統,它只被內核使用,而無需掛載到全局的文件系統樹上。操作系統
塊設備文件除了與常規文件相似的在根文件系統上存在inode以外,其在bdev文件系統上也存在對應的inode。兩個inode之間經過塊設備編號相關聯,須要注意的是,前者的inode稱之爲次inode,然後者稱之爲主inode。設計
Linux中,存在對設備抽象以後的目錄,即/dev,也就是前邊所描述的宿主文件系統下的塊設備文件。該目錄由指向系統中硬件的特殊文件組成。因此程序員能夠便捷的對硬件進行訪問,而不須要使用一些特殊的接口函數。接口
**這些文件其所對應的inode所具備的特徵有如下幾點:**內存
**1. 文件模式爲塊設備文件**硬件
**2. 文件內容爲塊設備編號,保存在inode當中**程序
**3. 文件長度爲0**
雖然bdev文件系統是一個「僞」文件系統,不會掛載在全局文件系統樹中,且只存在於內存中。可是Linux內核仍然根據文件系統的數據結構來對其進行建立。 對於每一個塊設備,在bdev文件系統中都有一個indoe,同時磁盤和分區也會有屬於本身的inode。Linux內核利用blokc_inode數據結構表示塊設備的inode,其中包含了兩個字段,分別是struct block_device,即塊設備描述符。另外一個是struct inode,即inode描述符。可是Linux系統爲了可以對總體的inode進行統一的管理,所以在宿主系統中建立了與bdev文件系統中相對應的inode。