文章目录:
- 1、linux 内存管理 代码分析
- 2、如何通过阅读linux源代码深入学习linux内存子系统?
- 3、linux内存管理的源文件都放在哪些文件夹里?
- 4、如何编写一个内存管理程序 linux
- 5、linux中的内存管理方法
- 6、关于Linux-0.11内核_段页内存管理的问题
linux 内存管理 代码分析
你可以参考一下这个网页里面说的
你是满意呢?满意呢?还是满意呢!!!
如何通过阅读linux源代码深入学习linux内存子系统?
首先,对linux的内存要有整体认识:建议看《深入理解linux内核》,英文好的看原版,没有完全理解不要急,毕竟操作系统没有那么容易学。
其次,导致linux内存管理机制复杂的原因在于Intel的体系结构不断要向前兼容,导致段式管理等一些不易理解的概念产生。建议看《独辟蹊径品内核 linux内核源代码导读》的前部分,在硬件体系结构上理解linux内存管理的演化。
第三,阅读源代码:建议看《linux内核源代码情景分析》。
linux内存管理的源文件都放在哪些文件夹里?
不建议你看2.6版本的源代码,太多了,多到谁都看不完……
可以选择0.11版或者0.12版看看,虚拟内存的章节在0.11版的 src/mm文件夹下
最后推荐赵炯博士的linux内核完全剖析 这本书,针对0.11版,基本原理变化不是很大……
如何编写一个内存管理程序 linux
如果你是要编程整个内存管理程序,那么你应该先看下Linux源码中的memory.c文件,因为你至少得知道别人是如何实现基本的内存管理函数,然后才是根据自己想法去编写自己的程序。否则估计是下不了手的。建议可以看看csdn上的各种有关内存管理的博客
linux中的内存管理方法
区别于Windows的内存管理。主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间。换句话说,每增加一些物理内存,Linux都将能充分利用起来,发挥了硬件投资带来的好处,而Windows只将其做为摆设,即使增加8GB甚至更大。
关于Linux-0.11内核_段页内存管理的问题
实际上,分段和分页在某种程度上有点沉余,因为它们都可以划分进程的物理地址空间:分段可以给每个进程分配不同的线性地址空间,而分页可以把同一线性地址空间映射到不同的物理空间。采用分页机制后,就没必要再将进程分配到不同的线性地址空间。但Linux-0.11版通过共享页目录和线性地址分段,利用了分段机制,即采用段页机制。0.99及以后的版本中不再共享页目录,不再对线性地址分段,使每个进程都拥有4GB线性空间,逻辑地址=线性地址,巧妙的“绕过了”分段机制,即采用分页机制。
Linux-0.11采用段页机制,具体如下:
内存物理地址0处开始放着一页页目录表和四页页表。这一个页目录表是所有进程共享的。其后的四页页表正好映射16M物理内存,是进程0的页表。以后创建进程时页表要从主内存区申请,而页目录项直接从页目录表中取。这样进程和页目录表页存在一一对应关系,任务号为nr的进程,对应页目录的第nr*16 ~ (nr+1)*16一共16个目录项。共有1K*1K*4K=4G的线性空间。这4G的线性空间由64个进程共享,通过对线性地址进行分段,每个进程都有64MB的线性空间,这样每个进程都会有16个连续的页目录项。
要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间。换句话
程共享,通过对线性地址进行分段,每个进程都有64MB的线性空间,这样每个进程都会有16个连续的页目录项。