微吼云上線多路互動直播服務 加速多場景互動直播落地
858
2025-04-01
Linux 操作系統中,各種設備驅動(device driver)通過設備控制器(device controller)來管理各種設備(device),其關系如下圖所示:
這些設備之中,
受同一個 device driver 管理的設備都有相同的 major number,這個數字可以看作設備的類別號碼,被內核用于識別一類設備
受同一個 device driver 管理的同一類設備中的每一個設備都有不同的 minor number,這個數字可以看作設備編號,被設備驅動用來識別每個設備
這些設備之中,
受同一個 device driver 管理的設備都有相同的 major number,這個數字可以看作設備的類別號碼,被內核用于識別一類設備
受同一個 device driver 管理的同一類設備中的每一個設備都有不同的 minor number,這個數字可以看作設備編號,被設備驅動用來識別每個設備
設備驅動主要有三大類:
面向包的網絡設備驅動(package oriented network device driver)
面向塊的存儲設備驅動(block oriented storage device driver),提供緩沖式(buffered)的設備訪問。
面向字節的字符設備驅動 (byte oriented char device driver),有時也稱為裸設備(raw devices),提供非緩沖的直接的設備訪問(unbuffered direct access),比如串口設備,攝像頭,聲音設備等。實際上,除了網絡設備和存儲設備以外的其它設備都是某種字符設備。
除此以外,還有一類設備,稱為偽設備(pseudo device),它們是軟件設備。Linux 上的 device 不一定要有硬件設備,比如 /dev/null, /dev/zero 等。
關于字符設備和塊設備的更多區別:
塊設備只能以塊為單位接受輸入和返回輸出,而字符設備則以字節為單位。大多數設備是字符設備,因為它們不需要緩沖而且不以固定塊大小進行操作。
塊設備對于I/O 請求有對應的緩沖區,因此它們可以選擇以什么順序進行響應,字符設備無須緩沖且被直接讀寫。對于存儲設備而言調 讀寫的順序作用巨大,因為在讀寫連續的扇區比分離的扇區更快。
字符設備只能被順序讀寫,而塊設備可以隨機訪問。雖然塊設備可隨機訪問,但是對于磁盤這類機械設備而言,順序地組織塊設備的訪問可以提高性能。
用戶空間的各種應用是通過 device driver 來操作設備的:
從這個圖上可以看出:
網絡設備驅動之上,分別有包調度器(packet scheduler),網絡協議層(network protocols),NetFilter (防火墻)和 scoket 層,其中,網絡設備驅動以 socket 作為應用層的接口
塊設備驅動之上,分別有 I/O Scheduler,通用塊層(generic block layer)和文件系統,其中,塊設備驅動以設備文件 (device file)作為應用層的接訪問口
字符設備驅動之上,分別有 Line discipline 和 terminals,其中,terminals 作為和應用的訪問接口
應用程序通過訪問這些設備文件像操作文件一樣來訪問這些設備,可以使用的接口包括:
int open(const char *path, int oflag, ... )
int close(int fd);
ssize_t write(int fd, const void *buf, size_t nbyte)
ssize_t read(int fd, void *buf, size_t nbyte)
int ioctl(int d, int request, ...)
在 Linux 系統上,設備驅動可以被動態加載和刪除
lsmod - 列出當前已經被加載的模塊
insmod
modprobe
rmmod
Linux 存儲
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。