图解 Linux 内存管理 -- 线性空间与物理内存

转载 2007年09月14日 17:39:00
图解 Linux 内存管理 -- 线性空间与物理内存
 
 




上图反映了如下信息:

 

1、  进程的4G 线性空间被划分成三个部分:进程空间(0-3G)、内核直接映射空间(3G – high_memory)、内核动态映射空间(VMALLOC_START  -  VMALLOC_END

2、  三个空间使用同一张页目录表,通过 CR3 可找到此页目录表。但不同的空间在页目录表中页对应不同的项,因此互相不冲突

3、  内核初始化以后,根据实际物理内存的大小,计算出 high_memoryVMALLOC_STARTVMALLOC_END 的值。并为“内核直接映射”空间建立好映射关系,所有的物理内存都可以通过此空间进行访问。

4、  “进程空间”和“内核动态映射空间”的映射关系是动态建立的(通过缺页异常)

 

假设在有三个线性地址 addr1, addr2, addr3 ,分别属于三个线性空间,但是最终都映射到物理页面1

1、  三个地址对应不同的页表和页表项

2、  但是页表项的高 20bit 肯定是1,表示物理页面的索引号是1

3、  同时,根据高 20 bit,可以从 mem_map[] 中找到对应的 struct page 结构,struct page 用于管理实际的物理页面(红线)

4、  从线性地址,根据页目录表,页表,可以找到物理地址

5、  Struct page 和物理地址之间很容易互相转换

6、  从物理地址,可以很容易的反推出在内核直接映射空间的线性地址(蓝线)。要想得到在进程空间或者内核动态映射空间的对应的线性地址,则需要遍历相应的“虚存区间”链表。

 

关于页目录表:

       

1、  每个进程有一个属于自己的页目录表,可通过 CR3 寄存器找到

2、  而内核也有一个独立于其它进程的页目录表,保存在 swapper_pg_dir[] 数组中

3、  当进程切换的时候,只需要将新进程的页目录把地址加载到 CR3 寄存器中即可

4、  创建一个新进程的时候,需要为它分配一个 page,作为页目录表,并将 swapper_pg_dir[] 的高 256 项拷贝过来,低 768 项则清0

 原文地址 http://blog.csdn.net/rstevens/archive/2007/08/27/1760907.aspx
 TAG linux 内存模型
 

图解 Linux 内存管理 -- 线性空间与物理内存

上图反映了如下信息: 1、进程的4G 线性空间被划分成三个部分:进程空间(0-3G)、内核直接映射空间(3G – high_memory)、内核动态映射空间(VMALLOC_START - VMAL...
  • fivedoumi
  • fivedoumi
  • 2011年12月08日 11:36
  • 632

Linux 内存管理 -- 线性空间与物理内存

上图反映了如下信息:1、 进程的4G 线性空间被划分成三个部分:进程空间(0-3G)、内核直接映射空间(3G – high_memory)、内核动态映射空间(VMALLOC_START - VMALL...
  • adcxf
  • adcxf
  • 2008年10月05日 10:01
  • 1639

Linux物理内存管理概述

在内核态申请内存比在用户态申请内存要更为直接,它没有采用用户态那种延迟分配内存技术。内核认为一旦有内核函数申请内存,那么就必须立刻满足该申请内存的请求,并且这个请求一定是正确合理的。相反,对于用户态申...
  • sun_z_x
  • sun_z_x
  • 2015年07月06日 13:15
  • 784

线性空间与物理内存

图解 Linux 内存管理 -- 线性空间与物理内存2008-06-26 23:53(ZT)  上图反映了如下信息: 1、进程的4G 线性空间被划分成三个部分:进程空间(0-3G)、内核直接映射空间(...
  • zhw888888
  • zhw888888
  • 2010年12月10日 14:46
  • 360

linux内存管理之内核对物理内存的描述

Linux将物理内存按固定大小的页面(一般为4K)划分内存,在内核初始化时,会建立一个全局struct page结构数组mem_map[ ]。如系统中有76G物理内存,则物理内存页面数为76*1024...
  • scaleqiao
  • scaleqiao
  • 2015年07月23日 10:02
  • 1805

Linux 虚拟内存和物理内存的管理

Linux 虚拟内存和物理内存的理解 关于Linux 虚拟内存和物理内存的理解。 首先,让我们看下虚拟内存: 第一层理解 1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 ...
  • hgz_gs
  • hgz_gs
  • 2016年07月16日 10:55
  • 542

深入理解Linux内存管理 - 物理内存

Linux存在于各种体系结构上,所以描述内存需要架构独立的方法。本章会描述用来管理memory bank,页框的数据结构以及那些影响VM行为的flags VM第一个重要的流行概念是Non Unifor...
  • kickxxx
  • kickxxx
  • 2013年02月27日 16:55
  • 8509

linux物理内存管理技术

linux使用伙伴系统来管理物理内存页。 一、伙伴系统原理 1. 伙伴关系 定义:由一个母实体分成的两个各方面属性一致的两个子实体,这两个子实体就处于伙伴关系。在操作系统分配内存的过...
  • qq_26626709
  • qq_26626709
  • 2016年10月06日 10:14
  • 758

物理内存和线性空间

在硬件工程师和普通用户看来,内存就是插在或固化在主板上的内存条,它们有一定的容量——比如64 MB。但在应用程序员眼中,并不过度关心插在主板上的内存容量,而是他们可以使用的内存空间——他们可以开发一个...
  • newjerryj
  • newjerryj
  • 2009年09月29日 13:13
  • 2411

linux内存管理大图

转自:
  • mrwangwang
  • mrwangwang
  • 2014年08月20日 18:10
  • 914
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图解 Linux 内存管理 -- 线性空间与物理内存
举报原因:
原因补充:

(最多只允许输入30个字)