標籤:
使用者空間的頁面有下面幾種:
1、普通的使用者空間頁面,包括進程的程式碼片段、資料區段、堆棧段、以及動態分配的“儲存堆”。
2、通過系統調用mmap()映射到使用者空間的已開啟檔案的內容。
3、進程間的共用記憶體區。
這些頁面的的周轉有兩方面的意思。
1、頁面的分配,使用,回收。如進程壓棧時新申請的頁面,這類頁面不進行盤區交換,不使用時釋放得以回收。
這部分通過一個情境來解釋:
Linux核心原始碼情景分析-記憶體管理之使用者堆棧的擴充。
2、盤區交換。如要執行硬碟上的對應程式碼片段。把硬碟上的程式碼片段換入記憶體才能執行。
這部分通過三個情境來解釋:
Linux核心原始碼情景分析-記憶體管理之使用者頁面的換入。
Linux核心原始碼情景分析-記憶體管理之使用者頁面的分配。
Linux核心原始碼情景分析-記憶體管理之使用者頁面的定期換出。
核心空間的頁面有下面幾種:
1、核心代碼和核心中全域量所佔的記憶體頁面既不需要經過分配也不會被釋放。這部分空間是靜態。
2、核心通過kmalloc後者vmalloc分配、用作某些臨時性使用和為管理目的而設的資料結構,如vma_area_struct資料結構等,這些資料結構一旦使用完畢便無儲存價值,所以立即便可釋放。不過由於一個頁面中往往有多個同種資料結構,所以要到整個頁面都空閑時才能把頁面釋放。
3、核心中通過調用alloc_pages(),為某些臨時使用和管理目的而分配的頁面,例如,每個進程的核心棧所佔的兩個頁面、從核心空間複製參數時所使用的頁面等等。這些頁面也是一旦使用完畢便無儲存價值,所以立即釋放。
4、在核心中還有一種頁面,雖然使用完畢,但其內容仍有儲存價值,因此,並不立即釋放。這類頁面“釋放”之後進入一個LRU隊列,經過一段時間的緩衝讓其“老化”。如果在此期間又要用到其內容了,就又將其投入使用,否則便繼續讓其老化,直到條件不再允許時才加以回收。這種用途的核心頁面大致有以下這些: · 檔案系統中用來緩衝儲存一些檔案目錄結構dentry的空間 · 檔案系統中用來緩衝儲存一些索引節點inode的空間 · 用於檔案系統讀/寫操作的緩衝區。
Linux核心原始碼情景分析-記憶體管理