Linux——內存管理代碼分析

虛空間管理

頁框和頁的關系

頁框

將內存空間分為一個個大小相等的分區(比如:每個分區4KB),每個分區就是一個頁框,也叫頁幀,即物理頁面,是linux劃分內存空間的結果。
每個頁框都有一個頁框號,即內存塊號、物理塊號。

將用戶進程的地址空間也分為與頁框大小相等的一個個區域,稱為頁或頁面,即虛擬頁面,是linux劃分地址空間的結果。
每個頁面都有一個頁號

頁、頁表項、頁表、頁目錄項、頁目錄的關系參考:
計算機體系結構——虛擬內存技術

CSDN:基本分頁存儲管理的基本概念

線性區

當用戶態進程動態請求內存時,linux并不會直接分配物理頁框,而是先分配一段新的虛擬地址空間的使用權。

CSDN:進程地址空間 - VMA線性區

PCB中內存信息數據結構

主要的數據結構

mm_struct

mm是進程控制塊中的一個成員,表示了該進程的內存信息。
每個進程都有自己的頁目錄、頁表項等信息
在這里插入圖片描述
在這里插入圖片描述

*pgd: 一級頁表的起始地址
*mmap:指向進程的第一個VMA
mm_rb:指向紅黑樹的根

vm_area_struct

線性區,表示用戶虛空間中的一塊連續區域,可以簡稱為vma。
數據結構成員包括權限信息等。
vm_rb->rb_left指針指向相鄰的低地址VMA,vm_rb->rb_right指向相鄰的高地址VMA1
在這里插入圖片描述

page

頁框描述符,描述了頁框的類型(匿名頁還是文件頁)
在這里插入圖片描述
mem_map:描述了所有頁框,連續存放。

file

頁高速緩存,以文件為管理單位:緩存的頁框屬于某個文件
硬盤數據頁的高速緩存,放在頁框中;

在這里插入圖片描述
在這里插入圖片描述

address_space

address_space:記錄映射到本文件(某一區間)的所有線性區,這些線性區按其區間組織為一顆優先搜索樹。
在這里插入圖片描述
page_tree:文件的所有緩存頁框的描述符構成一顆基樹,該結構體表示基樹的根節點,如果最低位為1,表示指向的是一個radix_tree_node對象

anon_vma

anon_vma數據結構,鏈接了page和anon_vma,實質上和anon_vma_chain共同鏈接了的page數據結構和VMA的vm_area_struct數據結構
在這里插入圖片描述

anon_vma_chain

anon_vma_chain鏈接了anon_vma和vma
在這里插入圖片描述

rb_node 和 rb_root

在這里插入圖片描述

radix_tree_node

path:該節點的頁節點數
count:表示有效頁框描述符地址的數量
在這里插入圖片描述

數據結構關系

數據結構關系圖:
在這里插入圖片描述

鏈表關系

所有的page構成一顆基樹
在這里插入圖片描述

頁框描述符紅黑樹
通過page->index可以快速找到其他page地址
在這里插入圖片描述

vma紅黑樹
所以進程的VMAs組成一個雙向鏈表

反向映射

正向映射:頁號 → 頁框號,即通過虛擬頁號查找物理頁號
反向映射:頁框號 → 進程號和頁號的集合,即在已知物理頁面(page frame)的情況下,找到映射該物理頁面的虛擬頁。

反向映射使用場景

反向映射通常在頁框回收時需要此功能,例如

  1. 當內存空間不足時,有些頁面長時間不適用,需要交換到磁盤
  2. 有些頁面需要遷移

工作原理

當上述使用場景需要反向映射時,linux為了快速定位映射到該物理頁的頁表項,通過頁框號查找頁框描述符,通過頁框描述符中的mapping確定是匿名頁還是文件頁,并根據mapping的值

t

父進程為自己的進程空間VMA分配物理頁面的時,會產生匿名頁面

匿名頁和文件頁

二者均是頁框的類型。

匿名頁

不屬于文件的頁高速緩存,沒有關聯到文件頁,不是以文件形式存在,無法和磁盤文件交換
匿名頁面是線性區的一種類型,映射到anon_vma對象(該對象關聯了進程為對應線性區申請的一組匿名頁框,并記錄了使用這些頁框的所有線性區)
mapping的最低位為1.

