基本设备类型简介
Linux 將設備分成三種基本類型,分別概述如下:
1、字符設備
字符設備是個能像字節流(類似文件)一樣被訪問的設備,由字符設備驅動程序來實現這種特性。字符設備驅動程序通常至少要實現 open、close、read 和 write 系統調用。字符終端(/dev/console)和串口(/dev/tty0以及類似設備)就是兩個字符設備,它們能很好地說明“流”這種抽象概念。字符設備可以通過文件系統節點來訪問,比如 /dev/tty1 和 /dev/lp0 等。設備文件和普通文件的區別在于普通文件的訪問可以前后移動訪問位置,而大多數字符設備是一個只能順序訪問的數據通道。但也存在具有數據區特性的字符設備,可前后移動訪問設備。例如幀抓取器,應用程序可以用 mmap 或 lseek 訪問抓取的整個圖像。
2、塊設備
塊設備也是通過 /dev 目錄下的文件系統節點來訪問的。塊設備(例如磁盤)上能容納文件系統。在大多數 Unix 系統中,塊設備每次 I/O 操作只能傳輸一個或多個完整的塊,而每塊包含 512 字節(或 2 的更高次冪字節的數據)。Linux 可以讓應用程序像字符設備一樣讀寫塊設備,允許一次傳遞任意多字節的數據。因而,塊設備和字符設備的區別僅僅在于內核內部管理數據的方式,也就是內核及驅動程序之間的軟件接口不同。
3、網絡接口
任何網絡事務都經過一個網絡接口形成,即一個能夠和其他主機交換數據的設備。通常,接口是個硬件設備,但也可能是個純軟件設備,比如環回(loopback)接口。網絡接口由內核中的網絡子系統驅動,負責發送和接收數據包,但它不需要了解每項事務如何映射到實際傳送的數據包。許多網絡連接(尤其是使用 TCP 協議的連接)是面向流的,但網絡設備卻圍繞數據包的傳輸和接收而設計,它不需要知道各個連接的相關信息,只需處理數據包即可。由于不是面向流的設備,因此將網絡接口映射到文件系統中的節點就比較困難。Unix 訪問網絡接口的方法仍然是給它們分配一個唯一的名字(如 eth0),但該名字在文件系統中不存在對應的節點。內核和網絡設備驅動程序間的通信,完全不同于和字符和塊設備驅動程序之間的通信,
是調用一套和數據包傳輸相關的函數而不是 read、write 等。
1、字符設備
字符設備是個能像字節流(類似文件)一樣被訪問的設備,由字符設備驅動程序來實現這種特性。字符設備驅動程序通常至少要實現 open、close、read 和 write 系統調用。字符終端(/dev/console)和串口(/dev/tty0以及類似設備)就是兩個字符設備,它們能很好地說明“流”這種抽象概念。字符設備可以通過文件系統節點來訪問,比如 /dev/tty1 和 /dev/lp0 等。設備文件和普通文件的區別在于普通文件的訪問可以前后移動訪問位置,而大多數字符設備是一個只能順序訪問的數據通道。但也存在具有數據區特性的字符設備,可前后移動訪問設備。例如幀抓取器,應用程序可以用 mmap 或 lseek 訪問抓取的整個圖像。
2、塊設備
塊設備也是通過 /dev 目錄下的文件系統節點來訪問的。塊設備(例如磁盤)上能容納文件系統。在大多數 Unix 系統中,塊設備每次 I/O 操作只能傳輸一個或多個完整的塊,而每塊包含 512 字節(或 2 的更高次冪字節的數據)。Linux 可以讓應用程序像字符設備一樣讀寫塊設備,允許一次傳遞任意多字節的數據。因而,塊設備和字符設備的區別僅僅在于內核內部管理數據的方式,也就是內核及驅動程序之間的軟件接口不同。
3、網絡接口
任何網絡事務都經過一個網絡接口形成,即一個能夠和其他主機交換數據的設備。通常,接口是個硬件設備,但也可能是個純軟件設備,比如環回(loopback)接口。網絡接口由內核中的網絡子系統驅動,負責發送和接收數據包,但它不需要了解每項事務如何映射到實際傳送的數據包。許多網絡連接(尤其是使用 TCP 協議的連接)是面向流的,但網絡設備卻圍繞數據包的傳輸和接收而設計,它不需要知道各個連接的相關信息,只需處理數據包即可。由于不是面向流的設備,因此將網絡接口映射到文件系統中的節點就比較困難。Unix 訪問網絡接口的方法仍然是給它們分配一個唯一的名字(如 eth0),但該名字在文件系統中不存在對應的節點。內核和網絡設備驅動程序間的通信,完全不同于和字符和塊設備驅動程序之間的通信,
是調用一套和數據包傳輸相關的函數而不是 read、write 等。
總結
- 上一篇: 软件单元黑盒测试,软件测试教学资源单元3
- 下一篇: 防卫导弹