文章来源——博客园绿色冰点前几次我们分析了Linux系统中用户进程的4G虚存大致分为了几个部分,介绍了3G用户空间中数据段,代码段等静态区域的虚存管理,重点分析了栈的使用。这次我们来分析一下虚存使用中另一个重要部分--堆。前面的介绍中,我们知道编译器,操作系统担负着大量栈分配管理的工作。不论是静态分...
分类:
系统相关 时间:
2014-07-07 18:29:08
阅读次数:
203
【虚拟内存管理】
每个进程对应一个task结构,它指向一个mm结构,这就是该进程的内存管理器。mm->pdg指向容纳页表的内存,每个进程都有自己的mm,每个mm都有自己的页表。用户程序对内存的操作(分配、回收、映射等)都是对mm的操作,具体来说是对mm上的vma(虚拟内存空间)的操作。这些vma代表这进程的各个区域,比如堆、栈、代码区、数据区、各种映射区等等。用户程序对内存的操作并不会直接影响页...
分类:
系统相关 时间:
2014-06-08 18:30:12
阅读次数:
420
Linux的内存管理主要分为两部分:物理地址到虚拟地址的映射,内核内存分配管理(主要基于slab)。物理地址到虚拟地址之间的映射1、概念
物理地址(physical address)
用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相相应。——这个概念应该是这几个概念中最好理解的一个,可.....
分类:
系统相关 时间:
2014-05-28 02:42:53
阅读次数:
460
在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这方面,区别于Windows的内存管理。主要特点是,无论物理内存有多大,Linux都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提...
分类:
系统相关 时间:
2014-05-24 04:38:38
阅读次数:
307
前言
前一篇我们介绍了内存管理中的分页试内存管理,分页的主要作用就是使得每个进程有一个独立的,完整的内存空间,通过虚拟内存技术,使得程序可以在较小的内存上运行,而进程之间内存空间相互独立,提高了安全性。这一篇将主要介绍内存管理中分段管理,以及两种的结合,也是目前计算机普遍采用的段页试内存管理。这也直接决定了的后面程序的编译,加载以及允许时的内存布局。
1. 分段...
分类:
其他好文 时间:
2014-05-22 07:58:31
阅读次数:
327
linux 引入了 Node的概念7 bootmem_data_t
bootmem_node_data[MAX_NUMNODES] __initdata其中MAX_NUMNODES0005 #ifdef
CONFIG_NODES_SHIFT0006 #define NODES_SHIFT C...
分类:
系统相关 时间:
2014-05-19 11:32:43
阅读次数:
298
[地址映射](图:左中)linux内核使用页式内存管理,应用程序给出的内存地址是虚拟地址,它需要经过若干级页表一级一级的变换,才变成真正的物理地址。想一下,地址映射还是一件很恐怖的事情。当访问一个由虚拟地址表示的内存空间时,需要先经过若干次的内存访问,得到每一级页表中用于转换的页表项(页表是存放在内...
分类:
系统相关 时间:
2014-05-17 23:37:26
阅读次数:
476
内存管理是内核最复杂同时也是最重要的一部。其特点在于非常需要处理器和内核之间的协作。首先内存划分为结点,在内核中表示为pg_data_t,每个结点划分为内存域。 以下的所有数据结构或代码都做了不同程度的精减,一方面是为了保留相关代码,除去细枝末叶,另一方面是为了美观。 结点的数据结构为typedef...
分类:
系统相关 时间:
2014-05-17 04:52:23
阅读次数:
422
unsigned long get_free_page(void)
{
register unsigned long __res asm("ax");
repeat:
__asm__("std ; repne ; scasb\n\t"
"jne 1f\n\t"
"movb $1,1(%%edi)\n\t"
"sall $12...
分类:
系统相关 时间:
2014-05-07 05:38:18
阅读次数:
515