免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 鬼鬼一哈
打印 上一主题 下一主题

[内存管理] 内存管理的疑惑? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-12-09 14:48 |只看该作者
回复 7# B_C_1024

kmalloc过程
static __always_inline void *kmalloc(size_t size, gfp_t flags)//kmalloc的flags一般为GFP_KERNEL和GFP_ATOMIC,表示从低端分配
   return __kmalloc(size, flags);
       __do_kmalloc(size, flags, 0);
          cachep = kmalloc_slab(size, flags);
          ret = slab_alloc(cachep, flags, caller);
              objp = __do_cache_alloc(cachep, flags);
                    ____cache_alloc(cachep, flags);
                        objp = cache_alloc_refill(cachep, flags, force_refill);
                            x = cache_grow(cachep, flags | GFP_THISNODE, node, NULL);
                                BUG_ON(flags & GFP_SLAB_BUG_MASK)  //GFP_SLAB_BUG_MASK =  (__GFP_DMA32|__GFP_HIGHMEM|~__GFP_BITS_MASK)
                                local_flags = flags & (GFP_CONSTRAINT_MASK|GFP_RECLAIM_MASK);//清除高端内存标志               

                                       objp = kmem_getpages(cachep, local_flags, nodeid);
                                    page = alloc_pages_exact_node(nodeid, flags | __GFP_NOTRACK, cachep->gfporder);
                                        __alloc_pages(gfp_mask, order, node_zonelist(nid, gfp_mask));
                                    return page_address(page);
                                slabp = alloc_slabmgmt(cachep, objp, offset,local_flags & ~GFP_CONSTRAINT_MASK, nodeid);
                                    slabp = kmem_cache_alloc_node(cachep->slabp_cache,local_flags, nodeid);
                                       return kmem_cache_alloc(cachep, flags);

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP