下面隨筆給出塊設備檔案與檔案系統之間的關系決議,
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,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/264665.html
標籤:Linux
下一篇:使用dlopen加載動態庫