匿名頁反向映射結構圖2
在這里插入圖片描述

文件頁

映射文件的頁,即某個文件的也高速緩存。程序可以通過read/write/mmap去操作,此時在內存中會申請page cache來緩存硬盤內容,因此該內容及存在于內存,也存在于外存中
屬于某個address_space對象(該對象記錄使用該文件頁高速緩存的所有線性區)
mapping!=0,但mapping的最低位為0。

文件頁反向映射結構圖2
在這里插入圖片描述

linux內存管理筆記(三十四)----匿名映射

參考文獻


  1. 紅黑樹的應用:Linux內核虛擬內存的管理 ??

  2. CSDN:linux內存管理筆記(三十八)----反向映射 ?? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23375.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23375.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23375.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習之指數移動平均模型(EMA)介紹

指數移動平均模型(Exponential Moving Average Model,EMA)是一種用于平滑時間序列數據的技術。它通過對數據進行加權平均來減少噪音和波動,從而提取出數據的趨勢。 在深度學習中,EMA 常常用于模型的參數更新和優化過程…

完整指南:遠程管理 Linux 服務器的 Xshell6 和 Xftp6 使用方法(Xshell無法啟動:要繼續使用此程序........,的解決方法)

😀前言 在當今軟件開發領域,遠程管理 Linux 服務器已成為日常工作的重要組成部分。隨著團隊成員分布在不同的地理位置,遠程登錄工具的使用變得至關重要,它們為開發人員提供了訪問和管理服務器的便捷方式。本文將介紹兩款功能強大的…

python隨機顯示四級詞匯 修改版直接顯示釋義

python隨機顯示四級詞匯 修改版直接顯示釋義 添加暫停 和繼續(按下中建滾輪觸發) 按下右鍵 退出程序 解決在暫停后 ,重新調用update_word 會明顯發現每隔5秒更新一次單詞的速率已經改變 速率改變的問題可能是由于暫停期間沒有清除之前的定時器所導致的。為了確保重新調用updat…

Linux高級進階-ssh配置

Ubuntu-system 允許使用root遠程登陸 apt install ssh -y在/etc/ssh/sshd_config 文件修改PermitRootLogin yes systemctl restart ssh遠程連接軟件用戶名為root

Ubuntu系統中Apache Web服務器的配置與實戰

?? 歡迎大家來訪Srlua的博文(づ ̄3 ̄)づ╭?~?? 🌟🌟 歡迎各位親愛的讀者,感謝你們抽出寶貴的時間來閱讀我的文章。 我是Srlua小謝,在這里我會分享我的知識和經驗。&am…

Educational Codeforces Round 166(Div.2) A~D

A.Verify Password(字符串) 題意: Monocarp正在開發他的新網站,目前面臨的挑戰是如何讓用戶選擇強密碼。 Monocarp認為,強密碼應滿足以下條件: 密碼只能由小寫拉丁字母和數字組成;字母后面不…

PasteCode系列系統說明

定義 PasteCode系列是指項目是基于PasteTemplate構建的五層以上項目,包括不僅限于 Domain EntityFrameworkCore Application.Contracts Application HttpApi.Host 熟悉ABP vNext就很好理解了,因為PasteTemplate就是基于ABP的框架精簡而來!在…

一些Mysql面試題

InnoDB是如何存儲數據的? InnoDB 的數據是按「數據頁」為單位來讀寫的,默認數據頁大小為 16 KB。每個數據頁之間通過雙向鏈表的形式組織起來,物理上不連續,但是邏輯上連續。 數據頁內包含用戶記錄,每個記錄之間用單向…

【java 如何將字符串反轉?】

文章目錄 概要示例(1)使用StringBuilder的reverse方法(2)使用charAt和循環(3)使用雙指針(4)使用遞歸 總結 概要 在Java中,有多種方法可以將字符串反轉,我這里…

代碼隨想錄訓練營第二天 977有序數組的平方 209長度最小的子數組 59螺旋矩陣II

第一題: 題目鏈接:977. 有序數組的平方 - 力扣(LeetCode) 思路: 先將數組求完平方和后進行排序,很簡單,主要是排序算法的考察。 這里采用快排 快排的思路: 取這個數組的中間值…

