ZYGOTE ANDROID
Sequence of Zygote startup steps
Init runs the C++ program /system/bin/app_process, and gives the resulting process the name "zygote"
This is based on the line from init.rc:
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
app_process executes, and executes a runtime environment for a dalvik class
app_process usage claims to be:
Usage: app_process [java-options] cmd-dir start-class-name [options]
but you can specify --zygote in place of the start-class-name.In the bootup case, --zygote is use source for 'app_process is in frameworks/base/cmds/app_process/app_main.cpp this is the program to debug when debugging zygote/dalvik itself app_process does a 'runtime.start("com.android.internal.os.ZygoteInit", startSystemServer) the startSystemServer flag is passed as a parameter on to app_process, to indicate whether to start the system server (duh) runtime is an instance of class AppRuntime, which is sub-classed from AndroidRuntime AndroidRuntime is the main class for starting the dalvik runtime environment source is in frameworks/base/core/jni/AndroidRuntime.cpp the start() method starts the virtual machine
LOG_BOOT_PROGRESS_START is emitted, with systemTime(SYSTEM_TIME_MONOTONIC) startVM() is calledeventually, callStaticVoidMethod() is called, to actually start executing the start class with method "main" in Dalvik code com.android.internal.os.ZygoteInit:main() starts executing source is at: frameworks/base/core/java/com/android/internal/os/ZygoteInit.java the profiler is started the Zygote socket is registered (for later communication to start apps) classes and resources are preloaded if startSystemServer is set, then the system server is started the command line to the system server is:
--setuid=1000 --setgid=1000 \
--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,3001,3002,3003 \
--capabilities=130104352,130104352 \
--runtime-init \
--nice-name=system_server \
com.android.server.SystemServer
the class which starts executing is: com.android.server.SystemServer a call is made to Zygote.forkSystemServer() to actually start this other process zygote runs in "select loop mode", where a single process spins waiting for communication to start subsequent apps see runSelectLoopMode()new connections are accepted (and put into array "peers") the spawn command received over the network is executed by calling the runOnce() method source code for this is at: frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java eventually, a call is made to Zygote.forkAndSpecialize(), which does the actual forking
Sequence of system_server (or SystemServer) startup steps
Source for the SystemServer is in:frameworks/base/services/java/com/android/server/SystemServer.java
in the "ServerThread::run()" method, the following startup occurs:
LOG_BOOT_PROGRESS_SYSTEM_RUN is emitted
Lots of critical services are started:
§ Entropy Service
§ Power Manager
§ Activity Manager
§ Telephony Registry
§ Package Manager
§ Account Manager
§ Content Manager
§ System Content Providers
§ Battery Service
§ Hardware Service
§ Alarm Manager
§ Init Watchdog
§ Sensor Service
§ Window Manager
Additional services may be started as well:
§ Status Bar
§ Clipboard Service
§ Input Method Service
§ NetStat Service
§ Connectivity Service
§ Accessibility Manager
§ Notification Manager
§ Mount Service
§ Device Storage Monitor
§ Location Manager
§ Search Service
§ Checkin Service
§ Wallpaper Service
§ Audio Service
§ Headset Observer
§ Dock Observer
§ Backup Service
§ AppWidget Service
No comments:
Post a Comment