1. 程式人生 > >16---頁快取記憶體和頁回寫

16---頁快取記憶體和頁回寫

頁快取記憶體有什麼作用?

主要實現Linux的磁碟快取,用來減少磁碟的IO操作,具體講就是把磁碟中資料快取到實體記憶體,把對磁碟的訪問轉換為對實體記憶體的訪問。

磁碟快取記憶體為什麼這麼重要?

  • 訪問磁碟的速度(ms)遠遠低於訪問記憶體的速度(nm)
  • 資料一旦被訪問,就有可能在短期內再次被訪問到

什麼是臨時區域性原理?

在短期內訪問同一片資料區的原理稱為臨時區域性原理

頁快取記憶體有什麼特點?

  • 由記憶體中的物理頁組成
  • 內容對應磁碟上的物理塊
  • 大小可以動態調整

頁快取記憶體的大小如何動態調整?

通過佔用空閒記憶體擴張大小,通過自我收縮緩解記憶體壓力

什麼是後備儲存?

正在被快取的儲存裝置

什麼是快取命中,什麼是快取未命中?

當核心開始一個讀操作,它首先會檢查資料是否在頁快取記憶體中。如果在,則放棄對磁碟的訪問,直接從記憶體中讀取,這個行為稱為快取命中;如果不在,核心排程塊IO從磁碟讀取資料並將資料放入頁快取記憶體中,這個行為稱為快取未命中。

程序執行寫操作,頁快取記憶體如何使用,有哪些策略?

  • 不快取----進行寫時,直接跳過快取,寫到磁碟,同時使快取中的資料失效
  • 寫透快取----同時更新記憶體和磁碟,使快取資料時刻與後備儲存保持一致
  • 回寫----資料先寫到快取中,將被寫入的頁標記為“髒”並加入髒頁連結串列,由頁回寫程序週期性的將髒頁連結串列中的頁寫回到磁碟。

核心進行寫操作的具體過程是怎樣的?

  • 1--在頁快取記憶體中搜索需要的頁
  • 2--如果需要的頁不在快取記憶體中,核心在快取記憶體組新分配一個空閒項
  • 3--核心建立一個寫請求
  • 4--資料被從使用者空間拷貝到核心緩衝
  • 5--將資料寫入磁碟

什麼是快取回收策略?

決定快取中什麼內容將被清除的策略

Linux如何進行快取回收?

通過選擇乾淨頁(不髒)進行替換,如果快取中沒有足夠的乾淨頁,核心強制進行回寫操作,以騰出更多的乾淨頁

有哪些快取回收策略,原理是什麼?

  • 最近最少使用(LRU)----快取的資料很久沒被訪問,那麼近期被訪問的概率就很低,通過維護一個按時間為序的連結串列,回收連結串列頭(最老時間戳)的頁面
  • 雙鏈表(改進的LRU)----活躍連結串列中頁面不會被回收,非活躍連結串列中頁面有可能被回收,當活躍連結串列中頁面太多,為了維護平衡,會取出活躍連結串列頭部的頁面將其加入非活躍連結串列尾部。

address_space結構體有什麼作用?

address_space結構體用來管理快取項和頁IO操作,一個檔案可以被多個vm_area_struct結構體標識有多個虛擬地址,但是隻能被一個address_space結構體標識有一個實體地址。

什麼是緩衝,有什麼作用?

緩衝是一個物理磁碟塊在記憶體中的表示,它的作用是對映記憶體中的頁面到磁碟塊。

什麼是髒資料?

當頁快取記憶體中的資料比後臺儲存的資料先更新時,該資料稱為髒資料,最終髒資料會被寫回到後臺儲存裝置(磁碟)

哪些情況下,髒頁被寫回磁碟?

  • 空閒記憶體大小低於一個特定閾值,核心將髒頁寫回到磁碟,釋放髒頁,使之成為空閒記憶體
  • 髒頁在記憶體中駐留時間超過一個特定閾值,核心將超時的髒頁寫回磁碟
  • 使用者程序執行sync()和fsync()系統呼叫,核心按要求執行回寫動作