linux下的IO模型 學習筆記

2022-06-10 04:12:11 字數 1556 閱讀 9484

1、linux檔案系統和快取

檔案系統介面

檔案系統—一種把資料組織成檔案和目錄的儲存方式,提供了基於檔案的訪問介面,並通過檔案許可權控制訪問。

儲存層次

檔案系統快取

主存(通常時dram)的一塊區域,用來快取檔案系統的內容,包含各種資料和元資料。

2、深入linux檔案io機制

標準檔案訪問方式

標準檔案io流程圖

直接io

實現方式

open + o_direct = 繞過核心緩衝區的直接訪問,便有效避免了cpu和記憶體的多餘時間開銷。

直接繞過io繞過快取,不會出現write成功資料丟失的情況,血案不再重演。

注意:直接io的缺點就是如果訪問的資料不在應用程式快取中,那麼每次資料都會直接從磁碟進行載入,這種直接載入會非常緩慢!

通常直接io跟非同步io結合使用會得到較好的效能。

快取同步

為了保證磁碟系統與緩衝區中內容一致,linux系統提供了sync、fsync和fdatasync三個函式。

函式描述:向開啟的檔案寫資料;成功返回寫入的位元組數,若出錯,返回-1。

標頭檔案:

#include

int fsync(int fd);

int fdatasync(int fd);

void sync(void);

說明:sync ---將所有修改過的塊緩衝區排入寫佇列,然後就返回,它並不等待實際寫磁碟操作結束。

fsync --- 將fd對應的檔案的塊緩衝區立即寫入磁碟,並等待實際寫磁碟操作結束返回。

fdatasync --- 類似fsybc,但只影響檔案的資料部分。除資料外,fsync還會同步更新檔案屬性。

解決之道

更深一層次的思考

1、如何設計io讀寫的尺度,提高io的效率

2、如何理解隨機io和順序io

3、高併發如何提高io的效率和併發處理能力。

linux下的io模型

linux開發必備:io多路復用剖析

linux開發必備:1小時玩轉兒檔案i/o程式設計

單鏈表linux系統訊號

linux下的io模型

因為作業系統的資源是有限的,如果訪問資源的操作過多,必然會消耗過多的資源,而且如果不對這些操作加以區分,很可能造成資源訪問的衝突。所以,為了減少有限資源的訪問和使用衝突,unix linux的設計哲學之一就是 對不同的操作賦予不同的執行等級,就是所謂特權的概念。簡單說就是有多大能力做多大的事,與系統...

linux下的IO模型詳解

開門見山,linux下的如中io模型 阻塞io模型,非阻塞io模型,io復用模型,訊號驅動io模型,非同步io模型,見下圖 接下來一一講解這5種模型 阻塞型io 最簡單的一種io模型,簡單理解就是死等,即程序或執行緒一直等待莫格條件,不滿足則一直等待。非阻塞型io 應用程序與核心互動,目的未達到之前...

linux下的IO模型詳解

開門見山,linux下的如中io模型 阻塞io模型,非阻塞io模型,io復用模型,訊號驅動io模型,非同步io模型,見下圖 接下來一一講解這5種模型 阻塞型io 最簡單的一種io模型,簡單理解就是死等,即程序或執行緒一直等待莫格條件,不滿足則一直等待。非阻塞型io 應用程序與核心互動,目的未達到之前...