關於linux塊設備和字符設備的舉例

字符設備:提供連續的數據流,應用程序可以順序讀取,通常不支持隨機存取。相反此類設備支持按字節/字符來讀寫數據。舉例來說,鍵盤是典型的字符設備。

塊設備:應用程序可以隨機訪問設備數據,程序可自行確定讀取數據的位置。硬盤典型的塊設備,應用程序可以尋址磁盤上的任何位置,並由此讀取數據。此外,數據的讀寫只能以塊(通常是512B)的倍數進行。與字符設備不同,塊設備並不支持基於字符的尋址。

鍵盤這種設備提供的就是一個數據流,當你敲入“fox”這個字符串時,鍵盤驅動程序會按照和輸入完全相同的順序返回這個由三個字符組成的數據流。如果讓鍵盤驅動程序打亂順序來讀字符串,或讀取其他字符,都是沒有意義的。所以鍵盤就是一種典型的字符設備,它提供的就是用戶從鍵盤輸入的字符流。對鍵盤進行讀操作會得到一個字符流,首先是“f”,然後是“o”,最後是“x”,最終是文件的結束(EOF)當沒人敲鍵盤時,字符流就是空的。

硬盤設備的情況就不大一樣了。硬盤設備的驅動可能要求讀取磁盤上任意塊的內容,然後又轉去讀取別的塊的內容,而被讀取的塊在磁盤上位置不一定要連續,所以說硬盤可以被隨機訪問,而不是以流的方式被訪問,顯然它是一個塊設備。

   內核管理塊設備要比管理字符設備細緻得多,需要考慮的問題和完成的工作相比字符設備來說要複雜許多。這是因爲字符設備僅僅需要控制一個位置—當前位置—而塊設備訪問的位置必須能夠在介質的不同區間前後移動。所以事實上內核不必提供一個專門的子系統來管理字符設備,但是對塊設備的管理卻必須要有一個專門的提供服務的子系統。不僅僅是因爲塊設備的複雜性遠遠高於字符設備,更重要的原因是塊設備對執行性能的要求很高;對硬盤每多一分利用都會對整個系統的性能帶來提升,其效果要遠遠比鍵盤吞吐速度成倍的提高大得多。另外,我們將會看到,塊設備的複雜性會爲這種優化留下很大的施展空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章