轉 字符設備驅動與塊設備驅動的區別

原文章地址:http://blog.csdn.net/pzhsunxu/article/details/6998310 數據庫

系統中可以隨機(不須要按順序)訪問固定大小數據片(chunks)的設備被稱做塊設備,這些數據片就稱做塊。最多見的塊設備是硬盤,除此之外,還有軟盤驅動器、CD-ROM驅動器和閃存等等許多其餘塊設備。注意,它們都是以安裝文件系統的方式使用的——這也是塊設備的通常訪問方式。 緩存

另外一種基本的設備類型是字符設備。字符設備按照字符流的方式被有序訪問,像串口和鍵盤就都屬於字符設備。若是一個硬件設備是以字符流的方式被訪問的話,那就應該將它歸於字符設備;反過來,若是一個設備是隨機(無序的)訪問的,那麼它就屬於塊設備。 性能

這兩種類型的設備的根本區別在於它們是否能夠被隨機訪問——換句話說就是,可否在訪問設備時隨意地從一個位置跳轉到另外一個位置。舉個例子,鍵盤這種設備提供的就是一個數據流,當你敲入「fox」 這個字符串時,鍵盤驅動程序會按照和輸入徹底相同的順序返回這個由三個字符組成的數據流。若是讓鍵盤驅動程序打亂順序來讀字符串,或讀取其餘字符,都是沒有意義的。因此鍵盤就是一種典型的字符設備,它提供的就是用戶從鍵盤輸入的字符流。對鍵盤進行讀操做會獲得一個字符流,首先是「f」,而後是「o」,最後是「x」,最終是文件的結束(EOF)。當沒人敲鍵盤時,字符流就是空的。硬盤設備的狀況就不大同樣了。硬盤設備的驅動可能要求讀取磁盤上任意塊的內容,而後又轉去讀取別的塊的內容,而被讀取的塊在磁盤上位置不必定要連續,因此說硬盤能夠被隨機訪問,而不是以流的方式被訪問,顯然它是一個塊設備。 優化

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

簡單來說,塊設備能夠隨機存取,而字符設備不能隨機存取,那裸設備又該如何解釋呢? .net

難道裸設備,如磁盤裸設備也不能隨機讀取嗎?那在數據庫中用裸設備建一個2g的數據文件,爲了存取最後一個數據塊,難道ORACLE還要把前面的全部數據塊都讀一遍,顯然不符合事實,若是這樣解釋呢,操做系統不能隨機讀取,並不意味着數據庫也不能隨機讀取。 blog

塊設備經過系統緩存進行讀取,不是直接和物理磁盤讀取。字符設備能夠直接物理讀取。(如鍵盤,直接相應中斷)字符串

相關文章
相關標籤/搜索