頁快取記憶體與頁回寫

2021-09-29 20:37:49 字數 2623 閱讀 6401

訪問物理記憶體的速度遠快於訪問磁碟的速度 所以把經常使用的資料快取到物理記憶體 頁快取記憶體 訪問磁碟可直接變為訪問物理記憶體的方式 頁快取記憶體是由記憶體中的物理頁面組成的 內容對應磁碟上的物理塊

讀快取當核心開始乙個讀操作時 它首先會檢查需要的資料是否再頁快取記憶體中 如果在就放棄訪問磁碟 直接從記憶體讀取 如果資料沒有在快取中 那麼就要必須排程io操作從磁碟讀取資料 然後核心將讀取出來的資料 放入頁快取中

寫快取當進行寫快取時 分為三種策略

第一種策略 稱為不快取 也就是說快取記憶體不去快取任何寫操作 直接寫到磁碟中

第二種策略 寫透快取 寫操作將自動更新記憶體快取 同時也更新磁碟檔案 保持了快取的一致性

第三種策略 簡單說就是第二種的補充 程式執行寫操作直接寫到快取中 後端儲存不會立刻更新 而是將快取記憶體中被寫入的頁面標記為臟 並且被加入到髒頁面鍊錶 然後由乙個程序週期性將髒頁鍊錶的頁寫回到磁碟

linux頁快取記憶體使用了address_space管理快取項和頁io操作 比如exit檔案系統在檔案fs/ext3/inode.c 中定義了自己的操作表 這些方法提供了管理快取記憶體的各自行為

例項分析

如上圖為核心呼叫read所涉及到的層次

虛擬檔案系統 ==》具體的檔案系統 ==》pach cache(也就是高速緩衝區) ==》 通用塊層 ==》io呼叫層 ==》驅動層 ==》物理塊層

當訪問讀寫檔案時 首先要開啟檔案 然後獲取控制代碼 進行讀寫 看是否存在高速緩衝區 如果存在就直接命中 返回使用者資料 不存在就要通過直接的io操作去讀寫磁碟

涉及到的結構體

inode : 檔案 i 節點,儲存檔案標識、許可權和內容等資訊

file : 儲存檔案的相關資訊和各種操作檔案的函式指標集合

file_operations :操作檔案的函式介面集合

address_space :描述檔案的 page cache 結構以及相關資訊

address_space_operations :操作 page cache 的函式介面集合

從這個結構關係看出 file是儲存檔案的相關資訊和各種操作檔案的函式指標集合 通過獲取到file物件 就可以實現對檔案的讀寫操作 以及對高速緩衝區的操作

怎樣獲取file物件?

答 : 通過fd去獲取 一般我們訪問檔案首先要開啟控制代碼 獲取fd 可見fd與file 存在某種關聯 看看開啟檔案所做的操作

filp_open() :呼叫 open_namei() 函式取出和該檔案相關的 dentry 和 inode f->f_op = fops_get(inode->i_fop);這裡對 file檔案物件腫的f_op賦值為inode->i_fop

fd_install 關聯當前程序描述符以及file物件

從上圖可以看出程序描述符和file物件之間的各個關係流程 那麼怎麼通過控制代碼獲取到檔案file物件 然後才能進行對檔案的讀寫操作 以及快取操作

當我們呼叫sys_read的時候fget_light 會根據控制代碼獲取file檔案物件

檔案的讀寫呼叫file->f_op 最終呼叫的是inode->i_fop 而inode在初始化物件時被賦值

在fs/ext2 inode.c檔案 我們找到相關的賦值

如上圖 我們可以看到inode->i_fop以及緩衝區的操作賦值

read最終呼叫generic_file_aio_read

generic_file_aio_read 函式分兩步走

1 是直接通過io操作 就行讀寫磁碟

2 先去緩衝區查詢 是否有所要的資料

這裡分析第二步

do_generic_file_read

static void do_generic_file_read(struct file *filp, loff_t *ppos,

read_descriptor_t *desc, read_actor_t actor)

****************************************

這裡又回到之前我們在inode所做的賦值操作**

readpage:

/* start the actual read. the read will unlock the page. */

***********************************====

}

LINUX頁快取記憶體和頁回寫

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

16 頁快取記憶體和頁回寫

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

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

磁碟訪問ms級別,記憶體訪問ns級別,使用資料務必將資料拷貝到記憶體中,這裡是將一些磁碟資料對映到記憶體中提高命中率。對應於磁碟的物理塊 對映關係 可以占用空閒記憶體擴張,也可以收縮 換出 read操作 讀取一段資料,首先在快取中查詢,沒有的話才呼叫i o去安排,讀取就直接讀取到快取中,一段時間沒有...