Zygote & System Server & app

Zygote & System Server & App


init进程:

  1. 进程pid为1
  2. Linux系统中,用户空间第一个进程。(内核空间存放内核代码 和 数据, 用户空间存放用户程序的代码和数据)
  3. 父进程pid为0,系统内核空间。
  4. 内核启动之后,执行的第一个进程。

Zygote:

时序图:


app_main.cpp


AndroidRuntime.cpp


ZygoteInit


runSelectLoop:


作用:

  1. Zygote负责fork其他的Android(Java 层)进程:所有的应用程序进程 ,SystemServer。
  2. 提供共享资源:FrameWork共享类 及 共享资源。(zygote提供了同一段物理内存空间用来存储共享数据)

谁启动的Zygote:

由Android系统的第一个进程init启动。(init 进

### Android 系统核心进程作用及启动流程 #### **init 进程** init 是 Android 系统中用户空间的第一个进程,其 PID 为 1,负责启动和初始化整个系统。它由内核启动后执行 `/init` 脚本,解析 `init.rc` 配置文件,启动必要的系统服务和子进程,其中包括 Zygote 进程。init 进程在系统运行期间持续运行,作为守护进程管理其他进程的生命周期。 - **启动流程**:init 解析 `init.rc` 文件,找到 `service zygote /system/bin/app_process ...` 这一行,启动 Zygote 进程[^2]。 #### **Zygote 进程** Zygote 是 Android 应用程序进程的“孵化器”,它预加载了通用的类库和资源,使得新创建的应用进程可以快速启动。Zygote 进程通过执行 `/system/bin/app_process` 程序进入 `App_main.cpp` 的 `main()` 函数,并最终调用 `ZygoteInit.main()`,进入 Java 层初始化流程。 - **启动流程**:Zygote 启动后会调用 `ZygoteInit.startSystemServer()` 方法,通过 `fork()` 创建 system_server 子进程[^1]。 #### **system_server 进程** system_server 是 Android 系统中最核心的服务进程,负责启动和管理各种系统服务(如 ActivityManagerService、PackageManagerService、WindowManagerService 等)。它运行在 Zygote 的子进程中,使用 PathClassLoader 加载类并初始化系统服务。 - **启动流程**:system_serverZygote fork 而来,进入 `ZygoteInit.handleSystemServerProcess()` 方法,设置进程名为“system_server”,并调用 `RuntimeInit.zygoteInit()`,最终进入 `SystemServer.main()` 方法,执行 `run()` 方法初始化系统服务[^1]。 #### **SurfaceFlinger 进程** SurfaceFlinger 是 Android 系统的图形合成服务,负责将多个图形层(Layer)合成并输出到显示设备。它可以运行在 system_server 进程中,也可以作为独立进程运行。 - **启动流程**:如果需要以独立进程方式运行,需在 `init.rc` 中添加 `setprop system_init.startsurfaceflinger=1` 并确保未被禁用[^3]。 #### **进程启动顺序总结** 1. **init** 启动 Zygote。 2. **Zygote** 初始化并 fork 出 **system_server**。 3. **system_server** 启动各类系统服务。 4. **SurfaceFlinger** 可选地作为独立进程启动,或运行在 system_server 中。 ### **代码示例:Zygote 启动 system_server** ```java // ZygoteInit.java private static boolean startSystemServer(String abiList, String socketName) throws MethodAndArgsCaller, RuntimeException { long capabilities = posixCapabilitiesAsBits( OsConstants.CAP_WAKE_ALARM, OsConstants.CAP_NET_ADMIN, OsConstants.CAP_SYS_RESOURCE ); /* Hardcoded command line to start the system server */ String args[] = { "--setuid=1000", "--setgid=1000", "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1032,3001,3002,3003,3006,3007", "--capabilities=" + capabilities + "," + capabilities, "--nice-name=system_server", "--runtime-args", "zygote/main", "com.android.server.SystemServer", }; ZygoteConnection.Arguments parsedArgs = new ZygoteConnection.Arguments(args); pid = Zygote.forkSystemServer( parsedArgs.uid, parsedArgs.gid, parsedArgs.gids, parsedArgs.debugFlags, null, parsedArgs.permittedCapabilities, parsedArgs.effectiveCapabilities); } ``` ### **相关进程作用总结** | 进程名称 | 主要作用 | |----------------|------------------------------------------------------------------| | init | 系统第一个用户进程,负责启动 Zygote | | Zygote | 孵化应用进程,预加载类库,提高应用启动效率 | | system_server | 管理系统服务(AMS、PMS、WMS 等) | | SurfaceFlinger | 图形合成服务,负责多图层合成输出到屏幕 |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值