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

帶你了解內核如何管理內存

系統 Linux
在學習了進程的 虛擬地址布局 之后,讓我們回到內核,來學習它管理用戶內存的機制。Linux 進程在內核中是作為進程描述符 task_struct (LCTT 譯注:它是在 Linux 中描述進程完整信息的一種數據結構)的實例來實現的。

[[221177]]

在學習了進程的 虛擬地址布局 之后,讓我們回到內核,來學習它管理用戶內存的機制。這里再次使用 Gonzo:

Linux kernel mm_struct

Linux kernel mm_struct

Linux 進程在內核中是作為進程描述符 task_struct (LCTT 譯注:它是在 Linux 中描述進程完整信息的一種數據結構)的實例來實現的。在 task_struct 中的  mm  域指向到內存描述符mm_struct 是一個程序在內存中的執行摘要。如上圖所示,它保存了起始和結束內存段,進程使用的物理內存頁面的 數量(RSS 常駐內存大小Resident Set Size )、虛擬地址空間使用的 總數量、以及其它片斷。 在內存描述符中,我們可以獲悉它有兩種管理內存的方式:虛擬內存區域集和頁面表。Gonzo 的內存區域如下所示:

Kernel memory descriptor and memory areas

Kernel memory descriptor and memory areas

每個虛擬內存區域(VMA)是一個連續的虛擬地址范圍;這些區域絕對不會重疊。一個 vmareastruct 的實例完整地描述了一個內存區域,包括它的起始和結束地址,flags 決定了訪問權限和行為,并且 vm_file 域指定了映射到這個區域的文件(如果有的話)。(除了內存映射段的例外情況之外,)一個 VMA 是不能匿名映射文件的。上面的每個內存段(比如,堆、棧)都對應一個單個的 VMA。雖然它通常都使用在 x86 的機器上,但它并不是必需的。VMA 也不關心它們在哪個段中。

一個程序的 VMA 在內存描述符中是作為 mmap 域的一個鏈接列表保存的,以起始虛擬地址為序進行排列,并且在 mm_rb 域中作為一個 紅黑樹 的根。紅黑樹允許內核通過給定的虛擬地址去快速搜索內存區域。在你讀取文件 /proc/pid_of_process/maps 時,內核只是簡單地讀取每個進程的 VMA 的鏈接列表并顯示它們

在 Windows 中,EPROCESS 塊大致類似于一個 taskstruct 和 mmstruct 的結合。在 Windows 中模擬一個 VMA 的是虛擬地址描述符,或稱為 VAD;它保存在一個 AVL 樹 中。你知道關于 Windows 和 Linux 之間最有趣的事情是什么嗎?其實它們只有一點小差別。

4GB 虛擬地址空間被分配到頁面中。在 32 位模式中的 x86 處理器中支持 4KB、2MB、以及 4MB 大小的頁面。Linux 和 Windows 都使用大小為 4KB 的頁面去映射用戶的一部分虛擬地址空間。字節 0-4095 在頁面 0 中,字節 4096-8191 在頁面 1 中,依次類推。VMA 的大小 必須是頁面大小的倍數 。下圖是使用 4KB 大小頁面的總數量為 3GB 的用戶空間:

4KB Pages Virtual User Space

4KB Pages Virtual User Space

處理器通過查看頁面表去轉換一個虛擬內存地址到一個真實的物理內存地址。每個進程都有它自己的一組頁面表;每當發生進程切換時,用戶空間的頁面表也同時切換。Linux 在內存描述符的 pgd 域中保存了一個指向進程的頁面表的指針。對于每個虛擬頁面,頁面表中都有一個相應的頁面表條目(PTE),在常規的 x86 頁面表中,它是一個簡單的如下所示的大小為 4 字節的記錄:

x86 Page Table Entry (PTE) for 4KB page

x86 Page Table Entry (PTE) for 4KB page

Linux 通過函數去 讀取 和 設置  PTE 條目中的每個標志位。標志位 P 告訴處理器這個虛擬頁面是否物理內存中。如果該位被清除(設置為 0),訪問這個頁面將觸發一個頁面故障。請記住,當這個標志位為 0 時,內核可以在剩余的域上做任何想做的事。R/W 標志位是讀/寫標志;如果被清除,這個頁面將變成只讀的。U/S 標志位表示用戶/超級用戶;如果被清除,這個頁面將僅被內核訪問。這些標志都是用于實現我們在前面看到的只讀內存和內核空間保護。

標志位 D 和 A 用于標識頁面是否是“臟的”或者是已被訪問過。一個臟頁面表示已經被寫入,而一個被訪問過的頁面則表示有一個寫入或者讀取發生過。這兩個標志位都是粘滯位:處理器只能設置它們,而清除則是由內核來完成的。最終,PTE 保存了這個頁面相應的起始物理地址,它們按 4KB 進行整齊排列。這個看起來不起眼的域是一些痛苦的根源,因為它限制了物理內存最大為 4 GB。其它的 PTE 域留到下次再講,因為它是涉及了物理地址擴展的知識。

由于在一個虛擬頁面上的所有字節都共享一個 U/S 和 R/W 標志位,所以內存保護的最小單元是一個虛擬頁面。但是,同一個物理內存可能被映射到不同的虛擬頁面,這樣就有可能會出現相同的物理內存出現不同的保護標志位的情況。請注意,在 PTE 中是看不到運行權限的。這就是為什么經典的 x86 頁面上允許代碼在棧上被執行的原因,這樣會很容易導致挖掘出棧緩沖溢出漏洞(可能會通過使用 return-to-libc 和其它技術來找出非可執行棧)。由于 PTE 缺少禁止運行標志位說明了一個更廣泛的事實:在 VMA 中的權限標志位有可能或可能不完全轉換為硬件保護。內核只能做它能做到的,但是,最終的架構限制了它能做的事情。

虛擬內存不保存任何東西,它只是簡單地  映射  一個程序的地址空間到底層的物理內存上。物理內存被當作一個稱之為物理地址空間的巨大塊而由處理器訪問。雖然內存的操作涉及到某些總線,我們在這里先忽略它,并假設物理地址范圍從 0 到可用的最大值按字節遞增。物理地址空間被內核進一步分解為頁面幀。處理器并不會關心幀的具體情況,這一點對內核也是至關重要的,因為,頁面幀是物理內存管理的最小單元。Linux 和 Windows 在 32 位模式下都使用 4KB 大小的頁面幀;下圖是一個有 2 GB 內存的機器的例子:

Physical Address Space

Physical Address Space

在 Linux 上每個頁面幀是被一個 描述符 和 幾個標志 來跟蹤的。通過這些描述符和標志,實現了對機器上整個物理內存的跟蹤;每個頁面幀的具體狀態是公開的。物理內存是通過使用 Buddy 內存分配 (LCTT 譯注:一種內存分配算法)技術來管理的,因此,如果一個頁面幀可以通過 Buddy 系統分配,那么它是未分配的(free)。一個被分配的頁面幀可以是匿名的、持有程序數據的、或者它可能處于頁面緩存中、持有數據保存在一個文件或者塊設備中。還有其它的異形頁面幀,但是這些異形頁面幀現在已經不怎么使用了。Windows 有一個類似的頁面幀號(Page Frame Number (PFN))數據庫去跟蹤物理內存。

我們把虛擬內存區域(VMA)、頁面表條目(PTE),以及頁面幀放在一起來理解它們是如何工作的。下面是一個用戶堆的示例:

Physical Address Space

Physical Address Space

藍色的矩形框表示在 VMA 范圍內的頁面,而箭頭表示頁面表條目映射頁面到頁面幀。一些缺少箭頭的虛擬頁面,表示它們對應的 PTE 的當前標志位被清除(置為 0)。這可能是因為這個頁面從來沒有被使用過,或者是它的內容已經被交換出去了。在這兩種情況下,即便這些頁面在 VMA 中,訪問它們也將導致產生一個頁面故障。對于這種 VMA 和頁面表的不一致的情況,看上去似乎很奇怪,但是這種情況卻經常發生。

一個 VMA 像一個在你的程序和內核之間的合約。你請求它做一些事情(分配內存、文件映射、等等),內核會回應“收到”,然后去創建或者更新相應的 VMA。 但是,它 并不立刻 去“兌現”對你的承諾,而是它會等待到發生一個頁面故障時才去 真正 做這個工作。內核是個“懶惰的家伙”、“不誠實的人渣”;這就是虛擬內存的基本原理。它適用于大多數的情況,有一些類似情況和有一些意外的情況,但是,它是規則是,VMA 記錄 約定的 內容,而 PTE 才反映這個“懶惰的內核”  真正做了什么。通過這兩種數據結構共同來管理程序的內存;它們共同來完成解決頁面故障、釋放內存、從內存中交換出數據、等等。下圖是內存分配的一個簡單案例:

Example of demand paging and memory allocation

Example of demand paging and memory allocation

當程序通過 brk() 系統調用來請求一些內存時,內核只是簡單地 更新 堆的 VMA 并給程序回復“已搞定”。而在這個時候并沒有真正地分配頁面幀,并且新的頁面也沒有映射到物理內存上。一旦程序嘗試去訪問這個頁面時,處理器將發生頁面故障,然后調用 dopagefault()。這個函數將使用 find_vma() 去  搜索 發生頁面故障的 VMA。如果找到了,然后在 VMA 上進行權限檢查以防范惡意訪問(讀取或者寫入)。如果沒有合適的 VMA,也沒有所嘗試訪問的內存的“合約”,將會給進程返回段故障。

找到了一個合適的 VMA,內核必須通過查找 PTE 的內容和 VMA 的類型去處理故障。在我們的案例中,PTE 顯示這個頁面是 不存在的。事實上,我們的 PTE 是全部空白的(全部都是 0),在 Linux 中這表示虛擬內存還沒有被映射。由于這是匿名 VMA,我們有一個完全的 RAM 事務,它必須被 doanonymouspage() 來處理,它分配頁面幀,并且用一個 PTE 去映射故障虛擬頁面到一個新分配的幀。

有時候,事情可能會有所不同。例如,對于被交換出內存的頁面的 PTE,在當前(Present)標志位上是 0,但它并不是空白的。而是在交換位置仍有頁面內容,它必須從磁盤上讀取并且通過 doswappage() 來加載到一個被稱為 major fault 的頁面幀上。

這是我們通過探查內核的用戶內存管理得出的前半部分的結論。在下一篇文章中,我們通過將文件加載到內存中,來構建一個完整的內存框架圖,以及對性能的影響。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2023-03-31 08:16:53

Flutter優化內存管理

2011-07-28 11:12:25

Cocoa 內存

2017-11-02 09:30:00

Linux內核開發2017版

2018-12-06 10:40:50

磁盤緩存內存

2020-03-03 13:37:23

SSH密鑰管理工具開源工具

2025-02-14 09:53:50

2022-09-26 11:30:40

MQTT協議客戶端協議

2018-08-23 16:51:40

Linux軟件倉庫包管理器

2019-09-27 09:40:06

ElvishShellLinux

2010-07-05 16:20:32

NetBEUI協議

2021-08-12 14:19:14

Slice數組類型內存

2025-01-06 08:00:09

2018-05-22 14:34:50

編譯Linux內核

2020-12-31 12:16:49

SAP云計算SAP產品

2021-02-03 16:22:43

新基建SAP

2021-05-31 14:22:56

物聯網物聯網安全

2021-12-10 10:29:07

在線客服系統

2010-09-02 16:59:35

資源預留協議

2019-11-05 10:18:04

RPM包RPMLinux

2011-08-01 11:37:41

iPhone Objective- 內存
點贊
收藏

51CTO技術棧公眾號

91视频免费看片| 一级做a爰片久久| 国产精品国产三级国产专区52| 全球av集中精品导航福利| 欧美日韩亚洲精品一区二区三区| 超碰97人人干| 91丨九色丨海角社区| 色综合色综合| 亚洲成人1234| 不卡av免费在线| 日本动漫理论片在线观看网站 | 精品国产影院| 欧美午夜精品一区二区三区| 国产毛片久久久久久国产毛片| 暖暖视频在线免费观看| 国产一区二区日韩精品| 青青草原一区二区| 久久黄色免费视频| 91亚洲自偷观看高清| 精品一区二区三区三区| 麻豆免费在线观看视频| 成人黄色毛片| 精品美女国产在线| 成人免费在线视频播放| 色网站在线看| 久久久久99精品国产片| 国产二区一区| 精品人妻少妇AV无码专区| 久久国产欧美| 91精品国产91久久久久| 免费中文字幕视频| 亚欧美无遮挡hd高清在线视频| 日韩精品中文字幕在线| 亚洲自拍第三页| 日韩不卡免费高清视频| 污片在线观看一区二区| 久草视频这里只有精品| 日本动漫同人动漫在线观看| 中文字幕一区二区三区精华液 | 日本丰满少妇裸体自慰| 99re8这里有精品热视频免费| 欧美日韩精品欧美日韩精品 | 韩国午夜理伦三级不卡影院| 国产国语刺激对白av不卡| 国产主播在线观看| 国产精品豆花视频| 色综合天天综合网国产成人网| 精品国产视频在线观看| 久久久久国产精品| 久久精品视频导航| 久久嫩草捆绑紧缚| 久久精品视频1| av成人免费看| 欧美亚洲禁片免费| 国产理论在线播放| 成人免费一区| 欧美私人免费视频| 污污动漫在线观看| 欧美a视频在线| 8x8x8国产精品| 91网址在线观看精品| 四虎国产精品免费久久| 69av一区二区三区| 2025中文字幕| 久久动漫网址| 国产丝袜一区二区| 日韩女同一区二区三区| 欧美a级成人淫片免费看| 久久精品在线视频| 激情四射综合网| 在线一区视频| 国产ts一区二区| 黄色一区二区视频| 精品一区二区三区香蕉蜜桃| 3d蒂法精品啪啪一区二区免费| 亚洲第一大网站| 99麻豆久久久国产精品免费 | 91高清视频在线免费观看| 国产真实夫妇交换视频| 亚洲少妇在线| 中文字幕一区二区三区欧美日韩 | 亚洲影音先锋| 国产91久久婷婷一区二区| 久久人人爽人人爽人人片av免费| 奇米一区二区三区av| 91在线视频成人| 国产成人无码www免费视频播放| 丁香一区二区三区| 久久久久久久久一区| 成人p站proumb入口| 最好看的中文字幕久久| 成人免费在线网| 美女福利一区二区| 欧美精品久久一区| 丰满岳乱妇一区二区 | 福利电影一区二区三区| 欧洲亚洲一区二区| 在线网址91| 91久久精品网| 国产乱淫av片| 日韩理论片av| 91精品国产免费久久久久久 | 欧美精品一区视频| 亚洲人成人无码网www国产 | 国产精品久久久久四虎| 青青青免费在线| 亚洲高清视频网站| 日韩三级免费| 亚洲成在人线免费| 天天综合网日韩| 国产极品模特精品一二| 中文字幕日韩欧美在线| 日韩精品一区二区不卡| 狠狠v欧美v日韩v亚洲ⅴ| 欧美xxxx黑人又粗又长密月| 中文在线免费| 欧美日韩在线播放一区| 国产福利在线观看视频| 欧美日韩ab| 成人黄色影片在线| 18免费在线视频| 精品久久久国产| 日本wwwwwww| 久久久久电影| 国内精品久久久久影院薰衣草| 成人在线播放av| 欧美日韩视频精品二区| 亚洲在线观看免费| 加勒比av中文字幕| 凹凸成人精品亚洲精品密奴| 538国产精品视频一区二区| www.日韩高清| 亚洲人成7777| www.午夜av| 日韩在线观看电影完整版高清免费悬疑悬疑| 性欧美暴力猛交69hd| 国产精品视频一二区| 国产精品天干天干在观线| 欧美成人黑人猛交| 香蕉视频一区| 欧美孕妇与黑人孕交| 午夜福利理论片在线观看| 香蕉av福利精品导航| 香蕉视频污视频| 影音先锋日韩资源| 波多野结衣久草一区| 在线免费av导航| 日韩欧美国产三级| 久久久久亚洲av无码专区| 国产成人在线视频免费播放| 91精品国产吴梦梦| 粉嫩av国产一区二区三区| 久久视频国产精品免费视频在线 | 日日骚欧美日韩| 欧美久久久久久一卡四| 性欧美videohd高精| 亚洲午夜女主播在线直播| 欧美日韩在线视频播放| 国产精品理论在线观看| 中文字幕亚洲影院| 欧美天堂亚洲电影院在线观看| wwwxx欧美| 日本在线影院| 这里只有精品久久| 国产一区二区自拍视频| 亚洲欧美日韩小说| 91人妻一区二区| 国产亚洲午夜| 亚洲午夜高清视频| 国产精品日本一区二区三区在线| 日韩欧美三级在线| 正义之心1992免费观看全集完整版| 桃子视频成人app| 日韩在线观看免费网站| 国产乱码精品一区二区| 亚洲一二三区视频在线观看| 丰满少妇一区二区三区| 日韩激情一二三区| 青青草原网站在线观看| 国产精品黄网站| 日本aⅴ大伊香蕉精品视频| fc2在线中文字幕| 91精品国产综合久久香蕉麻豆 | 欧美在线观看网址综合| 精品国内片67194| 日韩精品成人一区| 久久奇米777| 亚洲a级黄色片| 黄色成人av网站| 欧美一区二区三区在线免费观看| 懂色aⅴ精品一区二区三区| 欧美大尺度激情区在线播放| 天堂√在线中文官网在线| 欧美日韩一级黄| 免费中文字幕在线观看| 国产女主播视频一区二区| 亚洲911精品成人18网站| 麻豆精品网站| 欧美一区二区三区综合| 北条麻妃国产九九九精品小说| 91国产在线免费观看| 欧美xxx性| 精品自在线视频| 国产一级片在线播放| 欧美大胆一级视频| 亚洲视屏在线观看| 精品久久久久久久久久久久| 91制片厂在线| 久久夜色精品国产欧美乱极品| 天天操精品视频| 日韩精品成人一区二区三区| 欧美一级欧美一级| 亚洲高清影视| 日韩av一区二区三区在线 | 日韩一级免费一区| 波多野结衣视频免费观看| 性感美女久久精品| 青娱乐在线视频免费观看| 国产精品免费看片| 美国黄色a级片| 成人avav影音| 伊人av在线播放| 国内外成人在线视频| 日韩精品视频在线观看免费| 好看的av在线| 亚洲一区二区视频在线观看| 国产成人精品视频免费| 91麻豆国产自产在线观看| 绯色av蜜臀vs少妇| 国产主播一区二区| 邪恶网站在线观看| 日韩一区精品视频| 欧美极品欧美精品欧美图片| 亚洲欧洲一区| 日韩精品在线中文字幕| 国产一区二区三区免费视频| www.97超碰| 欧美精品久久久久久久久老牛影院| 国产黄色免费观看| 午夜精品在线看| 中文字幕乱码一区二区三区| 欧美aaaaa级| 国产欧美日韩一区| 88久久精品| av电影成人| 涩爱av色老久久精品偷偷鲁 | 国产一区二区三区在线观看| 欧美自拍偷拍一区| 中文字幕久久久久| 在线观看日韩精品| 国产精品露脸视频| 欧美乱妇23p| av一级黄色片| 日韩午夜激情av| 色777狠狠综合秋免鲁丝| xxxx日本黄色| 91小视频免费观看| 日本xxx在线播放| 91蜜桃免费观看视频| 深爱五月激情网| 国产亚洲成年网址在线观看| 狠狠狠色丁香婷婷综合久久五月| 国产精品精品一区二区三区午夜版 | 久热这里只精品99re8久| 国产欧美自拍一区| 免费观看成人高| 日韩在线中文| av日韩在线看| 尹人成人综合网| 中文字幕乱码人妻综合二区三区| 三级影片在线观看欧美日韩一区二区| 国产裸体免费无遮挡| 美女视频网站黄色亚洲| av亚洲天堂网| 国产激情视频一区二区三区欧美 | 日韩精品日韩在线观看| 手机在线精品视频| 亚洲欧洲xxxx| caopen在线视频| 欧美精品video| 久久野战av| 2014亚洲精品| 欧洲专线二区三区| 日本黄色播放器| 亚洲国产高清视频| 日韩不卡一二三| 成人午夜在线免费| 国产人妻一区二区| 亚洲欧美aⅴ...| 亚洲成人av影片| 日韩欧美国产三级电影视频| 国产综合在线观看| 欧美日韩电影在线观看| 亚洲精品在线影院| 国产伦精品一区二区三区免 | 97视频在线免费播放| 久久99蜜桃精品| 国产福利在线观看视频| 亚洲欧美一区二区三区国产精品| 尤物视频在线观看国产| 欧美日韩国产综合一区二区| 色婷婷av一区二区三| 日韩专区在线观看| 一区二区三区短视频| 亚洲在线视频福利| 激情婷婷综合| 极品粉嫩国产18尤物| 精品一区二区精品| 免费人成又黄又爽又色| 亚洲成人自拍网| 国产日韩欧美一区二区东京热| 亚洲欧美国产日韩天堂区| 羞羞网站在线免费观看| 国产日韩欧美综合| 精品在线播放| 欧美日本视频在线观看| 国产福利精品一区| 一本一本久久a久久| 色视频一区二区| 午夜激情小视频| 久久久久久久久久久人体| 久久伊人影院| 影音欧美亚洲| 蜜桃av噜噜一区| 91精品久久久久久久久久久久| 精品露脸国产偷人在视频| 黄色av免费观看| 欧美激情精品久久久久久大尺度| 8av国产精品爽爽ⅴa在线观看 | www.久久热.com| 欧美在线性视频| 全国精品免费看| 免费无码不卡视频在线观看| 国产91精品入口| 毛片a片免费观看| 日韩一级黄色大片| 99自拍视频在线观看| 91欧美精品午夜性色福利在线 | 麻豆国产精品va在线观看不卡| 成人在线黄色| 视频一区视频二区视频三区高| 美女诱惑一区| 一级特黄曰皮片视频| 欧洲一区二区av| aiai在线| 成人网在线免费看| 亚洲有吗中文字幕| 男插女视频网站| 亚洲一区二区三区三| 亚洲性生活网站| jizz亚洲女人高潮大叫| av免费观看久久| 很黄很黄激情成人| 黄色免费看视频| 欧美性极品xxxx娇小| 国产午夜视频在线观看| 国产精品日韩专区| 亚洲经典一区| 一级全黄裸体片| 亚洲成人久久影院| 天天躁日日躁狠狠躁喷水| 欧美做受高潮1| 欧美亚洲国产一区| 久久久久久综合网| 尤物视频一区二区| 日本美女一级片| 欧美最猛性xxxxx免费| 久久视频在线| 成年人性生活视频| 黄色一区二区在线| 国产免费av高清在线| 91日本在线视频| 激情五月***国产精品| 午夜性福利视频| 污片在线观看一区二区| 91亚洲欧美| 国产精品国产精品国产专区蜜臀ah| 亚洲视频成人| 日日操免费视频| 精品国产人成亚洲区| 日韩另类视频| 欧美一区二区三区喷汁尤物| 亚洲欧美综合另类| 亚洲天堂色网站| 国产一区二区三区黄网站| 国产精品入口芒果| 久久久国产精品麻豆| 99久久精品无免国产免费| 911国产网站尤物在线观看| 日韩国产一区二区| 一边摸一边做爽的视频17国产| 色婷婷av久久久久久久| 97影院秋霞午夜在线观看| 国产精品中文| 欧美xxxx黑人又粗又长密月| 日韩二区三区四区| www.超碰在线观看| 亚洲精品中文字幕av| 不卡一区视频| 黄色片久久久久|