Zygote

zygote和system server启动过程解析

人盡茶涼 提交于 2020-02-29 20:56:45
Zygote 的启动过程解析。 Zygote 实际上是一个用户态应用程序,由启动脚本负责启动。在启动脚本中 Zygote 叫做 app_process 。下面分析 app_main.cpp 中的启动 Zygote 的过程。 main |__ 设置 runtime 的 mParentDir 为 /usr/bin , mArgC 为 zygote 参数个数, mArgV 为 zygote 参数( -Xzygote /system/bin --zygote --start-system-server ) |__runtime.start ( AndroidRuntime::start ) |__ 设置环境变量 ANDROID_ROOT |__startVm() :启动 VM |__ 设置启动虚拟机参数,如: checkjni, 进程堆大小 16MB 等 |__ 调用 JNI_CreateJavaVM() 启动虚拟机,之后 JavaVM 和虚拟机主线程的 JNIEnv 变量有效 |__startReg() :向虚拟机主线程注册 JNI |__ com.android.internal.os.ZygoteInit.main(从JNI调用, 从此进入 JAVA 世界) |__registerZygoteSocket() :创建 Zygote 服务端本地 socket ,用于监听客户端的连接请求

Android4.4的zygote进程

与世无争的帅哥 提交于 2020-02-29 09:13:33
Android4.4的zygote进程 侯亮 1背景 前些天为了在科室做培训,我基于Android 4.4重新整理了一份关于zygote的文档。从技术的角度看,这几年zygote并没有出现什么大的变化,所以如果有人以前研究过zygote,应该不会对本文写的内容感到陌生。 2zygote进程的描述 在Android中,zygote是整个系统创建新进程的核心装置。从字面上看,zygote是受精卵的意思,它的主要工作就是进行细胞分裂。 zygote进程在内部会先启动Dalvik虚拟机,继而加载一些必要的系统资源和系统类,最后进入一种监听状态。在后续的运作中,当其他系统模块(比如AMS)希望创建新进程时,只需向zygote进程发出请求,zygote进程监听到该请求后,会相应地“分裂”出新的进程,于是这个新进程在初生之时,就先天具有了自己的Dalvik虚拟机以及系统资源。 系统启动伊始,zygote进程就会被init进程启动起来,init进程的详情可参考我写的《Android4.4的init进程》一文,此处不再赘述。我们直接来看init.rc脚本里的相关描述吧。在这个脚本中是这样描述zygote的: 可以看到,zygote对应的可执行文件就是/system/bin/app_process,也就是说系统启动时会执行到这个可执行文件的main()函数里。 3zygote进程的实现细节

Android启动过程深入解析

若如初见. 提交于 2020-02-29 09:13:05
1.当按下Android设备电源键时究竟发生了什么? 2.Android的启动过程是怎么样的? 3.什么是Linux内核? 4.桌面系统linux内核与Android系统linux内核有什么区别? 5.什么是引导装载程序? 6.什么是Zygote? 7.什么是X86以及ARM linux? 8.什么是init.rc? 9.什么是系统服务? 当我们想到Android启动过程时,脑海中总是冒出很多疑问。本文将介绍Android的启动过程,希望能帮助你找到上面这些问题的答案。 Android是一个基于Linux的开源操作系统。x86(x86是一系列的基于intel 8086 CPU的计算机微处理器指令集架构)是linux内核部署最常见的系统。然而,所有的Android设备都是运行在ARM处理器(ARM 源自进阶精简指令集机器,源自ARM架构)上,除了英特尔的Xolo设备(http://xolo.in/xolo-x900-features)。Xolo来源自凌动1.6GHz x86处理器。Android设备或者嵌入设备或者基于linux的ARM设备的启动过程与桌面版本相比稍微有些差别。这篇文章中,我将解释Android设备的启动过程。 深入linux启动过程 是一篇讲桌面linux启动过程的好文。 当你按下电源开关后Android设备执行了以下步骤。 此处图片中step2中的一个单词拼写错了