您好,登錄后才能下訂單哦!
這篇文章主要介紹了Linux操作系統中的塊設備是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Linux操作系統中的塊設備是什么文章都會有所收獲,下面我們一起來看看吧。
在Windows操作系統下磁盤設備似乎是一個實實在在的設備,我們可以通過圖形界面對磁盤設備進行管理。如圖1是Windows下的磁盤管理界面,可以通過這個界面清晰的看到磁盤設備,并且可以對其進行格式化等操作。
圖1 Windows磁盤設備
Linux操作系統的磁盤設備并不直觀,在LInux系統中“一切皆文件”的理念下,磁盤設備其實是一個文件,只不過是一個比較特殊的文件。如圖2是某些磁盤和分區的文件路徑,其中黃色字體部分是磁盤的路徑(類似文件路徑),而前面紅色方框內的b表示這個文件是磁盤設備文件,而非普通文件。
圖2 Linux系統下磁盤設備
磁盤設備文件也是位于VFS(虛擬文件系統)下面,與Ext4等文件系統類似(參考圖3)。用戶層面可以用訪問普通文件的接口(API)訪問磁盤。如下代碼是用Python實現的一個向磁盤寫入字符串的程序。代碼很簡單,就是打開磁盤所在的路徑(path),然后調用write函數寫數據。
Linux系統中磁盤的本質
通過上面的描述我們知道對于Linux操作系統來說,磁盤就是一個文件。而磁盤本身就是一個線性存儲空間(可以理解為一個大數組),這種方式與文件也是非常類似的。鑒于上述相似性,Linux將磁盤設備抽象為一個文件并沒有任何不妥之處。
實質上,在Linux操作系統磁盤設備是基于一個稱為bdev的偽文件系統來管理的,bdev文件系統是一個在內存中的偽文件系統(在內存的文件系統,無持久化的數據),位置與Ext4等文件系統相同。如圖3所示,bdev文件系統的位置為圖中紅色區域。
圖3 bdev文件系統位置
理解了塊設備的管理方式,再結合我們之前對文件系統的相關介紹,這樣就很容易理解后續的內容了。在文件系統相關文章介紹中我們知道,不同文件系統數據處理的關鍵是其提供的函數集,而這個函數集是在打開文件的時候確定的。磁盤設備也是如此,當我們打開磁盤設備時,操作系統根據磁盤設備的特性,會初始化inode中的函數集。而后續對該磁盤設備的讀寫操作就能通過該函數集完成。如下代碼所示 ,塊設備連同字符設備和管道都作為特殊的文件進行處理,并初始化對應的函數集。
完成函數集的初始化后,當用戶調用VFS層的接口時,VFS層就可以找到具體的處理函數,進而完成用戶的操作。這里的函數集與本地文件系統的函數集別無二致,差異在于普通文件系統需要管理目錄和文件,而bdev偽文件系統是將磁盤看作一個大文件,更簡單一些。
磁盤的緩存
既然磁盤偽文件系統bdev本身也是一個文件系統,因此自然也可以有緩存。這個緩存就是用于提升磁盤性能的緩存系統。磁盤的緩存系統與文件系統的緩存系統類似,也是通過頁緩存來實現的。當然,Linux磁盤的緩存是可以關閉的,此時將調用另外一套函數集。
這樣說起來可能比較抽象,下面我們以一個具體的例子來看一下磁盤緩存的具體實現。如下是磁盤偽文件系統的函數集,我們以寫數據為例進行介紹。
圖4 磁盤函數集
寫數據的函數為blkdev_write_iter,該函數會調用generic_perform_write函數。如果大家閱讀過本號關于文件系統的文件的話,很清楚后者就是VFS中向頁緩存寫數據的函數。也就是說塊設備偽文件系統的邏輯與本地文件系統完全一致。
關于“Linux操作系統中的塊設備是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Linux操作系統中的塊設備是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。