Android 7.0 ActivityManagerService(7) 进程管理相关流程分析(1)

Android 7.0 ActivityManagerService(7) 进程管理相关流程分析(1)

ID:37708216

大小:195.50 KB

页数:23页

时间:2019-05-29

Android 7.0 ActivityManagerService(7) 进程管理相关流程分析(1)_第1页
Android 7.0 ActivityManagerService(7) 进程管理相关流程分析(1)_第2页
Android 7.0 ActivityManagerService(7) 进程管理相关流程分析(1)_第3页
Android 7.0 ActivityManagerService(7) 进程管理相关流程分析(1)_第4页
Android 7.0 ActivityManagerService(7) 进程管理相关流程分析(1)_第5页
资源描述:

《Android 7.0 ActivityManagerService(7) 进程管理相关流程分析(1)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android7.0ActivityManagerService(7)进程管理相关流程分析(1)Android框架定义了四大组件,一般的功能都是基于这些组件的。 因此,在Android平台上开发时,很少会接触到进程的概念。但根据前面分析Activity、Service和BroadcastReceiver的流程, 我们可以清晰地看到,所有这些组件最终还是要运行在具体的进程之中。 于是,AMS作为管理四大组件的核心服务,也承担起了进程管理的责任。在AMS中,进程管理相关的函数分别为updateLruProcessLocked和u

2、pdateOomAdjLocked。 这两个函数在之前的流程分析中多次遇到过,从这篇博客开始,我们一起来看看它们具体的工作流程。一、Linux进程管理的基本概念 Android中进程管理相关的工作,实际上依赖于Linux的进程管理策略。 因此,先简单地了解一下Linux进程管理的基本概念。1、Linux进程调度优先级和调度策略 调度优先级和调度策略,是操作系统对CPU资源进行管理和控制的依据。调度优先级: 我们知道,操作系统上运行的进程数量较多,同时CPU的资源是有限的。 因此,操作系统需要合理地为不同进程分配CPU资源。调

3、度优先级就是操作系统分配CPU资源给进程时,需要参考的一个重要指标。 一般而言,优先级较高的进程将更有机会得到CPU资源。调度策略: 调度策略用于描述,操作系统的调度模块,分配CPU资源给应用进程时,所遵循的规则。 即用于描述,将CPU控制权交给调度模块时,它如何决定下一个要运行的进程。由于多个进程可能具有相同的调度优先级,因此调度模块不能仅按照各进程的调度优先级进行决策。 一个良好的调度策略,一定要兼顾到效率和公平性。LinuxAPI: Linux提供了两个API用于设置调度优先级及调度策略。1)设置调度优先级的API为:

4、 intsetpriority(intwhich,intwho,intprio) 其中,which和who联合使用。当which为PRIO_PROGRESS时,who代表一个进程,即pid; 当which为PRIO_PGROUP时,who代表一个进程组,即gid; 当which为PRIO_USER时,who代表一个用户,即uid。prio用于设置进程的nice值,取值范围为-20~+19。 该值越大表示进程越友好(nice),即对CPU资源的依赖越低。 于是,进程的prio值越大,其被调用的优先级越低。2)设置调度策略的AP

5、I为: intsched_setscheduler(pid_tpid,intpolicy,conststructsched_param*param); 其中,pid表示进程id;policy表示调度策略。 Linux定义了很多种调度策略,具体的内容可以参考相关的资料。param参数中,最重要的是该结构体中的sched_priority变量。 该变量用于设置该调度策略下,进程的优先级。2、Linux进程oom_adj的介绍 从Linuxkernel2.6.11开始,内核提供了进程的OOM控制机制。 目的是: 当系统出现内存不足

6、的情况时,内核可以根据进程的oom_adj值, 来选择杀死一些进程,以回收内存。oom_adj用于表示Linux进程内存资源的优先级,其可取值范围为-16至+15,数值越小,被kill的可能性越低。 此外,还有一个特殊值-17,表示禁止系统在OOM情况下杀死该进程。Linux没有提供单独的API用于设置进程的oom_adj,一般是向/proc/[pid]/oom_adj文件中写入对应的oom_adj值。在Linuxkernel2.6.36后,/proc/[pid]/oom_adj被弃用了,改为/proc/[pid]/oom_

7、score_adj。 oom_score_adj对应的取值范围变为-1000到1000,仍然是数值越小,被kill概率越小。 此时,-1000表示禁止系统在OOM情况下杀死该进程。AMS的updateOomAdjLocked函数,就借用了Linux中oom_adj的概念。此外,Android为linuxkernel新增了LowMemoryKiller(LMK)机制。 LMK的配置文件中,预先定义了不同的内存阈值及对应的oom_adj。当LMK监控到系统内存下降到某个阈值时,就会kill掉当前系统内, oom_adj超过该阈值

8、预定义oom_adj的所有进程。例如,预定义一组对应关系,内存剩余2048KB时,oom_adj为0。 那么,当LMK监控到系统内存少于2048KB时,将kill掉系统内所有oom_adj大于0的进程。以上是Linux进程管理的一些基本概念, 如果需要深入理解对应的过程,还是需要阅读相关源

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。