linux中設備和模塊的分類介紹
2016-02-22 16:45:04
來源:北大青鳥深圳嘉華學校
[導讀] 字符設備:字符設備是能夠像字節流(類似文件)一樣被訪問的設備,有字符設備驅動程序來實現這種特性。字符設備驅動程序通常至少要實現open、close、read、write系統調用。字符設備可以通過文件系統節點來訪問,這些設備文件和普通文件之間的唯一差別在于對普通文件的訪問可以前后移動
字符設備:字符設備是能夠像字節流(類似文件)一樣被訪問的設備,有字符設備驅動程序來實現這種特性。字符設備驅動程序通常至少要實現open、close、read、write系統調用。字符設備可以通過文件系統節點來訪問,這些設備文件和普通文件之間的唯一差別在于對普通文件的訪問可以前后移動訪問位置,而大多數字符設備是一個只能順序訪問的數據通道。一個字符設備是一種字節流設備,對設備的存取只能按順序按字節的存取而不能隨機訪問,字符設備沒有請求緩沖區,所有的訪問請求都是按順序執行的。但事實上現在一些高級字符設備也可以從指定位置一次讀取一塊數據。
塊設備:塊設備也是通過設備節點來訪問。塊設備上能夠容納文件系統。在大多數unix系統中,進行I/O操作時塊設備每次只能傳輸一個或多個完整的塊,而每塊包含512字節(或更2的更高次冪字節的數據)。linux可以讓應用程序向字符設備一樣讀寫塊設備,允許一次傳遞任意多字節的數據。因而,塊設備和字符設備的區別僅僅在于內核內部管理數據的方式,也就是內核及驅動程序之間的軟件接口,而這些不同對用戶來講是透明的。在內核中,和字符驅動程序相比,塊驅動程序具有完全不同的接口。存儲設備一 般屬于塊設備,塊設備有請求緩沖區,并且支持隨機訪問而不必按照順序去存取數據,比如你可以 先存取后面的數據,然后在存取前面的數據,這對字符設備來說是不可能的。Linux下的磁盤設備都是塊設備,盡管在Linux下有塊設備節點,但應用程序一般是通過文件系統及其高速緩存來訪問塊設備的,而不是直接通過設備節點來讀寫塊設備上的數據。
網絡設備:網絡設備不同于字符設備和塊設備,它是面向報文的而不是面向流的,它不支持隨機訪問,也沒有請求緩沖區。由于不是面向流的設備,因此將網絡接口映射到文件系統中的節點比較困難。內核和網絡設備驅動程序間的通訊,完全不同于內核和字符以及塊驅動程序之間的通訊,內核調用一套和數據包傳輸相關的函數而不是read,write。網絡接口沒有像字符設備和塊設備一樣的設備號,只有一個唯一的名字,如eth0、eth1等,而這個名字也不需要與設備文件節點對應。
由上大致總結下字符設備與塊設備的區別:1、字符設備是面向流的,最小訪問單位是字節;而塊設備是面向塊的,最小訪問單位是512字節或2的更高次冪。2、字符設備只能順序按字節訪問,而塊設備可隨機訪問。3、塊設備上可容納文件系統,訪問形式上,字符設備通過設備節點訪問,而塊設備雖然也可通過設備節點訪問,但一般是通過文件系統來訪問數據的。