色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

mlock如何鎖住進程地址空間關聯的物理內存

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:Linux閱碼場 ? 2022-03-14 09:36 ? 次閱讀

一般用戶空間關聯的物理頁面是按需通過缺頁異常的方式分配和調頁,當系統物理內存不足時頁面回收算法會回收一些最近很少使用的頁面,但是有時候我們需要鎖住一些物理頁面防止其被回收(如時間有嚴格要求的應用),Linux中提供了mlock相關的系統調用供用戶空間使用來鎖住部分或全部的地址空間關聯的物理頁面。 本文的分析基于arm64處理器架構,內核版本為Linux-5.10.27,我們會結合重點內核源代碼來解析mlock是如何做到鎖住進程地址空間關聯的物理內存的,又是如何防止相關的物理頁面被交換出去的。

一、主動缺頁

mlock的主要代碼處理流程如下,這里我們主要關注主動缺頁部分:

6808a960-9fc5-11ec-952b-dac502259ad0.png

mlock處理路徑中,會將VM_LOCKED標志加入到vma->vm_flags中(由于設置的地址區域有可能跨越多個vma,所以代碼中會涉及到分裂和合并的操作,實質上都會設置相關的vma->vm_flags的VM_LOCKED標志),然后會調用__mm_populate來填充虛擬頁對應的物理頁,最終在faultin_page函數中試圖查找vma中的每個虛擬頁對應的物理頁面(對應于follow_page_mask函數),如果沒有找到會調用handle_mm_fault主動觸發缺頁處理。 handle_mm_fault函數是內核通用的缺頁異常處理例程,如vma是匿名映射的則分配物理頁面然后建立頁表映射關系,vma是文件映射則會從磁盤讀取對應的文件頁(如果page cache沒有對應頁面時)到內存的page cache,然后建立虛擬頁面建立頁表映射關系。

二、內存回收處理

1. 掃描活躍的lru鏈表

內存回收掃描活躍的lru鏈表時,對于設定了VM_LOCKED的vma處理鏈路如下:

68239090-9fc5-11ec-952b-dac502259ad0.png

可以看到:當掃描活躍的lru鏈表的時候,會通過反向映射機制查找到映射這個物理頁面的每個vma, 對于設置了vma->vm_flags 的VM_LOCKED標志的vma來說直接退出反向映射處理即可,不需要進行訪問計數的統計工作,本身這樣的物理頁面就需要常駐內存不要進行回收。

2.掃描不活躍的lru鏈表

內存回收掃描不活躍的lru鏈表時,對于設定了VM_LOCKED的vma處理鏈路如下:

6836084c-9fc5-11ec-952b-dac502259ad0.png

可以看到:調用鏈中也會調用page_referenced 函數通過反向映射機制查找到映射這個物理頁面的每個vma, 對于設置了vma->vm_flags 的VM_LOCKED標志的vma來說直接退出反向映射處理即可,返回到page_check_references函數時,判斷如果有vma設置了VM_LOCKED標志就會返回PAGEREF_RECLAIM到shrink_page_list函數接著處理。 shrink_page_list函數在處理完page_check_references之后,就進行回收處理,對于頁表映射頁會調用try_to_unmap來解除頁表映射。

3.反向映射處理

shrink_page_list在回收物理頁面之前會調用try_to_unmap來解除映射到這個頁面所有頁表項,相關處理如下:

684fd8bc-9fc5-11ec-952b-dac502259ad0.png

對于映射到這個物理頁的每個vma來說,如果vma->vm_flags設置了VM_LOCKED標志,則會調用mlock_vma_page來做mlock處理,然后返回false,結束反向映射處理。 下面我們來看mlock_vma_page做了什么事情:

6867d480-9fc5-11ec-952b-dac502259ad0.png

可以看到:mlock_vma_page首先設置頁描述符的PG_mlocked標志,然后會zone的NR_MLOCK頁面記賬,然后會將頁面從原來的lru鏈表中隔離出來,最后會將頁面加入不可回收的lru中(這個代碼大家自行閱讀,實際上是判斷頁描述符的PG_mlocked標志)。

mlock_vma_page處理的重點就是將頁面加入到不可回收的lru鏈表,這樣內存回收的時候就不會在掃描到這樣的頁面了。

mlock的整個過程如下圖所示:

6887a3aa-9fc5-11ec-952b-dac502259ad0.png

三、munlock處理

