linux頁面管理

前言

這裏很複雜,並且這裏爲了進程的穩定之類的,並且包括進程資源的平均之類的東西,每種裝填的處理我也沒研究特別清楚,這裏僅僅記錄下一些思路,具體問題我不在過分解析,

正文

這裏先說下頁面管理的裝填,這裏寫圖片描述
這裏僅僅寫出了四個隊列,可是還有一個結構專門用來管理用於交換的page,這裏不在詳細說明,
主要介篩下,關於空閒隊列,在分配時候有幾個問題,在分配一個頁面的時候,我們知道inactive_clean_list,也可以,但是,在需要分配幾個頁面的時候,就會遇到麻煩,因爲一般我們需要幾個連續的頁面(雖說我們虛存可以改變地址映射)。第二關於分配多個連續頁面時候,這裏的連續的倉庫的分配是一個很有意思的解決辦法,專門有個數組,大小是10,裏面盛放2^n的連續的頁面。然後可以統一管理。
關於activity_list轉化到inactive_dirty_list.這裏通過函數refill_inactive()來實現。這裏實現很複雜,他是依次試圖從每個進程中,換出一些頁面,然後輪流換出一遍,這裏僅僅是轉到inactive_dirty_list,並且沒有轉入到inactive_clean_list。然後通過page_launder()來轉入到inactive_clean_list。當然在這之前,我們會通過一個更加簡單操作,是吧inactive_dirty_list直接轉入到到空閒隊列,
至於從交換區轉入內存,這裏通過頁面議程的page_falct()函數來實現的,這裏流程比較簡單,不在詳細介紹。
page_launder()其中有吧頁面保存到swap的能力

後記

這裏函數實現比較複雜,我c語言語法也不太好,看的比較迷茫,並且也不是很想整理這些內容。不過整體思路還是比較簡單,這裏不在過多話費時間,以後有機會我自己研究下最新版本,更加實用!!!

發佈了66 篇原創文章 · 獲贊 29 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章