設備文件分爲Block Device Driver和Character Device Drive兩類。Character Device Drive又被稱爲字符設備或裸設備raw devices; Block Device Driver一般成爲塊設備。而Block Device Driver是以固定大小長度來傳送轉移資料 ;Character Device Driver是以不定長度的字元傳送資料 。且所鏈接的Devices也有所不一樣,Block Device大體是能夠隨機存取(Random Access)資料的設備,如硬碟機或光碟機;而Character Device恰好相反,依循先後順序存取資料的設備,如印表機 、終端機等皆是。html
/dev/dsk對應的爲塊設備,文件系統的操做用到它,如mount。/dev/rdsk對應的爲字符設備(裸設備,rdsk的r即爲 raw),fsck newfs等會涉及到。通常咱們的操做系統和各類軟件都是以塊方式讀寫硬盤,這裏的塊是邏輯塊,建立文件系統時能夠選擇,windows裏叫簇。可看 newfs or mkfs的manual。oracle是比較常見的字符方式讀寫硬盤。linux
字符設備仍是塊設備的定義屬於操做系統的設備訪問層,與實際物理設備的特性無必然聯繫。設備訪問層下面是驅動程序,因此只要驅動程序提供的方式,均可以。 也就是說驅動程序支持stream方式,那麼就能夠用這種方式訪問,驅動程序若是還支持block方式,那麼你想用哪一種方式訪問均可以,典型的好比硬盤式 的裸設備,兩種都支持塊設備(block device):是一種具備必定結構的隨機存取設備,對這種設備的讀寫是按塊進行的,他使用緩衝區來存放暫時的數據,待條件成熟後,從緩存一次性寫入設備 或從設備中一次性讀出放入到緩衝區,如磁盤和文件系統等字符設備(Character device):這是一個順序的數據流設備,對這種設備的讀寫是按字符進行的,並且這些字符是連續地造成一個數據流。他不具有緩衝區,因此對這種設備的讀 寫是實時的,如終端、磁帶機等。windows
系 統中可以隨機(不須要按順序)訪問固定大小數據片(chunks)的設備被稱做塊設備,這些數據片就稱做塊。最多見的塊設備是硬盤,除此之外,還有軟盤驅 動器、CD-ROM驅動器和閃存等等許多其餘塊設備。注意,它們都是以安裝文件系統的方式使用的——這也是塊設備通常的訪問方式。緩存
另外一種基本的設備類型是字符設備。字符設備按照字符流的方式被有序訪問,像串口和鍵盤就都屬於字符設備。若是一個硬件設備是以字符流的方式被訪問的話,那就應該將它歸於字符設備;反過來,若是一個設備是隨機(無序的)訪問的,那麼它就屬於塊設備。oracle
這 兩種類型的設備的根本區別在於它們是否能夠被隨機訪問——換句話說就是,可否在訪問設備時隨意地從一個位置跳轉到另外一個位置。舉個例子,鍵盤這種設備提供 的就是一個數據流,當你敲入「fox」這個字符串時,鍵盤驅動程序會按照和輸入徹底相同的順序返回這個由三個字符組成的數據流。若是讓鍵盤驅動程序打亂順 序來讀字符串,或讀取其餘字符,都是沒有意義的。因此鍵盤就是一種典型的字符設備,它提供的就是用戶從鍵盤輸入的字符流。對鍵盤進行讀操做會獲得一個字符 流,首先是「f」,而後是「o」,最後是「x」,最終是文件的結束(EOF)。當沒人敲鍵盤時,字符流就是空的。硬盤設備的狀況就不大同樣了。硬盤設備的 驅動可能要求讀取磁盤上任意塊的內容,而後又轉去讀取別的塊的內容,而被讀取的塊在磁盤上位置不必定要連續,因此說硬盤能夠被隨機訪問,而不是以流的方式 被訪問,顯然它是一個塊設備。dom
內核管理塊設備要比管理字符設備細緻得多,須要考慮的問題和完成的工做相比字符設備來講要複雜許多。這是由於字符設備僅僅須要控制一個位置—當前位置—而 塊設備訪問的位置必須可以在介質的不一樣區間先後移動。因此事實上內核沒必要提供一個專門的子系統來管理字符設備,可是對塊設備的管理卻必需要有一個專門的提 供服務的子系統。不只僅是由於塊設備的複雜性遠遠高於字符設備,更重要的緣由是塊設備對執行性能的要求很高;對硬盤每多一分利用都會對整個系統的性能帶來 提高,其效果要遠遠比鍵盤吞吐速度成倍的提升大得多。另外,咱們將會看到,塊設備的複雜性會爲這種優化留下很大的施展空間。ide
1.字符設備只能以字節爲最小單位訪問,而塊設備以塊爲單位訪問,例如512字節,1024字節等性能
2.塊設備能夠隨機訪問,可是字符設備不能夠優化
3.字符和塊沒有訪問量大小的限制,塊也能夠以字節爲單位來訪問spa