ChinaUnix.net
相关文章推荐:

linux内存管理代码分析

http://blog.chinaunix.net/uid-25845340-id-3248567.html 由于近半年工作上比较忙,我也将业余时间投到TCP协议栈源码学习上去了,博客更新受到一定影响。抱歉!! linux3.0源代码分析不会停止的,敬请关注。

by xiebaoyou - 内核源码 - 2012-06-23 23:30:29 阅读(2087) 回复(4)

相关讨论

linux内存管理--top下信息的分析 linux内存管理 细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题. 先来说说free命令 [root@server ~]# free -m total used free shared buffers cached Mem: 249 163 86 ...

by djb1008 - Linux文档专区 - 2010-01-13 11:00:33 阅读(1258) 回复(0)

分析linux内存管理的基本概念与实现之后,就可以接着分析用户空间与内核空间的交互操作了。Brk系统调用属于那种常用但是“可见度”不高的操作,常用于用户空间堆的管理(请参阅本站的中的malloc机制分析>>一文)。 Brk在用户空间的接口为int brk(void *end_data_segment)。它通过系统调用进入内核空间。在内核的相应接口为sys_brk(). 闲言少叙,言归正传。转入相应的代码。同以往一样,linux内核代码版本为2.6.21 //sys_brk:用...

by Tom_Chou - Linux文档专区 - 2008-06-07 12:46:20 阅读(786) 回复(0)

------------------------------------------ 本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ ------------------------------------------ 分析linux内存管理的基本概念与实现之后,就可以接着分析用户空间与内核空间的交互操作了。Brk系统调用属于那种常用但是“可见度”不高的操作,常用于用户空间堆的管理(请参阅本站的中的malloc机制分析>>一文)。 Brk在用户空间的接口为int brk(void *end_data_...

by xgr180 - Linux文档专区 - 2008-02-21 17:11:40 阅读(633) 回复(0)

一:准备知识: 前面我们分析过了大内存分配的实现机制,事实上,若为小块内存而请求整个页面,这样对于内存来说是一种极度的浪费。因此linux采用了slab来管理小块内存的分配与释放。Slab最早是由sun的工程师提出。它的提出是基于以下因素考虑的: 1:内核函数经常倾向于反复请求相同的数据类型。比如:创建进程时,会请求一块内存来存放mm结构。 2:不同的结构使用不同的分配方法可以提高效率。同样,如果进程在撤消的时候,内核不...

by xgr180 - Linux文档专区 - 2008-02-01 16:40:02 阅读(773) 回复(0)

如上图所示(标记为阴影的代表空闲块),此时系统将第4个单页表释放到伙伴系统. 首先,它会到相应大小的(2^0)的空闲链表入队.判断相邻块的空闲情况,此时,因为第三个是空闲的,所以可以合并为一块2^1的空闲块.继续判断2^1链中相邻块是否是空闲的,上图中可以将2^1的两个块合成一个大块,然后继续判断2^2中是否可以继续合并,依次类推. 上述代码中,涉及到几个位操作,分析如下: 1:得到相邻块的的起始page: buddy1 = base + (page_idx ^ (1 如...

by thewayma - Linux文档专区 - 2009-10-09 23:00:24 阅读(816) 回复(0)

如上图所示,每一个框表示一个页面,大括号表示相应的位图.我们考虑一下以下几个问题. 1:如何知道页面在相应空闲所在的分配位图位 结合以前讨论的伙伴系统分配位图相关知道,知道空闲区的每一组用一个位表示其分配情况,所以,在2^n的空闲链表中,每一个空闲块是2^n大小,每个位图表示 2*2^n个页.在zone中序号为index的页在2^n空闲链中相应的位图是 index/2*2^n = index>>(n+1).如上图中2^0空闲链中,1,2属于第一个位,3,4属于第二个位. ...

by thewayma - Linux文档专区 - 2009-10-09 22:26:58 阅读(852) 回复(0)

三:alloc_pages()/alloc_page 实现分析 函数原型: alloc_pages(unsigned int gfp_mask, unsigned int order); alloc_page(unsigned int gfp_mask); 其中alloc_pages()来了分配多页内存,而alloc_page()只用来分配单页内存. 在内核中,alloc_page就是调用了alloc_pages(gfp_mask,0)来实现的 gfp_mask表示分配的标志. 关于alloc_pages/alloc_page的调用,请参阅相关的的资料 此外,alloc_pages返回的是page结构,...

by thewayma - Linux文档专区 - 2009-10-09 18:24:20 阅读(837) 回复(0)

在内核模块的编写中,我们用alloc_page()/alloc_pages()来分配大内存(超过一个页面,即4K).用free_page()/free_pages()来释放用前者分得的内存.今天我们就来分析一下,在linux内核中大内存分配的实现. 跟以往一样.本文的代码分析是基于linux 2.6.9的 本文档包括: 一:准备知识 二:有关的数据结构 三:alloc_pages()/alloc_page 实现分析 四:free_pages()的相关实现 五:总结 一:准备知识: 一个操作系统的内存管理方式很大程度上决...

by thewayma - Linux文档专区 - 2009-10-09 18:14:54 阅读(678) 回复(0)

如上图所示,每一个框表示一个页面,大括号表示相应的位图.我们考虑一下以下几个问题. 1:如何知道页面在相应空闲所在的分配位图位 结合以前讨论的伙伴系统分配位图相关知道,知道空闲区的每一组用一个位表示其分配情况,所以,在2^n的空闲链表中,每一个空闲块是2^n大小,每个位图表示 2*2^n个页.在zone中序号为index的页在2^n空闲链中相应的位图是 index/2*2^n = index>>(n+1).如上图中2^0空闲链中,1,2属于第一个位,3,4属于第二个位. ...

by luqc - Linux文档专区 - 2008-11-25 18:58:27 阅读(574) 回复(0)

位图1表示A,B的分配情况,位图2表示C,D的分配情.况.A.D已经分配出去了,B,C处于空闲状态 上图中,虽然B,C处理连续的页,且都空闲,但不可以把B,C合位为一块大内存. 二:有关的数据结构. 我们以NUMA配置来分析伙伴系统算法中所涉及的数据结构 系统中,每一个页面对应一个页描述符,它的结构如下: struct page { page_flags_t flags; //页面所对应的标志,这跟页表项的标志是不一样的 atomic_t _count; ...

by luqc - Linux文档专区 - 2008-11-25 18:51:19 阅读(657) 回复(0)