身為Linux用戶,你是否曾經遇到過需要使用區塊裝置或字元裝置的情況?雖然塊設備和字元設備在外觀和功能上很相似,但它們在實現方式和使用方法上卻有很大的區別。今天,我們將帶大家深入了解Linux中的block和string設備,探究它們的差異以及如何正確地使用它們。
系統中能夠隨機(不需要依序)存取固定大小資料片(chunks)的設備被稱為區塊設備,這些資料片就稱為區塊。最常見的區塊設備是硬碟,除此之外,還有軟碟機、CD-ROM驅動器和快閃記憶體等等許多其他區塊裝置。請注意,它們都是以安裝檔案系統的方式使用的——這也是區塊設備的一般存取方式。
另一種基本的設備類型是字元設備。字符設備按照字符流的方式被有序訪問,像串口和鍵盤就都屬於字符設備。如果硬體設備是以字元流的方式被存取的話,那就應該將它歸於字元設備;反過來,如果一個設備是隨機(無序的)存取的,那麼它就屬於區塊設備。
這兩種類型的設備的根本區別在於它們是否可以被隨機存取——換句話說就是,能否在訪問設備時隨意地從一個位置跳到另一個位置。舉個例子,鍵盤這種裝置提供的就是一個資料流,當你敲入「fox」 這個字串時,鍵盤驅動程式會按照和輸入完全相同的順序傳回這個由三個字元組成的資料流。如果讓鍵盤驅動程式打亂順序來讀取字串,或讀取其他字符,都是沒有意義的。所以鍵盤就是典型的字元設備,它提供的就是使用者從鍵盤輸入的字元流。對鍵盤進行讀取操作會得到一個字元流,首先是“f”,然後是“o”,最後是“x”,最終是檔案的結束(EOF)。當沒人敲鍵盤時,字元流就是空的。硬碟設備的情況就不大一樣了。硬碟設備的驅動可能要求讀取磁碟上任意區塊的內容,然後又轉去讀取別的區塊的內容,而被讀取的區塊在磁碟上位置不一定要連續,所以說硬碟可以被隨機訪問,而不是以流的方式被訪問,顯然它是一個塊設備。
內核管理區塊裝置比管理字元裝置細緻得多,需要考慮的問題和完成的工作相比字元裝置來說要複雜許多。這是因為字元設備僅需要控制一個位置—目前位置—而區塊設備存取的位置必須能夠在媒體的不同區間前後移動。所以事實上核心不必提供一個專門的子系統來管理字元設備,但是對區塊設備的管理必須要有一個專門的提供服務的子系統。不只是因為塊設備的複雜性遠高於字元設備,更重要的原因是塊設備對執行性能的要求很高;對硬碟每多一分利用都會對整個系統的性能帶來提升,其效果要遠遠比鍵盤吞吐速度成倍的提高大得多。另外,我們將會看到,塊設備的複雜性將為這種優化留下很大的施展空間。
裸設備
簡單來講,塊設備可以隨機訪問,而字元設備不能隨機訪問,那裸設備又該如何解釋呢?
難道裸設備,如磁碟裸設備也不能隨機讀取嗎?那在資料庫中用裸設備建一個2g的資料文件,為了訪問最後一個資料塊,難道Oracle還要把前面的所有資料塊都讀一遍,顯然不符合事實,如果這樣解釋呢,作業系統不能隨機讀取,並不代表資料庫也不能隨機讀取。
區塊裝置透過系統快取進行讀取,不是直接和實體磁碟讀取。字元設備可以直接實體磁碟讀取,不經過系統快取。 (如鍵盤,直接對應中斷)
透過本文的介紹,我們了解到block設備和string設備在實作方式和使用方法上有很大的差異。簡而言之,block設備面向區塊式資料的輸入輸出,而string設備則是面向字元流類型的輸入輸出。同時在實際應用中,我們可以根據自己的需求選擇適合的設備類型,並使用對應命令進行建立、掛載、格式化等操作。總的來說,熟練block和string設備的使用方法,對於提升Linux系統的效能最佳化和管理水準有著重要的意義。
以上是Linux中block、string設備的區別及使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!