磁碟io的幾種訪問方式如下:
快取io
快取i/o又被稱作標準i/o,大多數檔案系統的預設i/o操作都是快取i/o。在linux的快取i/o機制中,資料先從磁碟複製到核心空間的緩衝區,然後從核心空間緩衝區複製到應用程式的位址空間。
讀操作:作業系統檢查核心的緩衝區有沒有需要的資料,如果已經快取了,那麼就直接從快取中返回;否則從磁碟中讀取,然後快取在作業系統的快取中。
寫操作:將資料從使用者空間複製到核心空間的快取中。這時對使用者程式來說寫操作就已經完成,至於什麼時候再寫到磁碟中由作業系統決定,除非顯示地呼叫了sync同步命令。
快取i/o的優點:1)在一定程度上分離了核心空間和使用者空間,保護系統本身的執行安全;2)可以減少讀盤的次數,從而提高效能。
快取i/o的缺點:資料在傳輸過程中需要在應用程式位址空間和快取之間進行多次資料拷貝操作,這些資料拷貝操作所帶來的cpu以及記憶體開銷是非常大的。
圖 1. 以標準的方式對檔案進行讀寫
直接io
直接io就是應用程式直接訪問磁碟資料,而不經過核心緩衝區,這樣做的目的是減少一次從核心緩衝區到使用者程式快取的資料複製。比如說資料庫管理系統這類應用,它們更傾向於選擇它們自己的快取機制,因為資料庫管理系統往往比作業系統更了解資料庫中存放的資料,資料庫管理系統可以提供一種更加有效的快取機制來提高資料庫中資料的訪問效能。
直接io的缺點:如果訪問的資料不在應用程式快取中,那麼每次資料都會直接從磁碟載入,這種直接載入會非常快取。通常直接io與非同步io結合使用,會得到比較好的效能。(非同步io:當訪問資料的執行緒發出請求之後,執行緒會接著去處理其他事,而不是阻塞等待)
圖2. 資料傳輸不經過作業系統核心緩衝區
記憶體對映
記憶體對映是指將硬碟上檔案的位置與程序邏輯位址空間中一塊大小相同的區域一一對應,當要訪問記憶體中一段資料時,轉換為訪問檔案的某一段資料。這種方式的目的同樣是減少資料在使用者空間和核心空間之間的拷貝操作。當大量資料需要傳輸的時候,採用記憶體對映方式去訪問檔案會獲得比較好的效率。
使用記憶體對映檔案處理儲存於磁碟上的檔案時,將不必再對檔案執行i/o操作,這意味著在對檔案進行處理時將不必再為檔案申請並分配快取,所有的檔案快取操作均由系統直接管理,由於取消了將檔案資料載入到記憶體、資料從記憶體到檔案的回寫以及釋放記憶體塊等步驟,使得記憶體對映檔案在處理大資料量的檔案時能起到相當重要的作用。
圖 3. 記憶體對映方式訪問
磁碟IO 快取IO與直接IO
檔案系統io分為directio和bufferio,其中bufferio也叫normal io。快取i o又被稱作標準i o,大多數檔案系統的預設i o操作都是快取i o。在linux的快取i o機制中,資料先從磁碟複製到核心空間的緩衝區,然後從核心空間緩衝區複製到應用程式的位址空間。讀操作 作業系...
快取IO和直接IO
快取io 資料從磁碟先通過dma copy到核心空間,再從核心空間通過cpu copy到使用者空間 直接io 資料從磁碟通過dma copy到使用者空間 快取io又被稱為標準io,大多數檔案系統的預設io操作都是快取io 在linux的快取io機制中嗎,資料先從磁碟複製到核心空間的緩衝區,然後從核心...
linux 高階IO 磁碟對映IO
儲存對映io 說明 在程序的棧中開闢一塊緩衝區將之與磁碟檔案相對應,對緩衝區的更改將自動寫入磁碟檔案,這樣就可以不在使用read和write的情況下執行io mmap函式 void mmap void addr,size t len,int prot,int flag,int filedes,off...