歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux教程:內核怎樣管理你的內存

Linux教程:內核怎樣管理你的內存

日期:2017/2/28 15:55:28   编辑:Linux教程

在分析了進程的虛擬地址布局,我們轉向內核以及他管理用戶內存的機制。下圖是gonzo的例子:

Linux進程在內核中是由task_struct進程描述符實現的,task_struct的mm字段指向內存描述符mm_struct,他是進程的一個內存執行摘要。如上圖所示,mm_struct存儲了內存各個段的開始和結束地址、進程所使用的內存頁面數(rss代表常駐集合大小)、使用的虛擬地址空間總數等等。在內存描述符中我們也可以找到兩個用於管理進程內層的字段:虛擬內存集合和頁表。Gonzo的內存區域如下圖:

每個虛擬內存區域(VMA)是一個虛擬地址空間上連續的區域;這些區域不會彼此覆蓋。Vm_area_struct結構描述了一個內存區域,包括他的開始和技術地址、flags字段指定了他的行為和訪問權限,vm_file字段指定了該區域映射的實際文件。一個沒有映射文件的VMA成為匿名的。除了內存映射段以外,上面的每個內存段(堆、棧等等)相當於一個單獨的VMA。這不是必須的,盡管在x86機器上通常是這樣。VMA不會關心他在哪個段裡面。

Copyright © Linux教程網 All Rights Reserved