深入理解緩衝區(六)

2021-05-28 13:04:23 字數 805 閱讀 2401

4.1.3.2           從buf分配看buf的使用

bufferalloc函式,當有buf可以被分配時,從緩衝區拿出「空閒」(有個freelist結構)的快取塊進行分配,如果緩衝區已經滿,則根據快取淘汰演算法,對快取中的被選中的髒頁進行刷出,然後分配給提出需求者。

bufferalloc被呼叫關係

bufferalloc

readbuffer_common

readbufferextended

readbufferwithoutrelcache

bufferalloc**分析:

1.         變數定義區,檢視「volatile bufferdesc *buf;」的使用之處,可以更好把握buf的分配情況

2.         「buf_id = buftablelookup(&newtag, newhash);」,呼叫buftablelookup函式確定要求的塊是否在緩衝區中?

3.         接第二步,如果找到這樣的快取塊,則作為bufferalloc函式的返回值返回找到的快取塊

4.         接第二步,如果沒有找到,反覆迴圈,淘汰一些緩衝塊出緩衝區(通過對strategygetbuffer函式的呼叫、對得到的buf判斷是否是dirty,如果是,則淘汰。注意strategygetbuffer函式中,對於緩衝區淘汰策略的使用方式,如何淘汰,取決於淘汰演算法------仔細看strategygetbuffer函式的實現),直到找到乙個可以分配的快取塊

5.         接第四步,為找到的快取塊,賦予恰當的值

深入理解緩衝區(九)

4.1.4.3 內外存位址是如何對映的 1 快取對應的內外存的對映關係 typedef struct buftag relfilenode rnode physical relation identifier 資料庫物件的位置標識,具體說明見下 forknumber forknum 可以檢視 rel...

深入理解緩衝區(二)

池,停水曰池。廣韻 所以,池,能蓄積物。引申後,池能蓄積執行緒,則稱之為執行緒池 池能蓄積程序則稱之為程序池。另外常見的還有資料庫連線池 iis6.0 中的位址池 記憶體池 1 等等。其中,記憶體池的概念,類似緩衝區。我這裡討論的,著重於 postgresql 資料庫系統的實現例項。cache 偏於...

深入理解緩衝區(三)

3 快取的作用和常見場景 3.1 快取的作用 快取,可以把常用的一些 物件 暫且稱為物件 蓄積起來,供使用,這樣,將減少被快取物件的生成 銷毀等時間,如果物件被反覆使用,且其生成 銷毀需要花費時間,則快取這樣物件對於時間的節省可能很有效。快取元件提供retrieve add remove等功能。過期...