본문 바로가기
Programming/Android Kernel,Native

zygote process

by 개Foot/Dog발?! 2014. 10. 11.

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 를 만들어 낸다.


.....