안드로이드의 부팅과정을 정리하고 있습니다. 아직 확실치 않은 부분이 많아 내용이 틀린 부분이 있을 수 있습니다. ㅜ.ㅜ
안드로이드의 boot-up sequence 부팅과정
부팅순서에 따라 생성되는 프로세스의 모습은 <그림.1>과 같다. <그림. 1> 에서 process 의 생성순서는 Processes 부분을 위에서 아래 방향으로 보면 된다. 그리고 indent(들여쓰기) 는 child process 라고 생각하면 된다.
instances 라고 되어 있는 부분의 순서는 명확하지 않다. instances 라고 되어 있는 부분은 VM instance/instance/structure 등을 전부 통틀어 표현했다.
<그림.1>을 설명을 하자면, Init 이 실행된 후에
- init 이 usbd/adbd/debuggerd/rild 의 deamon 을 child process 로 만든다.
- init 이 Zygote 를 만들어 낸다. Zygote 는 여러 child process 를 생성해서 가지고 있게 되는데, 이 child process 들에 exec() 를 이용해 Dalvik VM 을 만들어 내게 된다.
- init 이 runtime process 를 만든다.
- -> Service Manager 가 시작된다.
- -> Zygote 에게 System Server 를 띄우라고 한다.
- System Server는 여러 개의 Binder Service 를 띄운다.(이 중 하나가 Surface Flinger 이다.)
- 그리고 이 Service 들을 Service Manager 에 등록한다.
- 이런 여러개의 Binder Service가 다시 Manager 등을 띄운다.(Content Manager, Telephony 등)
- 이 Manager 들도 Service Manager 에 등록되어 진다.
이렇게 모든 과정이 끝난 후에 Home launcher 가 실행된다.(?)
그림. 1 android 부팅순서에 따른 모습 |
Reference
- 안드로이드의 모든 것 : 분석과 포팅 by 고현철, 유형목
댓글 없음:
댓글 쓰기