1. 程式人生 > >裸裝置、字元裝置、塊裝置不全面比較

裸裝置、字元裝置、塊裝置不全面比較

A.為什麼Oracle要使用裸裝置呢
裸裝置,也叫裸分割槽(原始分割槽),是一種沒有經過格式化,不被Unix通過檔案系統來讀取的特殊字元裝置。本文收集裸裝置和Oracle問答20例。 

  1.什麼叫做裸裝置?

  裸設備,也叫裸分割槽(原始分割槽),是一種沒有經過格式化,不被Unix通過檔案系統來讀取的特殊字元裝置。它由應用程式負責對它進行讀寫操作。不經過檔案系統的緩衝。

  2.如何辨別裸裝置?

  在Unix的/dev 目錄下,有許多檔案,其中有兩個大類:字元裝置檔案和塊裝置檔案。

  字元裝置特殊檔案進行I/O操作不經過作業系統的緩衝區,而塊裝置特殊檔案用來同外設進行定長的包傳輸。字元特殊檔案與外設進行I/o操作時每次只傳輸一個字元。而對於塊裝置特殊檔案來說,它用了cache機制,在外設和記憶體之間一次可以傳送一整塊資料。裸裝置使用字元特殊檔案。在/dev 目錄下,你可以看到許多這樣的檔案。 


  3.使用裸裝置的好處

  因為使用裸裝置避免了再經過Unix作業系統這一層,資料直接從Disk到Oracle進行傳輸,所以使用裸裝置對於讀寫頻繁的資料庫應用來說,可以極大地提高資料庫系統的效能。當然,這是以磁碟的I/O 非常大,磁碟I/O已經稱為系統瓶頸的情況下才成立。如果磁碟讀寫確實非常頻繁,以至於磁碟讀寫成為系統瓶頸的情況成立,那麼採用裸裝置確實可以大大提高效能,最大甚至可以提高至40%,非常明顯。

  而且,由於使用的是原始分割槽,沒有采用檔案系統的管理方式,對於Unix維護檔案系統的開銷也都沒有了,比如不用再維護I-node,空閒塊等,這也能夠導致效能的提高。

B.為什麼Oracle在使用裸裝置的時候需要在前面加個r(這個問題俺想了很久理解如下,請各位大大也來講講)

每個物理磁碟都有兩個相關的裝置檔案,其中一個為原始裝置檔案(也叫字元裝置檔案),另一個叫塊裝置檔案,這些裝置檔案都是用於磁碟的I/O動作的。既然這兩種裝置檔案都是用於磁碟的I/O動作的,為什麼Oracle在使用裸裝置的時候為什麼要用裝置裝置檔案呢,我想這個原因可能要從作業系統的原理和核心入手。由於沒有HP-Unix有關核心的資料,看了看有關Linux核心的東東,有一點點理解,不過理解不深。


作業系統核心需要訪問兩類主要裝置,簡單的字元裝置,如印表機,鍵盤等;塊裝置,如軟盤、硬碟等。與此對應,有兩類裝置驅動程式。分別稱為字元裝置驅動程式和塊裝置驅動程式。兩者的主要差異是:與字元裝置有關的系統呼叫幾乎直接和驅動程式的內部功能結合在一起。而讀寫塊裝置則主要和快速緩衝儲存區打交道。只有需要完成實際的輸入/輸出時,才用到塊裝置驅動程式。



Linux裝置驅動程式的主要功能有:

  對裝置進行初始化;
  使裝置投入執行和退出服務;
  從裝置接收資料並將它們送到核心;
  將資料從核心送到裝置;
  檢測和處理裝置出現的錯誤。
當引導系統時,核心呼叫每一個驅動程式的初始化函式。它的任務之一是將這一裝置驅動程式使用的主裝置號通知核心。同時,初始化函式還將驅動程式中的函式地址結構的指標送給核心。
核心中有兩張表。一張表用於字元裝置驅動程式,另一張用於塊裝置驅動程式。這兩張表用來儲存指向file_operations結構的指標,裝置驅動程式內部的函式地址就儲存在這一結構中。核心用主裝置號作為索引訪問file_operations結構,因而能訪問驅動程式內的子程式。


