第16章 頁快取記憶體和頁回寫

2021-09-26 09:10:48 字數 1738 閱讀 1228

磁碟訪問ms級別,記憶體訪問ns級別,使用資料務必將資料拷貝到記憶體中,這裡是將一些磁碟資料對映到記憶體中提高命中率。

對應於磁碟的物理塊(對映關係),可以占用空閒記憶體擴張,也可以收縮(換出)。read操作(讀取一段資料,首先在快取中查詢,沒有的話才呼叫i/o去安排,讀取就直接讀取到快取中,一段時間沒有人用就可能被換出)。

寫操作:linux中是回寫操作,寫操作直接安排快取資料,並將該頁標誌為臟。按照一定規則由回寫程序周期性地將髒頁回寫於硬碟(統一i/o比斷斷續續呼叫i/o效率高)。

快取**:只能**乾淨頁面,如果沒有足夠的,就會強制呼叫回寫頁面操作來產生消除髒頁。問題在於**什麼頁(未來最不可能用到的頁),這種**策略很重要。

lru:最近最少使用,建立按照訪問時間為序的lru頁鍊錶,**從該鍊錶的頭部開始。不適用於許多檔案被訪問一次便不再訪問的情況(因為這些檔案的頁面將會有很長時間才能夠移動到頁頭部位置,導致占用空間)。

雙鏈策略:維護活躍鍊錶和非活躍鍊錶,系統需要保證兩個鍊錶的大小平衡,非活躍鍊錶將會作為移出的集合,這樣只能訪問一次的頁面將會更快地移到非活躍鍊錶中,所以這種方法能夠解決lru的缺點。當然也可以安排n個鍊錶,作為活躍優先順序分,進一步地提高效率。

意義:系統載入以及編譯過程,需要開啟相當大的檔案,盡可能地減少i/o 操作可以提高效率。

linux頁快取記憶體:來自對正規檔案,塊裝置檔案和記憶體對映檔案的讀寫。

address_space物件表示實際的實體地址,對等於vm_area_struct結構體(虛擬位址),乙個(一些)被快取的檔案只和乙個address_space結構體關聯,但它可以對映多個vm_area_struct,也就是說address_space和vm也是一對多的關係。

struct address_space{  //可以看出這是以個檔案集,包含了這個檔案集所有的頁的情況

i_mmap;   //優先搜尋樹,所有共享的與私有的對映頁面,用以高效地找到關聯的被快取檔案。

nrpages;   //頁總數

struct inode host;     //擁有節點(檔案個數)

struct radix_tree_root page_tree;     //每個address_space維護乙個基樹,亦包含本域中全部頁面的radix樹,這個樹的學習暫時保留,特徵:給1檔案偏移值可以快速地查詢到頁。

操作:address_space_operations操作函式指標集,每個後備儲存(即硬碟等儲存實體),需要自己寫適配自己的該操作表。

讀寫操作readpage()和writepage()最為重要;

讀頁面步驟:find_get_page(address_space物件,偏移量 )檢查頁緩衝是否有->沒有找到就申請乙個新頁面(再通過i/o將資料讀到這個頁面裡面)。

寫頁面步驟:與讀大致相同,只是直接在記憶體中寫,按照一定策略回寫到硬碟。

寫的執行緒:(觸發寫操作情況:1.空閒記憶體低於某乙個閾值    2.髒頁駐留時間過長,需要週期性同步    3.顯式地呼叫回寫(sync()和fsync()系統呼叫));

flusher執行緒:擁有一群執行緒,或於低於閾值時按緊張程度喚醒一批,或週期性(需設定週期性引數)喚醒寫回。

膝上型(低功耗要求):在電池供電模式時,flusher執行緒採取機制(找準時機,比如在當前執行寫盤操作的時候,就順手把髒頁安排了),設計思想就是盡可能地減少呼叫磁碟以節約電。

16 頁快取記憶體和頁回寫

頁快取記憶體有什麼作用?主要實現linux的磁碟快取,用來減少磁碟的io操作,具體講就是把磁碟中資料快取到物理記憶體,把對磁碟的訪問轉換為對物理記憶體的訪問。磁碟快取記憶體為什麼這麼重要?什麼是臨時區域性原理?在短期內訪問同一片資料區的原理稱為臨時區域性原理 頁快取記憶體有什麼特點?頁快取記憶體的大...

LINUX頁快取記憶體和頁回寫

from 頁快取記憶體是linux核心實現的一種主要磁碟快取,它主要用來減少對磁碟的io操作,具體地講,是通過把磁碟中的資料快取到物理記憶體中,把對磁碟的訪問變為對物理記憶體的訪問。為什麼要這麼做呢?一,速度,訪問磁碟的速度要遠低於訪問記憶體的速度 二臨時區域性原理,短時期內集中訪問同一片資料的原理...

頁快取記憶體與頁回寫

訪問物理記憶體的速度遠快於訪問磁碟的速度 所以把經常使用的資料快取到物理記憶體 頁快取記憶體 訪問磁碟可直接變為訪問物理記憶體的方式 頁快取記憶體是由記憶體中的物理頁面組成的 內容對應磁碟上的物理塊 讀快取當核心開始乙個讀操作時 它首先會檢查需要的資料是否再頁快取記憶體中 如果在就放棄訪問磁碟 直接...