Zygote
- 실행되면서 Dalvik 가상 머신을 초기화하고 구동시킨다.
- application이 실행되기 전에 실행된 가상 머신의 코드 및 메모리 정보를 공유 - app이 실행되는 시간을 단축.
- 특히 한정된 자원을 사용해야 하는 임베디드 기기에서 적합함

안드로이드에서 하나의 Application은 isolated 된 하나의 프로세스로 실행하게 됩니다. 안드로이드가 실행되면 zygote라는 최초의 Dalvik VM 프로세스 실행되는데 zygote는 부팅시에 많은 시스템 클래스 라이브러리들을 로드 하게 되며 새로운 Application이 실행될 때마다 fork() 함수를 통해 새로운 자식 프로세스를 생성하게 됩니다. Linux는 프로세스가 fork될 때 부모 프로세스의 주소 영역을 카피하는데 이것이 오버헤드가 심하여 빠른 fork를 위해 다른 방법들을 사용합니다. 대표적인 것이 COW(Copy On Write)인데 부모의 주소 영역을 자식 프로세스가 공유하다가 실제 자식 프로세스가 어떤 영역에 쓰기를 시작할 때 별도의 메모리(페이지)를 할당하는 식입니다. 



ZygoteInit

Dalvik VM --> ZygoteInit::main()
 
(1) registerZygoteSocket()
- 새로운 Android application의 실행 요청을 받기 위한 소켓 바인딩
- UDS (Unix Domain Socket)을 사용하며 init.rc에서 app_process를 실행할때 /dev/zygote으로 등록한 socket을 사용한다
(2) preloadClasses()
           preloadResources()
- Android Application Framework에서 사용할 클래스들과 리소스의 로딩
(3) startSystemServer()
- System Server 시작 - Android platform에 필요한 주요 네이티브 서비스를 실행한다
(SurfaceFlinger, AudioFlinger, MediaPlayerService, CameraService)
(4) runSelectLoopMode()
- 새로운 Android application 실행 요청에 대한 처리

'Android' 카테고리의 다른 글

Android GestureDetector  (0) 2012.06.12
Monkey Test 옵션 정리  (0) 2012.02.20
인사이드 안드로이드 Chapter4  (0) 2012.02.02
인사이드 안드로이드 Chapter3 (1)  (0) 2011.12.08
인사이드 안드로이드 Chapter3  (0) 2011.12.08
블로그 이미지

민둥

,