從上面有關作業系統對兩種裝置檔案的描述來看,“兩者的主要差異是:與字元裝置有關的系統呼叫幾乎直接和驅動程式的內部功能結合在一起。而讀寫塊裝置則主要和快速緩衝儲存區打交道。只有需要完成實際的輸入/輸出時,才用到塊裝置驅動程式。”從這裡可以看出字元裝置進行I/O操作是不經過作業系統的緩衝區的,而塊裝置檔案是需要經過作業系統的緩衝區(快速緩衝儲存區),因為Oracle有自已的緩衝儲存區如果使用了塊裝置那就是要通過作業系統這一層,必然也會降低作業系統的效能,使用字元裝置不通過作業系統這一層,資料直接從Disk到Oracle進行I/O操作,會提高Oracle資料庫的效能

綜上所述採用字元裝置是為了提高資料庫的效能

相關推薦

裝置字元裝置裝置全面比較

A.為什麼Oracle要使用裸裝置呢裸裝置,也叫裸分割槽(原始分割槽),是一種沒有經過格式化,不被Unix通過檔案系統來讀取的特殊字元裝置。本文收集裸裝置和Oracle問答20例。   1.什麼叫做裸裝置?  裸設備,也叫裸分割槽(原始分割槽),是一種沒有經過格式化,不被U

linux驅動由淺入深系列:裝置驅動之三(裝置驅動結構分析,以mmc為例)

linux驅動由淺入深系列:塊裝置驅動之一(高通eMMC分割槽例項)前一篇文章介紹了塊裝置驅動在linux框架張的位置關係,本文來分析一下驅動本身。塊裝置驅動的模型還是基本基於字元裝置驅動的,可以簡單理解為塊裝置僅僅增加了操作緩衝區,對使用者操作請求進行佇列重排。因此只在有了

Linux裝置驅動(一)————裝置的結構及磁碟的結構

塊裝置的結構及磁碟的結構 1、扇區 磁碟上的每個磁軌被等分成若干個弧段,這些弧段便是磁碟的扇區。磁碟驅動器在向磁碟讀寫資料時,都是以扇區為單位。一般為512個位元組,但也有1024或者

第二篇 Python資料型別字元編碼檔案處理

一、引子     1、什麼是資料?         x=10,10是我們要儲存的資料     2、為何資料要分不同的型別    

第一模組-:(第2章)資料型別字元編碼檔案操作

1、漢字點陣碼是一種用黑白兩色點陣來表示漢字字形的編碼。一個8*8點陣字模的儲存容量為? 1、1位元組(Byte)有8位元(Bit) 2、黑白兩色每個點佔用1Bit 3、8×8點陣需要64個Bit 4、因為1Byte有8Bit,所以64Bit/8Bit/Byte = 8Byte 答案是B:8位

[轉]Java中的Switch對整型字元字串型的具體實現細節

轉自http://www.hollischuang.com/archives/61 Java 7中,switch的引數可以是String型別了,這對我們來說是一個很方便的改進。到目前為止switch支援這樣幾種資料型別:byte short int char String 。但是,作為一

python開發基礎之資料型別字元編碼檔案操作

一、知識點 1.身份運算: 2.現在計算機系統通用的字元編碼工作方式:在計算機記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。用記事本編輯的時候,從檔案讀取的UTF-8字元被轉換為Unicode字元到記憶體裡,編輯完成後,儲存的時候再把Unicode轉

字元字串字元陣列字串指標變數

字元和字串的區別 字元 如下,定義char,每一個字元一般情況下佔用8個位元組。 char c, ch; 字串 例如"helloworld"; 注意' '和" "的區別,後者為常量字串 在C++中,有兩種型別的字串表示形式: C-風格字

移動端車牌識別技術是怎麼解決車牌定位字元分割字元識別的?