代碼隨想錄算法訓練營第四十六 | ● 139.單詞拆分 ● 關于多重背包,你該了解這些! ● 背包問題總結篇!

139.單詞拆分 視頻講解&#xff1a;https://www.bilibili.com/video/BV1pd4y147Rh https://programmercarl.com/0139.%E5%8D%95%E8%AF%8D%E6%8B%86%E5%88%86.html class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<st…

java stream流之groupby的用法

簡單分組 按照年齡對 Person 對象進行分組&#xff1a; 代碼示例 import java.util.*; import java.util.stream.Collectors;public class SimpleGrouping {public static void main(String[] args) {List<Person> people Arrays.asList(new Person("Alice"…

上市即交付,比亞迪秦L DM-i萬人交車暨千媒眾測開營

6月6日&#xff0c;“引領中級 開創油耗2時代”秦L DM-i萬人交車暨千媒眾測開營儀式在比亞迪大本營深圳盛大舉行。 眾多車主代表親臨現場&#xff0c;與全國各地的比亞迪4S店千店聯動&#xff0c;將秦L DM-i全國交付推向新的高潮。發布即量產&#xff0c;上市即交付&#xff0…

ESP32:FreeRTOS節拍配置(vTaskDelay延時10ms改為1ms)

文章目錄 背景方法手動修改sdkconfig通過idf.py menuconfig 背景 在FreeRTOS的默認配置中&#xff0c;任務調度的頻率默認是100HZ&#xff0c;因此默認vTaskDelay默認延時是10ms。 FreeRTOS 的系統時鐘節拍可以在配置文件 FreeRTOSConfig.h 里面設置&#xff1a;#define confi…

【HarmonyOS】鴻蒙應用子模塊module資源如何獲取

【HarmonyOS】鴻蒙應用子模塊module資源如何獲取 一、問題背景&#xff1a; 在多模塊項目工程中&#xff0c;單個模塊的資源不會放在主模塊中&#xff0c;所以我們需要在子模塊中訪問自己的資源。如果使用默認的資源獲取api&#xff0c;會提示找不到資源。 那如何獲取子模塊下…

【AI基礎】第四步:保姆喂飯級-langchain+chatglm2-6b+m3e-base

在第三步手動安裝chatglm2-6b時&#xff0c;已經可以通過web進行交互。langchain重新封裝了一下AI框架&#xff0c;提供更加友好的開發功能&#xff0c;類似于AI屆的spring框架。langchain的安裝過程也類似于上一步說的&#xff1a;【AI基礎】第三步&#xff1a;純天然手動安裝…

負載均衡

文章目錄 負載均衡的分類負載均衡的算法 負載均衡的分類 對鏈路的負載均衡 對鏈路的負載均衡主要是指應用方有多條ISP網絡出口,比方說電信網通,電信鐵通等,對鏈路的負載均衡也是解決目前電信網通互聯互通的最專業的技術.其實現的原理是根據負載均衡算法來算出,到目標地址的數據…

企業獲客有哪些好的廣告推廣拓客渠道?

在這個數字化營銷的時代&#xff0c;企業要想在激烈的市場競爭中脫穎而出&#xff0c;選擇正確的廣告宣傳渠道至關重要。隨著互聯網技術的飛速發展&#xff0c;各類媒體平臺如雨后春筍般涌現&#xff0c;為企業提供了廣闊的宣傳空間。云銜科技通過多元化的媒體渠道&#xff0c;…

485數據采集模塊

在工業自動化與智能化的浪潮中&#xff0c;數據采集作為整個系統的基礎和核心&#xff0c;其準確性和實時性直接關系到生產效率和產品質量。而485數據采集模塊&#xff0c;作為連接現場設備與上位機的重要橋梁&#xff0c;其性能與穩定性對于整個系統的運行至關重要。HiWoo Box…

【AIGC X UML 落地】通過多智能體實現自然語言繪制UML圖

前天寫了篇博文講到用PlantUML來繪制C類圖和流程圖。后臺有讀者留言&#xff0c;問這步能否自動化生成&#xff0c;不想學習 PlantUML 語法。 我想了下&#xff0c;發現這事可行&#xff0c;確實可以做到通過自然語言的描述就能實現 UML圖的繪制&#xff0c;昨天晚上加了個班到…