Linux的字符設備和塊設備的區別是什么?
Linux的字符設備和塊設備
塊設備是系統中能夠隨機(不需要按順序)訪問固定大小數據片(chunks)的設備,這些數據片就稱作塊。最常見的塊設備是硬盤,除此以外,還有軟盤驅動器、CD-ROM驅動器和閃存等等許多其他塊設備。注意,它們都是以安裝文件系統的方式使用的——這也是塊設備的一般訪問方式。
字符設備按照字符流的方式被有序訪問,像串口和鍵盤就都屬於字符設備。如果一個硬件設備是以字符流的方式被訪問的話,那就應該將它歸於字符設備;反過來,如果一個設備是隨機(無序的)訪問的,那么它就屬於塊設備。
這兩種基本類型的設備的根本區別在於它們是否可以被隨機訪問——換句話說就是,能否在訪問設備時隨意地從一個位置跳轉到另一個位置。
內核管理塊設備要比管理字符設備細致得多,需要考慮的問題和完成的工作相比字符設備來說要復雜許多。這是因為字符設備僅僅需要控制一個位置—當前位置—而塊設備訪問的位置必須能夠在介質的不同區間前后移動。所以事實上內核不必提供一個專門的子系統來管理字符設備,但是對塊設備的管理卻必須要有一個專門的提供服務的子系統。不僅僅是因為塊設備的復雜性遠遠高於字符設備,更重要的原因是塊設備對執行性能的要求很高;對硬盤每多一分利用都會對整個系統的性能帶來提升,其效果要遠遠比鍵盤吞吐速度成倍的提高大得多。另外,我們將會看到,塊設備的復雜性會為這種優化留下很大的施展空間。
塊設備通過系統緩存進行讀取,不是直接和物理磁盤讀取。字符設備可以直接物理磁盤讀取,不經過系統緩存。(如鍵盤,直接相應中斷)
bash 中判斷文件字符型( -c filename),塊文件(-b filename) 。
參考: