精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲一区二区三区三州| 亚洲精品有码在线| 日本一区二区三不卡| 日韩欧美国产亚洲| 国产成人久久| 欧美日韩一区三区| 18视频在线观看娇喘| 秋霞av鲁丝片一区二区| 久久国产成人| 理论片在线不卡免费观看| 无码人妻精品一区二区三区99不卡| 678在线观看视频| 欧美国产亚洲另类动漫| 亚洲va欧美va国产综合剧情| 欧美日韩精品区| 欧美激情另类| 日韩国产在线看| 中文字幕55页| jizz欧美| 黑人欧美xxxx| 一级黄色录像免费看| 四虎影院在线域名免费观看| 狠狠色丁香久久婷婷综合_中| 97人人模人人爽人人喊中文字| 五月天婷婷丁香网| 国产精品一线| 欧美一级理论片| 91在线视频观看免费| 里番在线播放| 亚洲天堂a在线| 欧洲精品久久| 亚洲av成人精品毛片| 国内精品免费在线观看| 国产精品第8页| 亚洲日本韩国在线| 国产精品99免费看| 久久精品国产欧美激情| 鲁丝一区二区三区| 婷婷亚洲成人| 亚洲国产一区自拍| 久久国产免费视频| 老司机亚洲精品一区二区| 欧美亚洲日本一区| 情侣黄网站免费看| 9lporm自拍视频区在线| 亚洲综合免费观看高清完整版 | 亚洲中文字幕无码av永久| 婷婷在线视频| 国产精品久久久久久亚洲伦 | 五月婷婷伊人网| 成人性视频网站| 91久久精品www人人做人人爽| 亚洲熟妇无码久久精品| 日本成人中文字幕在线视频 | 穿情趣内衣被c到高潮视频| 国产高清一区在线观看| 久久麻豆一区二区| 欧美精品一区二区三区在线看午夜| 欧洲精品久久一区二区| 成人国产电影网| 国产精品一区二区你懂得| 国产黄色高清视频| 国产电影一区在线| 国产高清在线精品一区二区三区| www.xxxx国产| 丁香婷婷综合色啪| 国产精品免费一区二区| 午夜av免费在线观看| 99久久99久久精品免费看蜜桃 | 欧美一级做性受免费大片免费| 国产久卡久卡久卡久卡视频精品| 亚洲va男人天堂| 国产 欧美 自拍| av一区二区三区黑人| 久久青青草原一区二区| 欧美日韩国产亚洲沙发| 亚洲国产高清不卡| 黄色一级视频播放| 成人av影院在线观看| 午夜欧美2019年伦理| 国内外成人激情视频| 欧美日韩免费观看视频| 欧美日韩国产a| 亚洲av无一区二区三区久久| 国产乱人伦精品一区| 亚洲欧美日韩一区二区三区在线| 亚洲AV无码成人精品区明星换面 | 成人免费观看在线| 亚洲色图官网| 欧美日本在线播放| yjizz视频| 欧美日韩国产在线观看网站| 久久成人av网站| 日韩av无码中文字幕| 久久精品麻豆| 18成人在线| 日韩一区二区三区中文字幕| 中文在线免费一区三区高中清不卡| 中文字幕一区综合| 美女搞黄视频在线观看| 欧美色图一区二区三区| 亚洲欧洲日韩综合| 精品国产一区二区三区小蝌蚪| 久久天天躁狠狠躁老女人| 国产无码精品视频| 麻豆一区二区在线| 国产亚洲福利社区| 欧美人xxx| 香蕉乱码成人久久天堂爱免费| 国产精品视频分类| 牛牛影视久久网| 日韩中文字幕精品视频| 久久久久久久极品| 蜜桃一区二区三区在线观看| 国产一区喷水| 黄色网在线播放| 色噜噜狠狠成人中文综合 | 色av性av丰满av| 国产精品一区在线观看乱码| 欧洲高清一区二区| 2019中文字幕在线电影免费| 欧美亚洲禁片免费| 欧美 日本 国产| 国产综合亚洲精品一区二| 国产精品扒开腿做| 亚洲aⅴ乱码精品成人区| 亚洲精品国产视频| 国产精品v日韩精品v在线观看| 久本草在线中文字幕亚洲| 久久九九亚洲综合| 伊人网免费视频| 2欧美一区二区三区在线观看视频| 粉嫩av一区二区三区天美传媒 | 91亚洲精华国产精华| 国产在线电影| 欧美日韩中文字幕在线| 日本久久久久久久久久| 欧美不卡高清| 91久久精品视频| 97电影在线| 欧美伊人精品成人久久综合97 | 日韩无套无码精品| 欧美调教在线| 久久久久女教师免费一区| 国产色视频在线| 日韩理论片中文av| 久久国产激情视频| 91视频一区| 国产欧美日韩高清| 天堂中文8资源在线8| 欧美性受xxxx黑人xyx| 中文字幕在线1| 亚洲一区二区三区高清| 久久草.com| 深夜福利视频一区二区| 亚洲国产女人aaa毛片在线| 精品午夜福利在线观看| 国产mv日韩mv欧美| 久久99久久99精品| 精品精品国产毛片在线看| 久久久久免费精品国产| 精品人妻一区二区三区四区不卡| 国产欧美日韩不卡免费| 亚洲欧美久久久久| 国产精品二区不卡| 7777精品久久久大香线蕉小说| av电影免费在线观看| 日韩欧美的一区二区| 久久久一区二区三区四区| 国产91露脸合集magnet| 热99这里只有精品| 深爱激情久久| 国产精品青草久久久久福利99| 欧美成年黄网站色视频| 日韩欧美高清在线| 国偷自拍第113页| 久久精品欧美日韩精品| 色噜噜狠狠一区二区| 欧美黄免费看| 九九九九精品| 日本精品在线中文字幕| 色999日韩欧美国产| 国产黄频在线观看| 欧美特黄级在线| 亚洲aaa视频| 国产suv精品一区二区6| 91免费视频网站在线观看| 精品日产免费二区日产免费二区| 国产一区私人高清影院| 黑人玩欧美人三根一起进| 日韩电影中文字幕av| 日本一区二区三区久久| 一区二区三区精品视频在线| 熟女人妻在线视频| 久久国内精品自在自线400部| 玖玖精品在线视频| 欧美日韩破处| 亚洲一区二区三区毛片 | 国产精品日韩一区| 中文在线免费| 亚洲人成伊人成综合网久久久| 国产剧情久久久| 欧美午夜无遮挡| 欧美老熟妇一区二区三区| 99精品在线观看视频| 奇米视频888| 欧美亚洲视频| 草草草视频在线观看| 亚洲调教一区| 91嫩草国产在线观看| 国产综合色区在线观看| 日韩在线小视频| 亚洲欧美日韩成人在线| 555夜色666亚洲国产免| 6080午夜伦理| 亚洲成av人片www| 在线观看美女av| 久久一区二区三区国产精品| wwwxxx色| 激情av综合网| 青青在线免费观看视频| 亚洲国产日本| 欧美极品少妇无套实战| 成人影视亚洲图片在线| 欧美激情一区二区三区在线视频 | 日韩av午夜在线观看| 国产中文字幕二区| 欧美~级网站不卡| 一区二区三区四区欧美| 国产精品片aa在线观看| 精品国产乱码久久久久久郑州公司| 99久久久成人国产精品| 国产精品老牛影院在线观看| 亚洲校园激情春色| 26uuu另类亚洲欧美日本老年| 免费污视频在线观看| 久久福利视频网| 免费人成在线观看播放视频| 影音先锋欧美精品| 狠狠v欧美ⅴ日韩v亚洲v大胸| 日韩精品在线私人| 亚洲欧洲国产综合| 亚洲国产精品va在线| 韩国av永久免费| 日韩欧美你懂的| av高清一区二区| 欧美一区二视频| 国产aⅴ一区二区三区| 在线播放一区二区三区| 亚洲天堂国产精品| 欧美日韩一区三区| 91亚洲国产成人精品一区| 在线看日韩精品电影| 国产成人无码av| 91福利精品第一导航| 一级久久久久久| 在线视频欧美精品| 中文字幕乱码在线观看| 欧美日韩在线免费视频| 91激情在线观看| 日韩欧美国产系列| 欧美 日韩 国产 精品| 亚洲国产另类 国产精品国产免费| 婷婷久久久久久| 亚洲色图五月天| 在线视频自拍| 欧美精品在线免费观看| 福利在线导航136| 欧美又大又粗又长| 高清av不卡| 国产自产女人91一区在线观看| 国产精品**亚洲精品| 国产精品日韩欧美一区二区三区| 欧美男人操女人视频| 亚洲成人a**址| 亚洲人metart人体| 久久久久久久久久久99| 丝袜亚洲精品中文字幕一区| 日本人69视频| 成人18精品视频| 欧美熟妇激情一区二区三区| 欧美国产97人人爽人人喊| 欧美色图一区二区| 狠狠躁夜夜躁人人爽超碰91| 国产精品尤物视频| 日韩一级片在线观看| 日韩精品123| 久久精品亚洲国产| a国产在线视频| 国产精品视频xxxx| 欧美影院精品| 欧美精品欧美精品| 欧美激情成人在线| 日韩人妻精品无码一区二区三区| 免费一区二区视频| 白丝校花扒腿让我c| 久久精品综合网| 免费三片在线播放| 欧美亚洲高清一区| 蜜桃久久一区二区三区| 中文字幕av一区二区| 草莓视频丝瓜在线观看丝瓜18| 国产精品美女久久久久久免费| 91九色鹿精品国产综合久久香蕉| 日本免费高清一区| 欧美日韩国产探花| 男操女免费网站| 成人一区二区视频| 成人性生交大片免费看无遮挡aⅴ| 一区二区欧美国产| 中文字幕乱码人妻二区三区| 精品捆绑美女sm三区| √天堂资源地址在线官网| 韩国日本不卡在线| 欧美午夜网站| 一本久久a久久精品vr综合| 亚洲国产日韩在线| wwwxxx色| 亚洲精选免费视频| 夜夜爽8888| 国产一区二区三区日韩欧美| av剧情在线观看| 91丨九色丨国产| 99热国内精品永久免费观看| 白嫩少妇丰满一区二区| 成人av网站免费| 国模无码国产精品视频| 欧美日韩aaaaa| yw在线观看| 国产精品成av人在线视午夜片| 理论片一区二区在线| 97干在线视频| 国产99精品在线观看| 国产av无码专区亚洲av毛网站| 欧美三级视频在线| 成人高清免费观看mv| 国产91免费看片| 窝窝社区一区二区| 99爱视频在线| av午夜精品一区二区三区| 国产在线视频99| 精品国产一区二区三区久久影院| 最新国产露脸在线观看| 亚洲va欧美va国产综合剧情 | 久久国产精彩视频| 国产电影一区| 欧美少妇在线观看| 国产成人在线网站| 久久久久99精品成人片毛片| 日韩一级免费一区| 性直播体位视频在线观看| 亚洲综合中文字幕在线观看| 永久亚洲成a人片777777| 韩国三级丰满少妇高潮| 亚洲免费伊人电影| 99热这里只有精品99| 欧美日韩成人免费| heyzo欧美激情| 每日在线更新av| 久久伊99综合婷婷久久伊| 极品国产91在线网站| 国产一区二区成人| 亚洲伊人伊成久久人综合网| 永久免费网站视频在线观看| 国产精品一区二区不卡| 国产在线综合网| 亚洲精品久久久久| 欧美三区四区| 国产精品av免费| 岛国一区二区三区| 黄色片中文字幕| 中文字幕亚洲一区二区三区| 国产视频一区二区在线播放| 欧美一区二区激情| 久久久99精品免费观看不卡| 这里只有精品6| 欧美激情一二区| 九九热精品视频在线观看| 日本久久久久久久久久久久| 亚洲人成人一区二区在线观看| 人妻无码一区二区三区久久99| 日韩美女在线观看一区| 午夜片欧美伦| 国产激情视频网站| 欧美色图在线观看| 超黄网站在线观看| 亚洲乱码一区二区三区| 高清久久久久久| 国产免费a视频| 久久91精品国产| 欧美极品中文字幕| 久久出品必属精品| 日韩欧美中文字幕在线播放| 黄视频在线观看网站| 久久综合一区| 国产精品综合网| 在线观看污污网站| 欧美激情视频网| 欧美综合另类| 亚洲精品乱码久久|