全部博文(573)
发布时间:2015-12-04 09:38:12
vmalloc代码vmalloc()->__vmalloc_node_flags()->__vmalloc_node()->__vmalloc_node_range()->__vmalloc_area_node()->alloc_page() mm/vmalloc.cvoid *vmalloc(unsigned long size){ return __vmalloc_node_flags(size, -1, GFP_KERNEL | __GFP_HIGHMEM);}&n.........【阅读全文】
发布时间:2015-12-04 09:37:08
alloc_page 代码alloc_pages()->alloc_pages_node()->__alloc_pages()->__alloc_pages_nodemask()->get_page_from_freelist()->buffered_rmqueue()->__rmqueue()->__rmqueue_smallest()->expand()include\linux\Gpf.h#define alloc_pages(gfp_mask, order) \ alloc_pages_node(numa.........【阅读全文】
发布时间:2015-12-04 09:35:27
kmalloc分配大小的限制kmalloc是通过cache来实现的, 只不过每次kmalloc的大小不同, 因此是从不同的cache中分配:/* include/linux/slab.h */// 注意kmalloc是在头文件中定义的static inline void *kmalloc(size_t size, gfp_t flags){ if (__builtin_cons.........【阅读全文】
发布时间:2015-12-04 09:34:22
kmalloc 代码Kmalloc()->__kmalloc()->__do_kmalloc()->__cache_alloc()->____cache_alloc()->cache_alloc_refill()->cache_grow()->kmem_getpages()->alloc_pages_exact_node()->__alloc_pages() include\linux\Slab_def.hstatic __always_inline void *kmalloc(size_t size, gfp.........【阅读全文】
发布时间:2015-12-04 09:31:57
linux内存管理浅析[地址映射](图:左中)linux内核使用页式内存管理,应用程序给出的内存地址是虚拟地址,它需要经过若干级页表一级一级的变换,才变成真正的物理地址。想一下,地址映射还是一件很恐怖的事情。当访问一个由虚拟地址表示的内存空间时,需要先经过若干次的内存访问,得到每.........【阅读全文】