字元裝置與塊裝置的區別
在LINUX裡面,裝置型別分為:字元裝置、塊裝置以及網路裝置, PCI是一種和ISA為一類的匯流排結構,歸屬於網路驅動裝置~~~
字元裝置、塊裝置主要區別是:在對字元裝置發出讀/寫請求時,實際的硬體I/O一般就緊接著發生了,而塊裝置則不然,它利用一塊系統記憶體作為緩衝區,當使用者程式對裝置請求能滿足使用者的要求時,就返回請求的資料,如果不能就呼叫請求函式來進行實際的I/O操作,因此,塊裝置主要是針對磁碟等慢速裝置設計的,以免消耗過多的CPU時間來等待~~~
系統中能夠隨機(不需要按順序)訪問固定大小資料片(chunks)的裝置被稱作塊裝置,這些資料片就稱作塊。最常見的塊裝置是硬碟,除此以外,還有軟盤驅動器、CD-ROM驅動器和快閃記憶體等等許多其他塊裝置。注意,它們都是以安裝檔案系統的方式使用的——這也是塊裝置的一般訪問方式。
另一種基本的裝置型別是字元裝置。字元裝置按照字元流的方式被有序訪問,像串列埠和鍵盤就都屬於字元裝置。如果一個硬體裝置是以字元流的方式被訪問的話,那就應該將它歸於字元裝置;反過來,如果一個裝置是隨機(無序的)訪問的,那麼它就屬於塊裝置。
這兩種型別的裝置的根本區別在於它們是否可以被隨機訪問——換句話說就是,能否在訪問裝置時隨意地從一個位置跳轉到另一個位置。舉個例子,鍵盤這種裝置提供的就是一個資料流,當你敲入"fox" 這個字串時,鍵盤驅動程式會按照和輸入完全相同的順序返回這個由三個字元組成的資料流。如果讓鍵盤驅動程式打亂順序來讀字串,或讀取其他字元,都是沒有意義的。所以鍵盤就是一種典型的字元裝置,它提供的就是使用者從鍵盤輸入的字元流。對鍵盤進行讀操作會得到一個字元流,首先是"f",然後是"o",最後是"x",最終是檔案的結束(EOF)。當沒人敲鍵盤時,字元流就是空的。硬碟裝置的情況就不大一樣了。硬碟裝置的驅動可能要求讀取磁碟上任意塊的內容,然後又轉去讀取別的塊的內容,而被讀取的塊在磁碟上位置不一定要連續,所以說硬碟可以被隨機訪問,而不是以流的方式被訪問,顯然它是一個塊裝置。
核心管理塊裝置要比管理字元裝置細緻得多,需要考慮的問題和完成的工作相比字元裝置來說要複雜許多。這是因為字元裝置僅僅需要控制一個位置—當前位置—而塊裝置訪問的位置必須能夠在介質的不同區間前後移動。所以事實上核心不必提供一個專門的子系統來管理字元裝置,但是對塊裝置的管理卻必須要有一個專門的提供服務的子系統。不僅僅是因為塊裝置的複雜性遠遠高於字元裝置,更重要的原因是塊裝置對執行效能的要求很高;對硬碟每多一分利用都會對整個系統的效能帶來提升,其效果要遠遠比鍵盤吞吐速度成倍的提高大得多。另外,我們將會看到,塊裝置的複雜性會為這種最佳化留下很大的施展空間。
簡單來講,塊裝置可以隨機存取,而字元裝置不能隨機存取,那裸裝置又該如何解釋呢?
難道裸裝置,如磁碟裸裝置也不能隨機讀取嗎?那在資料庫中用裸裝置建一個2g的資料檔案,為了存取最後一個資料塊,難道ORACLE還要把前面的所有資料塊都讀一遍,顯然不符合事實,如果這樣解釋呢,作業系統不能隨機讀取,並不意味著資料庫也不能隨機讀取。
塊裝置透過系統快取進行讀取,不是直接和物理磁碟讀取。字元裝置可以直接物理磁碟讀取,不經過系統快取。(如鍵盤,直接相應中斷)
字元裝置是裸裝置 透過檢視 ll /dev/vg00/ 下的內容 若開頭帶c字元的則為字元裝置
塊裝置是檔案裝置 透過檢視 ll /dev/vg00/ 下的內容 若開頭帶b字元的則為塊符裝置
在使用上,只要在對資料庫方面的應用需要考慮是選擇快裝置還是字元裝置。一般資料庫廠商會建議你建庫時使用裸裝置(字元裝置),空間管理完全由資料庫引擎進行管理,這樣所有資料和日誌直接寫盤,當發生系統故障時,系統安全性較強,不至於丟失資料。但還有一種說法是使用塊裝置便於管理維護人員的系統管理,因為使用裸裝置在第一次分配出去之後,這個裝置的空間就不能做任何其他用途了,但塊裝置則不然,你想使用多少空間就分配多少,你可以進行自由的擴充套件,而無需一次性的全部分配出去。所以我建議在建立資料庫master庫使用裸裝置,而業務資料庫及tempdb則使用塊裝置。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/223653/viewspace-1298570/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux-中塊裝置檔案和字元裝置檔案的本質區別Linux字元
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- LED字元裝置驅動字元
- 字元驅動裝置踩坑字元
- liunx驅動之字元裝置的註冊字元
- 裝置原理與操作
- 裝置分配與回收
- 10_註冊字元類裝置號字元
- 自動化裝置測試與自動化測試的區別
- 字元裝置驅動——申請、建立、應用.字元
- js判斷裝置型別JS型別
- PHP 獲取裝置型別PHP型別
- 裝置樹的引入與體驗
- Ockam為物聯網裝置帶來區塊鏈無伺服器身份識別區塊鏈伺服器
- 裝置地址
- 使用lsblk命令列出系統中的塊裝置命令列
- 實用的 IEC61850 裝置裝置模擬器
- ios裝置管理工具讓你的ios裝置與電腦互通更方便iOS
- 乾貨 | 裝置快速上雲,輕鬆搞定裝置與雲端通訊
- 無法識別usb裝置怎麼辦_win10無法識別usb裝置的解決方法Win10
- 滅火器充裝裝置
- 裝置製造商如何實現菸草裝置的遠端監控與高效運維運維
- 華為裝置OSPF單區域配置
- Windows核心程式設計:第10章 同步裝置IO與非同步裝置IOWindows程式設計非同步
- 海康Ehome2.0與5.0裝置接入EasyCVR影片匯聚平臺時的配置區別VR
- 裝置id openpolit
- 網路裝置
- 裝置適配
- Linux裝置樹的傳遞及Kernel中對裝置樹的分析Linux
- 如何透過裝置基站獲取裝置經緯度
- AIX中的裸裝置AI
- Linux中的主次裝置Linux
- linux核心原始碼閱讀-塊裝置驅動Linux原始碼
- Android與物聯網裝置通訊-利用UDP廣播來做裝置查詢AndroidUDP
- win10無法識別usb裝置怎麼辦_win10不能識別usb裝置的解決方法Win10
- 核心與裝置樹編譯與燒寫編譯
- 4G多卡聚合智慧融合通訊裝置與普通路由器的區別路由器
- 數字沙盤與電子沙盤在展示效果及裝置組成上的區別
- iMazing與iTunes 兩款iOS裝置管理器區別 在備份操作上的對比iOS