Chinaunix首页 | 论坛 | 博客
  • 博客访问: 287914
  • 博文数量: 44
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1354
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-08 15:38
个人简介

人生像是在跑马拉松,能够完赛的都是不断地坚持向前迈进;人生就是像在跑马拉松,不断调整步伐,把握好分分秒秒;人生还是像在跑马拉松,能力决定了能跑短程、半程还是全程。人生其实就是一场马拉松,坚持不懈,珍惜时间。

文章分类

发布时间:2015-12-03 01:45:24

前面已经分析了slub算法的初始化、缓存区的创建、对象的分配、对象的回收,最后分析一下slub分配算法的slab销毁具体实现。Slab销毁的入口函数为kmem_cache_destroy(),其实现:【file:/mm/slab_common.c】void kmem_cache_destroy(struct kmem_cache *s){&nbs.........【阅读全文】

阅读(4028) | 评论(0) | 转发(1)

发布时间:2015-11-23 02:26:40

前面分析了Slub分配算法的缓存区创建及对象分配,现继续分配算法的对象回收。    Slub分配算法中对象释放的接口为kmem_cache_free():【file:/mm/slub.c】void kmem_cache_free(struct kmem_cache *s, void *x){    s = ca.........【阅读全文】

阅读(3675) | 评论(0) | 转发(1)

发布时间:2015-11-21 08:14:54

前面已经分析了slub分配算法的初始化及slab资源池的创建,现在进一步分析一下slub分配算法的分配实现。kmem_cache_alloc()是申请slab对象的入口函数,其实现:【file:/mm/slub.c】void *kmem_cache_alloc(struct kmem_cache *s, gfp_t gfpflags){  .........【阅读全文】

阅读(4336) | 评论(0) | 转发(1)

发布时间:2015-11-20 23:38:58

前面分析了slub分配算法的初始化,继续分析slub分配算法的slab创建过程。Slub分配算法创建slab类型,其函数入口为kmem_cache_create(),具体实现:【file:/mm/slab_common.c】struct kmem_cache *kmem_cache_create(const char *name, size_t size, size_t align,.........【阅读全文】

阅读(4419) | 评论(0) | 转发(1)

发布时间:2015-11-18 01:21:11

先由slub分配算法初始化进入分析。回到mm_init()函数中,在调用mem_init()初始化伙伴管理算法后,紧接着调用的kmem_cache_init()便是slub分配算法的入口。其中该函数在/mm目录下有三处实现slab.c、slob.c和slub.c,表示不同算法下其初始化各异,分析slub分配算法则主要分析slub.c的实现。该函数具体实现:.........【阅读全文】

阅读(3638) | 评论(0) | 转发(1)

发布时间:2015-11-17 23:53:33

前面主要分析了以页为最小单位进行内存分配的伙伴管理算法,这对于内核对内存的管理比较简单,同时较大程度上避免了内存碎片的问题。而实际上对内存的申请却不是每次都申请一个页面的,通常是不规则的,大小不一的,并且远小于一个内存页面的大小,此外更可能会频繁地申请释放这些内存。明显每次分配小于一个页面的都.........【阅读全文】

阅读(4164) | 评论(0) | 转发(2)

发布时间:2015-07-02 23:57:06

<p align="left">&nbsp; &nbsp;<span style="text-indent:21pt;line-height:1.5;">Linux系统内存管理中存在着一个称之为</span><span style="text-indent:21pt;line-height:1.5;">OOM killer</span><span style="text-indent:21pt;line-height:1.5;">(</span><span style="text-indent:21pt;line-height:1.5;">Out-Of-Me.........【阅读全文】

阅读(5295) | 评论(0) | 转发(1)

发布时间:2015-05-02 10:11:13

根据git的合入记录,CMA(Contiguous Memory Allocator,连续内存分配器)是在内核3.5的版本引入,由三星的工程师开发实现的,用于DMA映射框架下提升连续大块内存的申请。其实现主要是在系统引导时获取内存,并将内存设置为MIGRATE_CMA迁移类型,然后再将内存归还给系统。内核分配内存时,在CMA管理内存中仅允许申请.........【阅读全文】

阅读(10077) | 评论(0) | 转发(2)

发布时间:2015-04-07 00:23:06

页面迁移其实是伙伴管理算法中的一部分,鉴于其特殊性,特地另行分析。它是2007年的时候,2.6.24内核版本开发时,新增碎片减少策略(the fragmentation reduction strategy)所引入的。该策略也称之为反碎片技术(anti-gragmentation)。根据《深入linux内核架构》的描述,反碎片的由来是因为Linux内存管理长期存在一.........【阅读全文】

阅读(6640) | 评论(0) | 转发(1)

发布时间:2015-03-16 00:33:48

前面已经分析了伙伴管理算法的释放实现,接着分析一下伙伴管理算法的内存申请实现。    伙伴管理算法内存申请和释放的入口一样,其实并没有很清楚的界限表示这个函数是入口,而那个不是,所以例行从稍微偏上一点的地方作为入口分析。于是选择了alloc_pages()宏定义作为分析切入口:.........【阅读全文】

阅读(3166) | 评论(0) | 转发(1)
给主人留下些什么吧!~~

剑魂箫心2018-07-03 23:07

博主真是神人,我正在看4.9内核代码,每当遇到理解不了的地方总能搜到博主的文章。

回复  |  举报

Jean_Leo2016-02-19 00:52

xlzheng:后面没有更新了吗,很期待啊

谢谢关注。后面会更新的,最近工作较忙,还抽不出时间来整理,下一篇是关于kmemcheck的内容

回复  |  举报

xlzheng2016-02-18 14:57

后面没有更新了吗,很期待啊

回复  |  举报
留言热议
请登录后留言。

登录 注册