與io相關的操作,如上圖所示。
其中,分為兩種方式的讀寫:邏輯io和物理io。
邏輯io,是資料據訪問層向快取區讀寫資料的操作,請求資料,稱為邏輯讀;寫入資料,稱為邏輯寫。
物理io,是資料緩衝區向外存讀寫資料的操作,請求資料,稱為物理讀;寫入資料,稱為物理寫。
物理層的讀寫,是通過smgr介面進行的。呼叫序列如下:
readbufferàreadbuffer_commonàsmgrreadàmdread;
flushbufferàsmgrwriteàmdwrite
而閱讀md.c中的**,可以發現,物理讀寫操作,都是通過呼叫c的庫函式read和write等實現的(注意win32.h中,read和write實際是_read和_write)。
而read和write都是同步的方式進行讀寫的,所以,物理io有可能有改進的方式,改法是,在smgr層,實現非同步io[1]操作。然後在資料緩衝區層改造buf的管理方式,使之能適應非同步io(aio)。比如,加入預讀方式等。
linux的aio 在 2.5 版本的核心中首次出現,現在已經是 2.6 版本的產品核心的乙個標準特性了。
如果資料儲存層的物理io改寫為非同步io,還需要封裝一套遮蔽多作業系統的介面,供上層的資料緩衝區層呼叫,這裡不再展開。
[1] linux下非同步io
windows下非同步io
深入理解緩衝區(十七)
與io相關的操作,如上圖所示。其中,分為兩種方式的讀寫 邏輯io和物理io。邏輯io,是資料據訪問層向快取區讀寫資料的操作,請求資料,稱為邏輯讀 寫入資料,稱為邏輯寫。物理io,是資料緩衝區向外存讀寫資料的操作,請求資料,稱為物理讀 寫入資料,稱為物理寫。物理層的讀寫,是通過smgr介面進行的。呼叫...
深入理解緩衝區(九)
4.1.4.3 內外存位址是如何對映的 1 快取對應的內外存的對映關係 typedef struct buftag relfilenode rnode physical relation identifier 資料庫物件的位置標識,具體說明見下 forknumber forknum 可以檢視 rel...
深入理解緩衝區(二)
池,停水曰池。廣韻 所以,池,能蓄積物。引申後,池能蓄積執行緒,則稱之為執行緒池 池能蓄積程序則稱之為程序池。另外常見的還有資料庫連線池 iis6.0 中的位址池 記憶體池 1 等等。其中,記憶體池的概念,類似緩衝區。我這裡討論的,著重於 postgresql 資料庫系統的實現例項。cache 偏於...