munlock會解除原來鎖住的頁面,處理路徑如下:

68bf2c58-9fc5-11ec-952b-dac502259ad0.png

當然代碼中也會有對應的vma的分裂處理,主要處理為:清除vma的VM_LOCKED標志,清除頁描述符的PG_mlocked標志,最后就會將原來在不可回收的lru中的頁面重新加入對應的lru鏈表中。 這里還有一個細節,那就是有可能這個頁面對多個vma共享,所以會通過try_to_munlock來處理,處理路徑如下:

68d7e3e2-9fc5-11ec-952b-dac502259ad0.png

會通過反向映射機制,遍歷這樣頁對應的所有vma,如果傳遞的ttu_flags為TTU_MUNLOCK且vma->vm_flags沒有設置VM_LOCKED標志,則直接返回,檢查下一個vma;如果有一個vma設置了VM_LOCKED標志,說明這個頁面還不能被回收,就會通過mlock_vma_page函數重新將頁面加入到不可回收的lru鏈表。 munlock的整個處理過程如下圖:

68f2923c-9fc5-11ec-952b-dac502259ad0.png

四、總結

對于一些對時間有嚴格要求的應用場景,訪問時按需分配和調頁機制的時延可能是未知的,內核中提供了mlock相關的系統調用,用于將虛擬內存區域對應的物理頁面“鎖在”內存中。內核對應mlock鎖住的頁面實際上它主要做了兩步比較重要的操作:1,調用mlock的時候就將所需要的物理頁面準備好;2,內存回收時當掃描到相關的物理頁面時,將其放入不可回收的lru鏈表。第一步保證訪問的虛擬地址對應的物理頁面在內存中,第二步保證了鎖住的頁面不會被回收。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9164

    瀏覽量

    368682
  • 內存
    +關注

    關注

    8

    文章

    3052

    瀏覽量

    74233

