URL : http://bulldozer121.tistory.com/18
....
*. zygote process
.....
zygote 란 application 을 빠르게 구동하기 위하여 미리 fork 되어 있는 process 이다. system 에서 exec() 호출을 통해 특정 application 을 실행하고자 하기 전까지는 중립적인 상태를 유지하며 대기하고 있는 process 이다. ..... application 의 실행에 대비하고있다는 것이다. 반쯤 생성된 process 에 실제 핵심이 되는 application 의 logic 을 태워 구동시키기 때문에 application 의 구동 속도가 빨라지는 것이다.
이제 zygote process 에 대해 좀 더 자세히 적어보겠다.
zygote process 는 init process 에 의해 구동되어 진다.
init process 가 system 구동에 필요한 각 daemon 을 실행하고 나서 실행시키는 process 이다. 그리고 init process 에서 zygote process 가 실행되어지고 난 이후에는 android service 및 application 은 zygote process 를 통해 실행되어 진다. 그리고 여기에서 booting process 에 대한 글에서 적었던 PID 와 PPID 의 개념이 필요하다.
adb 로 shell 접속하여 ps 명령을 하면 PID 와 PPID number 를 눈으로 확인할 수 있다.
그 number 의 관계를 통하여 init process 가 생성시킨 process 들과 zygote process 가 생성시킨 process 를 확인할 수 있다.
zygote process 를 통함으로 인해 application 의 구동속도가 빨라지는 내용은 위에 간략하게 적었다. 미리 fork 되어 있으면서 공통의 libraries 등을 탑재하고 있기 때문이라 했는데, 이 부분에 대해 조금 더 자세히 적으면 아래와 같다.
zygote process 가 실행이 되면, Dalvik VM 을 실행시키게 된다. 그런 이후 classes 와 resources 를 preloading 한 상태로 application 의 logic 을 기다리고 있는 것이다.
만약 zygote 의 개념이 없다면 application 은 구동 시에 필요한 모든 classes 와 resources 를 찾아야 하는 delay 가 발생하게 될것이다. 이 부분에서 zygote process 의 필요성이 나타난다.
그리고 zygote 는 java 로 작성된 process 이다. android system 에서 java process 를 실행하기 위해서는 Dalvik VM 이
필요하다. init process 에서 zygote process 를 실행하기 위해서 zygote process 가 생성시키는 Dalvik VM 이외에 별도의
zygote process 용 Dalvik VM 이 필요하다는 것이다. 간단히 서적에 보면 init process중에 app_process 라는 service 가
존재하며 이 app_process 를 통해 Dalvik VM 을 실행시킨 후 zygote 를 만들어 낸다.
.....
'Programming > Android Kernel,Native' 카테고리의 다른 글
안드로이드 바인더(Android Binder)가 탄생하기 까지 (0) | 2014.10.13 |
---|---|
${ro.hardware}를 사용한 하드웨어 별 init.rc 처리 (0) | 2014.10.11 |
안드로이드의 프로세스 - init process_1 (0) | 2014.10.08 |
안드로이드의 프로세스 - booting process (0) | 2014.10.08 |
Init 프로세스 동작 (0) | 2014.10.08 |