移動端車牌識別技術是指通過計算機視覺、影象處理與模式識別等方法從車輛影象中提取車牌字元資訊,從而確定車輛身份的技術。移動端車牌識別技術分為車牌定位、字元分割、字元識別三大部分。 1牌照區域定位 牌照圖象經過了以上的處理後,牌照區域已經十分明顯,而且其邊緣得到了

python學習筆記之資料型別字元編碼檔案處理

    1、資料型別   1、數字(int,float)     整形(int):定義 age=20  #本質age=int(20)     浮點型別:salary=3000.3 #本質salary=float(3000.3)     還有不常用的長整型、複數。   2、字串

黑馬程式設計師——Java IO流(一)之IO流概述字元位元組流等

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ IO流 一、概述 1.IO流是用來處理裝置之間的資料傳輸。  2.Java對資料的操作時通過流的方式。  3.Java用於操作流的物件都在IO包中。  

js實現常見的幾種演算法(陣列去重字元統計二分查詢等)

1、陣列去重:利用物件屬性進行篩選 function filter(arr){ let obj={}; let newArr=[]; for (let i=0;i<arr.

字串字元陣列list之間相互轉化

1.關於java.lang.string.split xxx.split()方法可以將一個字串分割為子字串,然後將結果作為字串陣列返回。 2.字串轉字元陣列 String str ="

Python模組字元編碼檔案讀寫

模組 當我們用一種語言開始真正的軟體開發室,除了編寫程式碼外,還需要很多基本的已經寫好的現成的東西,高階語言通常都會為我們提供了一個比較完善的基礎程式碼庫,讓我們能直接呼叫,python也不例外,為我們提供了分成完善的基礎程式碼和第三方庫。在python中一個.py檔案就是一個模組。 模組匯

Java 字元字元位元組流

字元編碼表 Ascii: 0-xxxxxxx正數 iso-8859-1: 拉丁碼錶1-xxxxxxx  負數。 GB2312: 簡體中文碼錶 GBK: 最常用的中文碼錶 String字串預設 GB18030: 最新的中文碼錶   unicode: 國際標準碼錶 char字元預

資料型別字元編碼檔案處理

一 引子 1 什麼是資料?   x=10,10是我們要儲存的資料 2 為何資料要分不同的型別   資料是用來表示狀態的,不同的狀態就應該用不同的型別的資料去表示 3 資料型別   數字(整形,長整形,浮點型,複數)   字串   位元組串:在介紹字元編碼時介紹位元組bytes型別   列表

Java基礎之IO流(位元組流字元記憶體流帶快取的流序列化和反序列化)

File類:File類提供了對檔案的操作,可以通過字串或URI來構建一個File類物件。通過物件,可以實現檔案的建立(createNewFile)、刪除(delete)、獲得檔名(getName)、獲得父目錄物件(getParentFile)、獲得父目錄名稱(

獲取字串長度字元長度位元組長度

度量快速開發平臺中基礎函式中有一個  len  的獲取字元長度函式。具體用法是:len ("123Abc字串") 這個方法得到的結果是:9     即一共有多少個字元,沒有區分單位元組與雙位元組的情況。如果某一個欄位設定的長度為9,那剛才這個字串儲存到資料庫的時候,會提示字

C++ 檔案流字串流字元陣列字串

在開講之前,先給大家看下面這段C++程式碼。 // definition of function read_file // // return the file's data in string string read_file( string file_name = "t

位元組流字元asciigb2312gbkgb18030亂碼什麼時候使用位元組流,什麼時候使用字元流,二者區別。分分鐘透徹理解。

早先在 Java IO包裡面出現的都是位元組流,因為資料,無論是硬碟上的還是記憶體中的,都是位元組,都是二進位制資料10101的方式進行傳輸或儲存的。那麼為什麼後來又出現了個字元流的概念呢? 在我們處理資料的時候,資料的種類有很多,比如dvd,圖片,文字,mp3等對於dvd