原文標題:mlock鎖原理剖析

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    IP地址數據信息和爬蟲攔截的關聯

    IP地址數據信息和爬蟲攔截的關聯主要涉及到兩方面的內容,也就是數據信息和爬蟲。IP 地址數據信息的內容豐富,包括所屬地域、所屬網絡運營商、訪問時間序列、訪問頻率等。 從IP地址信息中可
    的頭像 發表于 12-23 10:13 ?85次閱讀

    MAC地址的作用范圍,MAC地址怎么申請?

    物理地址(PhysicalAddress),用于在網絡中唯一標示一個網卡。以下是英利檢測針對其作用范圍及申請方式的詳細解答:MAC地址的作用范圍局域網內的設備定位
    的頭像 發表于 12-19 17:44 ?615次閱讀
    MAC<b class='flag-5'>地址</b>的作用范圍,MAC<b class='flag-5'>地址</b>怎么申請?

    虛擬內存和云計算的關系

    在現代計算機科學中,虛擬內存和云計算是兩個關鍵的技術概念。虛擬內存是一種內存管理技術,它允許計算機使用比物理內存更多的
    的頭像 發表于 12-04 09:50 ?161次閱讀

    虛擬內存溢出該怎么處理 虛擬內存在服務器中的應用

    在現代計算機系統中,虛擬內存是一種重要的資源管理技術,它允許系統使用硬盤空間來擴展物理內存的容量。然而,當系統運行的程序和進程超出了
    的頭像 發表于 12-04 09:49 ?251次閱讀

    Linux下如何管理虛擬內存 使用虛擬內存時的常見問題

    在Linux系統中,虛擬內存管理是操作系統內核的一個重要功能,負責管理物理內存和磁盤上的交換空間。以下是對Linux下如何管理虛擬內存以及使
    的頭像 發表于 12-04 09:19 ?614次閱讀

    虛擬內存對計算機性能的影響

    ,它允許計算機使用硬盤空間來模擬物理內存。當物理內存(RAM)不足以容納當前所有活動的程序和數據時,操作系統會將部分數據從RAM移動到硬盤上
    的頭像 發表于 12-04 09:17 ?1106次閱讀

    什么是虛擬內存分頁 Windows系統虛擬內存優化方法

    虛擬內存分頁概述 在Windows操作系統中,虛擬內存是通過分頁機制實現的。分頁允許系統將內存中的數據移動到硬盤上,以便為當前運行的程序騰出空間。這個過程對于保持系統的流暢運行至關重要
    的頭像 發表于 12-04 09:16 ?547次閱讀

    虛擬內存不足如何解決 虛擬內存物理內存的區別

    物理內存,可以減少系統對虛擬內存的依賴。 調整虛擬內存設置 : 進入系統設置,調整虛擬內存的大小。通常,虛擬
    的頭像 發表于 12-04 09:14 ?539次閱讀

    虛擬內存的作用和原理 如何調整虛擬內存設置

    虛擬內存,也稱為虛擬內存管理或頁面文件,是計算機操作系統中的一種內存管理技術。它允許系統使用硬盤空間作為額外的RAM(隨機存取存儲器),以彌補物理
    的頭像 發表于 12-04 09:13 ?708次閱讀

    邏輯內存物理內存的區別

    邏輯內存物理內存是計算機系統中兩個重要的概念,它們在計算機的運行和數據處理中起著至關重要的作用。 1. 物理內存(Physical Mem
    的頭像 發表于 09-27 15:38 ?887次閱讀

    linux下查詢進程占用的內存方法有哪些?

    linux下查詢進程占用的內存方法
    發表于 04-08 06:03

    物理內存模型的演變

    內存管理概述中,主要是以Linux v2.6.11為例進行分析的,但是計算技術在不斷發展,新的存儲架構、新的指令集架構、新的SoC架構等都對物理內存模型的抽象提出了更高要求。為此,必須抽象一種完全獨立于硬件架構的
    的頭像 發表于 02-25 10:35 ?517次閱讀

    Linux內核內存管理之內核非連續物理內存分配

    的主要優點是避免了外部碎片,而缺點是需要修改內核頁表。顯然,非連續內存區域的大小必須是4096的倍數。Linux使用非連續物理內存區的場景有幾種:(1)為swap區分配數據結構;(2)為模塊分配
    的頭像 發表于 02-23 09:44 ?1061次閱讀
    Linux內核<b class='flag-5'>內存</b>管理之內核非連續<b class='flag-5'>物理</b><b class='flag-5'>內存</b>分配

    HarmonyOS跨進程通信—IPC與RPC通信開發

    使用Binder驅動,用于設備內的跨進程通信,后者使用軟總線驅動,用于跨設備跨進程通信。需要跨進程通信的原因是因為每個進程都有自己獨立的資源和內存空
    的頭像 發表于 02-02 17:47 ?1340次閱讀
    HarmonyOS跨<b class='flag-5'>進程</b>通信—IPC與RPC通信開發

    線程是什么的基本單位 進程與線程的本質區別

    線程是操作系統中處理器調度的基本單位,它代表著獨立的執行流。在一個進程中,可以包含多個線程,這些線程共享相同的進程資源,如內存空間、文件描述符等。 進程是操作系統中運行的程序的實例,它
    的頭像 發表于 02-02 16:30 ?998次閱讀
    主站蜘蛛池模板: 夜色帮首页 | 精品亚洲永久免费精品 | 久久毛片网站 | 轻轻cao| 亚洲国产精品无码中文字幕 | 国内精品免费视频精选在线观看 | 国产99久久亚洲综合精品西瓜tv | 色迷迷导航 | 成人毛片免费在线观看 | 亚洲日韩在线观看 | 国产99RE在线观看69热 | 手机毛片在线 | 征服艳妇后宫春色 | 91免费精品国自产拍在线可以看 | 国产精品久久久久久人妻精品流 | 性奴公司 警花 | 国产亚洲精品影视在线 | 欧美精品成人一区二区在线观看 | 快播金瓶梅 | 久久久无码AV精品亚洲A片软件 | 亚洲色图在线视频 | 男女边吃奶边做边爱视频 | 欧美黄色精品 | 99re8热视频这在线视频 | 91天仙tv嫩模福利 | 特级做A爰片毛片免费69 | 欧美日韩一区不卡在线观看 | 欧美成人3d动漫专区 | 人妻体体内射精一区二区 | WWW国产亚洲精品久久久日本 | 久久青青草原综合伊人 | 超级乱淫片午夜电影网99 | 亚洲成人免费在线 | qvod快播在线观看 | 无码AV免费精品一区二区三区 | 成年人视频在线免费播放 | 成人性生交大片免费看中文 | 午夜宅宅伦电影网中文字幕 | 成人无码国产AV免费看 | 99久久婷婷国产麻豆精品电影 | 蜜芽丅v新网站在线观看 |