自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

转载 Android OOM killer机制

Linux下有一种OOM KILLER 的机制,它会在系统内存耗尽的情况下,启用自己算法有选择性的kill 掉一些进程。  1. 为什么会有OOM killer  当我们使用应用时,需要申请内存,即进行malloc的操作,进行malloc操作如果返回一个非NULL的操作表示申请到了可用的内存。事实上,这个地方是可能存在bug的。Linux有一种内存优化机制,即:允许程序申请比系统可用内存更多的...

2018-08-30 14:25:43 816

原创 几个内存分配API的区别

内存分配的API有:alloc_pages, kmalloc, slab分配,vmalloc, malloc,下面简单说明一下以上几个函数的差别:alloc_pages:主要用来从buddy系统中分配内存,以页为单位分配区域需要通过gfp_flag指定,一般情况下会优先从highmem zone分配,返回的是分配到物理首个页面的管理结构体struct page,buddy里面页面的组织情况如下...

2018-08-29 01:30:17 2411

原创 进程地址空间VMA以及malloc

进程空间的VMA结构体中由两个成员,红黑树以及链表,表示其组织方式由两种:红黑树: 链表类型:有了上面的图例,下面简单讲一下malloc的分配原理:首先malloc是通过系统调用brk来完成内存分配的:SYSCALL_DEFINE1(brk, unsigned long, brk)------------(1){ unsigned long retval; ...

2018-08-29 00:43:19 2145

转载 ARM32 进程的virtual memory布局图

ps:上图最右边的start_code, end_code, start_data, end_data……表示进程描述符中mm_struct结构体对应成员所代表的意思。

2018-08-28 00:39:35 480

原创 list_entry通俗理解方法

大家都知道list_entry时kernel里面经常遇到的一个函数,其定义为:#define list_entry(ptr, type, member) \ container_of(ptr, type, member)#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member...

2018-08-20 00:06:35 28467 4

原创 vmalloc

前面说到kmalloc时基于slab分配器来实现的,其分配的物理内存时连续的,但是kmalloc一次分配的内存不能太大,现在说vmalloc,vmalloc分配的虚拟内存时连续的,其分配的区间为内存初始化时分配的从VMALLOC_START到VMALLOC_END区间,分配的虚拟内存时以PAGE_SIZE对齐的:void *vmalloc(unsigned long size){ ret...

2018-08-12 21:33:49 2969

原创 kernel-4.4 slab(三)

前面已经讲了slab描述符的初始化以及slab对象的创建,下面是slab对象的回收:slab对象的回收通过kmem_cache_free来完成:void kmem_cache_free(struct kmem_cache *cachep, void *objp){ unsigned long flags; cachep = cache_from_obj(cachep, objp);...

2018-08-08 23:02:02 249

原创 kernel-4.4 slab(二)

slab对象的分配:slab对象的分配使用kmem_cache_alloc():void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags){ void *ret = slab_alloc(cachep, flags, _RET_IP_); trace_kmem_cache_alloc(_RET_IP_, ret,...

2018-08-08 19:25:27 251

原创 kernel-4.4 slab(一)

linux slab作为用于小块内存分配的机制,主要用于低于PAGE SIZE大小内存的分配,是相对于page_alloc用于分配以页为单位的内存来说的。slab机制主要分为slab描述符的创建,slab对象的分配,slab对象的回收。1. slab的创建:先看slab描述符:struct kmem_cache { struct array_cache __percpu *cp...

2018-08-08 01:47:34 501

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除