没有合适的资源?快使用搜索试试~ 我知道了~
Android内核驱动—内存管理 Low Memory Killer Ashmem pmem
资源推荐
资源详情
资源评论
第十四章 Android 内核驱动——内存管理
14.1 Low Memory Killer
基本原理
Android 的 Low Memory Killer 是在标准 linux kernel 的 OOM 基础上修改而来的一种内存管理
机制,当系统内存不足时,杀死 Bad 进程释放其内存。Bad 进程的选择标准有两个:oom_adj
和占用内存的大小。oom_adj 代表进程的优先级,数值越大,优先级越高,对应每个 oom_adj
都有一个空闲内存的阈值。Android Kernel 每隔一段时间会检查当前空闲内存是否低于某个
阈值,如果是,则杀死 oom_adj 最大的 Bad 进程,如果有两个以上 Bad 进程 oom_adj 相同,
则杀死其中占用内存最多的进程。
Low Memory Killer 与 OOM 的区别
OOM 即 Out of Memory 是标准 linux Kernel 的一种内存管理机制,Low Memory Killer 在它基
础上作了改进:
OOM 基于多个标准给每个进程打分,分最高的进程将被杀死;Low Memory Killer 则用
oom_adj 和占用内存的大小来选择 Bad 进程
OOM 在内存分配不足时调用,而 Low Memory Killer 每隔一段时间就会检查,一旦发现
空闲内存低于某个阈值,则杀死 Bad 进程。
Low Memory Killer 的实现
Low Memory Killer 的源代码在 drivers/staging/android/lowmemorykiller.c 中,它是通过注册
Cache Shrinker 来实现的。Cache Shrinker 是标准 linux kernel 回收内存页面的一种机制,它由
内核线程 kswapd 监控,当空闲内存页面不足时,kswapd 会调用注册的 Shrinker 回调函数,
来回收内存页面。
Low Memory Killer 是在模块初始化时注册 Cache Shrinker 的,代码如下:
static int __init lowmem_init(void){
register_shrinker(&lowmem_shrinker); // 注册 Cache Shrinker
return 0;
}
lowmem_shrinker 的定义如下:
static struct shrinker lowmem_shrinker = {
.shrink = lowmem_shrink,
.seeks = DEFAULT_SEEKS * 16
};
资源评论
铛铛任务v自由职业者
- 粉丝: 8
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功