精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入剖析Linux內核反向映射機制

系統 Linux
為了系統的安全性,Linux內核將各個用戶進程運行在各自獨立的虛擬地址空間,用戶進程之間通過虛擬地址空間相互隔離,不能相互訪問,一個進程的奔潰不會影響到整個系統的異常也不會干擾到系統以及其他進程運行。

[[353175]]

作者簡介

Cheetah,曾為U-boot社區和Linux內核社區提交過若干補丁,主要從事Linux相關系統軟件開發工作,負責Soc芯片BringUp及系統軟件開發,喜歡閱讀內核源代碼,在不斷的學習和工作中深入理解內存管理,進程調度,文件系統,設備驅動等內核子系統。

為了系統的安全性,Linux內核將各個用戶進程運行在各自獨立的虛擬地址空間,用戶進程之間通過虛擬地址空間相互隔離,不能相互訪問,一個進程的奔潰不會影響到整個系統的異常也不會干擾到系統以及其他進程運行。

Linux內核可以通過共享內存的方式為系統節省大量內存,例如fork子進程的時候,父子進程通過只讀的方式共享所有的私有頁面。再比如通過IPC共享內存方式,各個不相干的進程直接可以共享一塊物理內存等等。

我們都知道操作系統開啟mmu之后cpu訪問到的都是虛擬地址,當cpu訪問一個虛擬地址的時候需要通過mmu將虛擬地址轉化為物理地址,這叫做正向映射。而與本文相關的是反向映射,它主要是通過物理頁來找到共享這個頁的所有的vma對應的頁表項,這是本文討論的問題。

 

本文目錄:

1.反向映射的發展

2.反向映射應用場景

3.匿名頁的反向映射

4.文件頁的反向映射

5.ksm頁的反向映射

5.總結

注:反向映射機制是Linux內核虛擬內存管理的難點也是理解內存管理的關鍵技術之一!!

1.反向映射的發展

實際上在早期的Linux內核版本中是沒有反向映射的這個概念的,那個時候為了找到一個物理頁面對應的頁表項就需要遍歷系統中所有的mm組成的鏈表,然后對于每一個mm再遍歷每一個vma,然后查看這個vma是否映射了這頁,這個過程極其漫長而低效,有的時候不得不遍歷完所有的mm然后才能找映射到這個頁的所有pte。

 

后來人們發現了這個問題,就再描述物理頁面的page結構體中增加一個指針的方式來解決,通過這個指針來找到一個描述映射這個頁的所有pte的數組結構,這對于反向映射查找所有pte易如反掌,但是帶來的是浪費內存的問題。

 

接著就在2.6內核的時候,內核大神們想到了復用page結構中的mapping字段,然后通過紅黑樹的方式來組織所有映射這個頁的vma,形成了匿名頁和文件頁的反向映射機制。

如下為匿名頁反向映射圖解:

 

如下為文件頁反向映射圖解:

 

但是后來匿名頁的反向映射遇到了效率和鎖競爭激烈問題,就促使了目前使用的通過avc的方式聯系各層級反向映射結構然后將鎖的粒度降低的這種方式。可以看到反向映射的發展是伴隨著Linux內核的發展而發展,是一個不斷進行優化演進的過程。

2.反向映射應用場景

那么為何在Linux內核中需要反向映射這種機制呢?它究竟為了解決什么樣的問題而產生的呢?

試想有如下場景:

(1)一個物理頁面被多個進程的vma所映射,系統過程中發生了內存不足,需要回收一些頁面,正好發現這個頁面是適合我們回收利用的,我們能夠直接把這個頁面還給伙伴系統嗎?答案肯定是不能。因為這個頁面被很多個進程所共享,我們必須做的事情就是斷開這個頁面的所以映射關系,這就是反向映射所做的事情。

(2)一些情況我們需要將一個頁面遷移到另一個頁面,但是牽一發而動全身,可能有一些進程已經映射這個即將要遷移的頁面到自己的vma中,那么這個時候同樣需要我們知道究竟這個頁面被哪些vma所映射呢?這同樣是反向映射所做的事情。

實際上,反向映射的主要應用場景為內存回收和頁面遷移,當系統發生內存回收和頁面遷移的時候,對于每一個候選頁Linux內核都會判斷是否為映射頁,如果是,就會調用try_to_unmap 來解除頁表映射關系,本文也主要來從try_to_unmap函數來解讀反向映射機制。

如果我們在細致到其他的內核子系統會發現,在內存回收,內存碎片整理,CMA, 巨型頁,頁遷移等各個場景中都能發現反向映射所做的關鍵性的工作,所有理解反向映射機制在Linux內核中的實現是理解掌握這些子系統的基礎和關鍵性所在,否則你即將不能理解這些技術背后的脊髓所在,所以說理解反向映射這種機制對于理解Linux內核內存管理是至關重要的!!!

3.匿名頁的反向映射

匿名頁的共享主要發生在父進程fork子進程的時候,父fork子進程時,會復制所有vma給子進程,并通過調用dup_mmap->anon_vma_fork建立子進程的rmap以及和長輩進程rmap關系結構:

 

主要通過anon_vma這個數據結構體中的紅黑樹將共享父進程的頁的所有子進程的vma聯系起來(通過anon_vma_chain 來聯系對應的vma和av),當然這個關系建立比較復雜,涉及到vma,avc和av這些數據結構體。.

而在缺頁異常do_anonymous_page的時候將page和vma相關聯。

當內存回收或頁面遷移的時候,內核路徑最終會調用到:

  1. try_to_unmap //mm/rmap.c 
  2. ->rmap_walk 
  3.   ->rmap_walk_anon 
  4.      ->anon_vma_interval_tree_foreach(avc, &anon_vma->rb_root,pgoff_start, pgoff_end) 
  5.          ->rwc->rmap_one 
  6.             ->try_to_unmap_one 

對于候選頁,會拿到候選頁相關聯的anon_vma,然后從anon_vma的紅黑樹中遍歷到所有共享這個頁的vma,然后對于每一個vma通過try_to_unmap_one來處理相對應的頁表項,將映射關系解除。

4.文件頁的反向映射

文件頁的共享主要發生在多個進程共享libc庫,同一個庫文件可以只需要讀取到page cache一次,然后通過各個進程的頁表映射到各個進程的vma中。

管理共享文件頁的所以vma是通過address_space的區間樹來管理,在mmap或者fork的時候將vma加入到這顆區間樹中:

 

發生文件映射缺頁異常的時候,將page和address_space相關聯。

當內存回收或頁面遷移的時候,內核路徑最終會調用到:

  1. try_to_unmap //mm/rmap.c 
  2. ->rmap_walk 
  3.   ->rmap_walk_file 
  4.     ->vma_interval_tree_foreach(vma, &mapping>i_mmap,pgoff_start, pgoff_end)  
  5.          ->rwc->rmap_one 

對于每一個候選的文件頁,如果是映射頁,就會遍歷page所對應的address_space的區間樹,對于每一個滿足條件的vma,調用try_to_unmap_one來找到pte并解除映射關系。

5.ksm頁的反向映射

ksm機制是內核將頁面內容完全相同的頁面進行合并(ksm管理的都是匿名頁),將映射到這個頁面的頁表項標記為只讀,然后釋放掉原來的頁表,來達到節省大量內存的目的,這對于host中開多個虛擬機的應用場景非常有用。

ksm機制中會管理兩課紅黑樹,一棵是stable tree,一棵是unstable tree,stable tree中的每個節點stable_node中管理的頁面都是頁面內容完全相同的頁面(被叫做kpage),共享kpage的頁面的頁表項都會標記為只讀,而且對于原來的候選頁都會有rmap_item來描述他的反向映射(其中的anon_vma成員的紅黑樹是描述映射這個候選頁的所有vma的集合),合并的時候會加入到對應的stable tree節點和鏈表中。

當內存回收或頁面遷移的時候,內核路徑最終會調用到:

  1. try_to_unmap //mm/rmap.c 
  2. ->rmap_walk 
  3.    ->rmap_walk_ksm  //mm/ksm.c 
  4.         -> hlist_for_each_entry(rmap_item, &stable_node->hlist, hlist) 
  5.     ->anon_vma_interval_tree_foreach(vmac, &anon_vma->rb_root,0, ULONG_MAX)  
  6.       ->rwc->rmap_one 

對于一個ksm頁面,反向映射的時候,會拿到ksm頁面對應的節點,然后遍歷節點的hlist鏈表,拿到每一個anon_vma,然后就和上面介紹的匿名頁的反向映射一樣了,從anon_vma的紅黑樹中找到所有的vma,最后try_to_unmap_one來找到pte并解除映射關系。

6.總結

前面我們介紹了反向映射的三種類型,匿名頁,文件頁和ksm頁的反向映射,分別通過page所對應的的vma, address_space, stable_node結構來查找vma。當然我們只是介紹了Linux內核中的反向映射的冰山一角,主要是try_to_unmap函數,其實每種反向映射各個數據結構建立的過程錯綜復雜,一篇文章三言兩語也說不清楚,他們散落在Linux內核源代碼的進程創建fork,內存映射mmap,缺頁異常處理,文件系統等各個角落。

誠然,如果我們搞不清楚各種反正映射所對應的各種數據結構之間的關系,或者只是有一些概念上的了解,并沒有真正掌握這種機制的實現原理,對于我們來理解Linux內核虛擬內存管理來說是一種障礙,不懂得反向映射內存管理 中的很多問題是搞不明白的!

本文轉載自微信公眾號「 Linux閱碼場」,可以通過以下二維碼關注。轉載本文請聯系 Linux閱碼場公眾號。

 

責任編輯:武曉燕 來源: Linux閱碼場
相關推薦

2011-03-21 09:11:52

Linux頁面回收反向映射

2009-09-28 14:54:33

Hibernate映射

2025-10-09 11:10:00

開發操作系統Linux

2010-08-04 13:52:53

Flex事件機制

2025-04-18 04:05:00

2025-04-07 00:01:00

Linux內核反向映射

2021-03-06 22:41:06

內核源碼CAS

2010-09-17 12:39:51

JAVA反射機制

2009-06-17 17:00:03

2010-01-07 13:44:54

Linux內核代碼

2021-05-19 07:56:26

Linux內核搶占

2018-05-18 09:07:43

Linux內核內存

2009-10-29 09:41:01

Linux內核DeviceMappe

2017-08-16 16:20:01

Linux內核態搶占用戶態搶占

2009-12-23 13:17:36

Linux設備驅動

2025-02-12 00:29:58

2025-04-02 00:33:00

2025-04-01 02:00:22

2019-07-08 20:00:35

Linux內核模塊

2025-04-22 08:21:10

點贊
收藏

51CTO技術棧公眾號

97久久国产精品| 欧美日韩午夜剧场| 亚洲精品欧美日韩专区| 国产性猛交普通话对白| 婷婷综合一区| 欧美三级视频在线观看| 黄网站色视频免费观看| 你懂的免费在线观看视频网站| 午夜一区在线| 美乳少妇欧美精品| 深爱五月激情网| 福利一区三区| 在线免费观看日本欧美| 精品国产一区二区三区无码| 国产专区在线播放| 国产成人高清视频| 国产精品亚洲网站| 四虎精品永久在线| 自拍欧美日韩| 色小说视频一区| 亚洲精品欧美综合四区| 97福利一区二区| 性色国产成人久久久精品| 久久精品福利| 欧美成人国产一区二区| 爱爱爱爱免费视频| 欧美性xxx| 午夜精品视频一区| 久久综合亚洲精品| 日本免费在线视频| 粉嫩一区二区三区四区公司1| 激情懂色av一区av二区av| 中文字幕制服丝袜在线| 你懂的在线观看| 成人av在线一区二区| 成人精品久久久| 一级黄色在线观看| 性欧美长视频| 久久全国免费视频| 免费中文字幕视频| 亚洲成人tv| 久久精品国产99国产精品澳门| 人妻少妇无码精品视频区| 日韩av影院| 亚洲第一天堂av| 成人欧美精品一区二区| 懂色av色香蕉一区二区蜜桃| 欧美久久久一区| 亚洲成人福利在线| se69色成人网wwwsex| 色8久久精品久久久久久蜜| 国产伦精品一区二区三区四区视频_| 男人操女人逼免费视频| 国产精品无码一区| 久久综合九色综合欧美狠狠| 欧美孕妇性xx| 无码人妻av一区二区三区波多野| 国产精品美女久久久浪潮软件| 国外成人免费在线播放| 日韩视频免费观看高清| 99riav1国产精品视频| 97国产成人精品视频| 国产精品xxxx喷水欧美| 亚洲欧美不卡| 国产经典一区二区| 中文字幕在线观看第二页| 美腿丝袜在线亚洲一区| 成人综合网网址| 国产成人精品亚洲精品色欲| 国产a久久麻豆| 国产精品久久九九| 欧美男男同志| 国产精品视频免费| 色爽爽爽爽爽爽爽爽| 欧美亚洲系列| 午夜精品福利一区二区三区蜜桃| 北条麻妃在线视频观看| 日本精品在线中文字幕| 欧美精品在线一区二区三区| 国产成人精品一区二区在线小狼 | 亚洲女性喷水在线观看一区| 激情五月五月婷婷| av成人影院在线| 一本色道久久综合亚洲91| 日韩精品久久一区二区三区| xxxxx日韩| 亚洲精品国产视频| 免费看又黄又无码的网站| 亚州一区二区三区| 亚洲福利国产精品| 91看片就是不一样| 天天综合在线观看| 一本大道久久a久久精品综合| 男人女人黄一级| 久久久久久久久久久久电影| 日韩精品中文字幕在线播放| 日本黄色录像视频| 大地资源网3页在线观看| 91tv亚洲精品香蕉国产一区| 在线一区二区视频| 亚洲一区和二区| 国精一区二区| 久久久久国产精品www| 波多野结衣在线电影| 国产精品99久| 亚洲第一在线综合在线| 91超碰在线免费| 欧美日本精品一区二区三区| 亚洲男人在线天堂| 亚洲影视一区| 国产精品成人免费电影| 免费的黄色av| 亚洲欧美日韩久久| 天天操天天摸天天爽| 国产一区调教| 欧美大片在线看免费观看| 337p粉嫩色噜噜噜大肥臀| 懂色av一区二区三区蜜臀 | 蜜桃视频久久一区免费观看入口| 国产欧美一区二区精品性色| 免费无码毛片一区二三区| 99久久这里有精品| 中文字幕av一区二区| 91浏览器在线观看| 成人一区在线看| 中国一级黄色录像| 国外成人福利视频| 伊人久久久久久久久久| 全部毛片永久免费看| 国产69精品一区二区亚洲孕妇| 一区二区三区国产福利| 成人在线爆射| 精品调教chinesegay| 日韩 国产 在线| 成人毛片老司机大片| 国产一二三四区在线观看| 亚洲欧洲专区| 综合国产在线观看| 亚洲一区二区影视| 国产精品青草综合久久久久99| 白嫩少妇丰满一区二区| 欧洲亚洲成人| 欧美中文字幕第一页| 亚洲人成色777777精品音频| 香蕉乱码成人久久天堂爱免费| 老司机av网站| 亚洲综合一区中| 日韩精品四区| 国产精品美女www爽爽爽视频| 男人久久精品| 一本色道久久综合亚洲91| 男人天堂av电影| 首页综合国产亚洲丝袜| 日韩视频专区| 成人爱爱电影网址| 精品乱码一区二区三区| 阿v视频在线| 日韩欧美国产不卡| 欧美黄色免费观看| 国产成人亚洲综合a∨猫咪| 黄色网络在线观看| 免费看日产一区二区三区| 久久久国产视频91| 亚洲黄色在线播放| 午夜电影一区二区三区| 国产交换配乱淫视频免费| 久久婷婷av| 伊人色综合久久天天五月婷| 超碰国产精品一区二页| 九九热精品视频| 神马一区二区三区| 色欧美88888久久久久久影院| 日本精品久久久久中文| 精品一区二区三区久久| 成人av在线播放观看| 日韩a级大片| 国产精品wwwwww| 久草中文在线| 亚洲精品电影网站| 精品乱码一区内射人妻无码 | 色999日韩国产欧美一区二区| 国产全是老熟女太爽了| 久久精品二区亚洲w码| 欧美一级爱爱视频| 国产91久久精品一区二区| 成人性生交大片免费观看嘿嘿视频| 91中文在线| 99久久这里有精品| 欧美肥胖老妇做爰| 日韩女优在线观看| 国产精品久久三区| 亚洲一区二区在线免费| 日韩av一级片| 精品国产一区二区三区无码| 国产欧美一区二区三区精品观看| 亚洲va国产va天堂va久久| 天堂电影一区| 麻豆一区二区在线观看| 欧美婷婷久久五月精品三区| 777色狠狠一区二区三区| 国产成人无码精品亚洲| 国产精品久久毛片| 国产精品无码永久免费不卡| 韩国女主播成人在线观看| 国产精品动漫网站| 欧美日本不卡高清| 亚洲v欧美v另类v综合v日韩v| 大桥未久女教师av一区二区| 国产精品永久免费观看| 国产乱码午夜在线视频| 久久韩剧网电视剧| 国产小视频在线观看| 精品成人一区二区三区| 999av视频| 欧美亚洲国产怡红院影院| 日本一二三区视频| 一区二区三区在线观看动漫| 手机免费观看av| 久久综合国产精品| 国产女人18毛片水真多18| 国产一区在线观看麻豆| 在线观看免费成人av| 国产视频欧美| 成人网站免费观看入口| 午夜电影亚洲| 福利在线小视频| 91精品综合久久久久久久久久久 | 国产精品1234| 国产直播在线| 98视频在线噜噜噜国产| 国内在线免费视频| 久久影视免费观看| 国产淫片在线观看| 久久激情视频久久| 精品欧美色视频网站在线观看| 中文字幕免费精品一区| av在线免费观看网| 在线观看欧美日韩| av男人的天堂在线| 最近2019年好看中文字幕视频| 免费黄色在线视频网站| 亚洲欧美国内爽妇网| 豆国产97在线| 91制片在线观看| 久久免费视频在线观看| 91超碰在线| 97视频在线播放| 少妇淫片在线影院| 欧美一区二区三区…… | 91久久久久久| 国产精品一区二区精品| 亚洲一区二区三区在线视频 | 美女视频黄频大全不卡视频在线播放| 日韩在线第三页| 免费观看一级特黄欧美大片| 九九热99视频| 国产在线播精品第三| 中文字幕 欧美 日韩| 成人午夜电影久久影院| 亚洲制服丝袜在线播放| 久久品道一品道久久精品| 国产肥白大熟妇bbbb视频| 国产精品久久久久影院色老大| av最新在线观看| 一区二区三区在线看| 久久夜色精品亚洲| 色琪琪一区二区三区亚洲区| 91成品人影院| 精品国精品国产| 青青青草原在线| 中文字幕日韩欧美在线 | 91成人在线观看国产| 欧美第一视频| 91精品视频免费看| 黄色美女久久久| 日韩久久不卡| 欧美在线高清| 美女福利视频在线| 国产在线精品不卡| 加勒比一区二区| 亚洲女子a中天字幕| 天天操天天摸天天干| 在线观看区一区二| 午夜久久久久久久久久| 亚洲欧美国产一本综合首页| 国产三区在线观看| 秋霞av国产精品一区| 亚洲女人天堂网| 亚洲欧美在线播放| 久久久久久久影视| 久久手机免费视频| 天堂av中文在线观看| 国产精品自在线| 成人性生交大片免费看中文视频| 欧美精品在线一区| 可以免费看毛片的网站| 亚洲精品国精品久久99热一| 欧美一区二区三区四区五区六区 | 欧美日韩一区成人| 高h调教冰块play男男双性文| 亚洲深夜福利视频| 国产精品一区hongkong| 国产精品吴梦梦| 亚洲成在人线免费观看| 久久天天东北熟女毛茸茸| 久久先锋影音| 天天躁日日躁狠狠躁免费麻豆| 国产精品美女久久久久久 | 欧美日本乱大交xxxxx| 亚洲人成色777777老人头| 欧美美女操人视频| 韩国理伦片久久电影网| 欧美日韩精品免费看| 国产专区一区| 日本高清免费在线视频| 国产色综合久久| 日本免费观看视| 欧美成人video| a篇片在线观看网站| 国产精品视频午夜| 中文字幕亚洲影视| 给我免费播放片在线观看| 国产91丝袜在线观看| www欧美com| 欧美蜜桃一区二区三区 | 色综合老司机第九色激情| 日韩福利影视| 亚洲欧洲一二三| 日本午夜一本久久久综合| 3d动漫精品啪啪一区二区下载| 亚洲国产精品自拍| 亚洲第一页视频| 麻豆国产精品va在线观看不卡| 亚洲青青一区| 曰韩不卡视频| 久久99精品网久久| 免费国产羞羞网站美图| 欧美电影影音先锋| 日本视频不卡| 91精品国产综合久久香蕉922| 全球成人免费直播| 成人国产精品一区二区| 精品国内自产拍在线观看视频| 131美女爱做视频| 99在线精品免费| 免费黄色网址在线| 亚洲视频在线观看免费| 亚洲承认视频| 亚洲 国产 日韩 综合一区| 蜜臀精品一区二区三区在线观看 | 福利片在线看| 国产专区精品视频| 66国产精品| 波多野吉衣在线视频| 五月天亚洲婷婷| 蜜桃成人在线视频| 国产精品久久久久久久天堂| 日韩欧美网站| 91欧美一区二区三区| 亚洲精品视频在线观看免费 | 91国产一区| 国产精品对白一区二区三区| 亚洲一级影院| 狠狠人妻久久久久久综合蜜桃| 欧美性猛xxx| 一区二区三区视频网站 | 麻豆一区二区| 久久精品午夜福利| 国产精品久久久久7777按摩| 精品人妻一区二区三区换脸明星| 久久久亚洲天堂| 少妇精品久久久一区二区| 手机版av在线| 亚洲制服丝袜一区| 可以在线观看的av| 成人女保姆的销魂服务| 精品动漫一区| 中文字幕有码在线播放| 88在线观看91蜜桃国自产| 白浆在线视频| 天堂精品一区二区三区| 国产乱码一区二区三区| 天天综合天天干| 精品国产一区二区在线 | 国产一区二区三区黄视频| 国产91av视频| 中文字幕亚洲一区二区三区五十路| 日本精品国产| 黄色片一级视频| 一区2区3区在线看| av资源网站在线观看| 99re国产| 欧美a一区二区| 精品午夜福利视频| 中文字幕欧美视频在线| 人妖一区二区三区| 亚洲综合中文网| 欧美视频一区在线观看| 黄色aa久久| 欧美做暖暖视频|