物理IO與邏輯IO

2021-09-02 13:48:21 字數 2493 閱讀 7639

io系統的分層:

三層結構

上圖層次比較多,但總的就是三部分。磁碟(儲存)、vm(卷管理)和檔案系統。專有名詞不好理解,打個比方說:磁碟就相當於一塊待用的空地;lvm相當於空地上的圍牆(把空地劃分成多個部分);檔案系統則相當於每塊空地上建的樓房(決定了有多少房間、房屋編號如何,能容納多少人住);而房子裡面住的人,則相當於系統裡面存的資料。

對應了上圖的file system和buffer cache。

file system(檔案系統):解決了空間管理的問題,即:資料如何存放、讀取。

buffer cache:解決資料緩衝的問題。對讀,進行cache,即:快取經常要用到的資料;對寫,進行buffer,緩衝一定資料以後,一次性進行寫入。

對應上圖的vol mgmt。

vm其實跟io沒有必然聯絡。他是處於檔案系統和磁碟(儲存)中間的一層。vm遮蔽了底層磁碟對上層檔案系統的影響。當沒有vm的時候,檔案系統直接使用儲存上的位址空間,因此檔案系統直接受限於物理硬碟,這時如果發生磁碟空間不足的情況,對應用而言將是一場噩夢,不得不新增硬碟,然後重新進行資料複製。而vm則可以實現動態擴充套件,而對檔案系統沒有影響。另外,vm也可以把多個磁碟合併成乙個磁碟,對檔案系統呈現統一的位址空間,這個特性的殺傷力不言而喻。

對應上圖的device driver、io channel和disk device

資料最終會放在這裡,因此,效率、資料安全、容災是這裡需要考慮的問題。而提高儲存的效能,則可以直接提高物理io的效能

2. logical io vs physical io

邏輯io是作業系統發起的io,這個資料可能會放在磁碟上,也可能會放在記憶體(檔案系統的cache)裡。

物理io是裝置驅動發起的io,這個資料最終會落在磁碟上。

邏輯io和物理io不是一一對應的。

這部分的東西在網路程式設計經常能看到,不過在所有io處理中都是類似的。

io請求的兩個階段

等待資源階段:io請求一般需要請求特殊的資源(如磁碟、ram、檔案),當資源被上乙個使用者使用沒有被釋放時,io請求就會被阻塞,直到能夠使用這個資源。

使用資源階段:真正進行資料接收和發生。

舉例說就是排隊服務。

等待資料階段,io分為阻塞io和非阻塞io。

阻塞io:資源不可用時,io請求一直阻塞,直到反饋結果(有資料或超時)。

非阻塞io:資源不可用時,io請求離開返回,返回資料標識資源不可用

使用資源階段,io分為同步io和非同步io。

同步io:應用阻塞在傳送或接收資料的狀態,直到資料成功傳輸或返回失敗。

非同步io:應用傳送或接收資料後立刻返回,資料寫入os快取,由os完成資料傳送或接收,並返回成功或失敗的資訊給應用。

按照unix的5個io模型劃分

從效能上看,非同步io的效能無疑是最好的。

各種io的特點

oracle:

logical and physical i/o

logical i/o 是oracle 核心從database buffer cache 取得資料。如果核心不能從cache中得到資料它將請求作業系統取得資料。

physical i/o 是oracle 核心從作業系統取得資料,因為不能從database buffer cache中取得資料了。

請注意物理i/o不一定就是磁碟讀取,因為作業系統內部也有buffer cache,但是從oarcle觀點來看,這些讀取都是物理i/o 

其實實際上我們應該減少的是邏輯i/o而不是物理i/o 

1. 邏輯i/o需要latches 或者序列化裝置,這些東西嚴重的影響了系統的擴充套件性

2. 如果減少了邏輯i/o,物理i/o就會自然的執行因為邏輯i/o如果不能成功的話,那麼物理i/o就會起作用

3. 物理i/o並不像想象的那麼花費時間,因為大多數的情況下,作業系統的cache都能夠滿足要求。 

邏輯i/o有下面兩個部分組成

1. consistent gets

2. db block 或者current gets

磁碟IO 快取IO與直接IO

檔案系統io分為directio和bufferio,其中bufferio也叫normal io。快取i o又被稱作標準i o,大多數檔案系統的預設i o操作都是快取i o。在linux的快取i o機制中,資料先從磁碟複製到核心空間的緩衝區,然後從核心空間緩衝區複製到應用程式的位址空間。讀操作 作業系...

同步IO與非同步IO

非同步檔案io也就是重疊io。在同步檔案io中,執行緒啟動乙個io操作然後就立即進入等待狀態,直到io操作完成後才醒來繼續執行。而非同步檔案io方式中,執行緒傳送乙個io請求到核心,然後繼續處理其他的事情,核心完成io請求後,將會通知執行緒io操作完成了。同步io在同一時刻只允許乙個io操作,也就是...

系統IO與標準IO

第十章的學習中,我們學習了open,close,read,lseek,statu函式以及理解了共享檔案的定義,下面通過對一些例子的分析來進一步了解第十章學習的內容。例1 ffiles1.c int main int argc,char ar 該例的執行結果為 分析 在該例中,首先開啟了同乙個檔案3次...