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

안드로이드의 프로세스 - booting process

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

URL : http://bulldozer121.tistory.com/9


.....


안드로이드 플랫폼의 구조는

Linux kernel (display driver, camera driver, usb driver, wifi driver, power management, etc,.)

Libraries (surface manager, media framework, SQLite, etc,.)

Android runtime (dalvik virtual machine, core libraries)

Application framework (activity manager, window manager, view system, package manager, etc,.)

Applications (home, dialer, browser, camera, alarm, calculator, email, albums, clock, etc,.)


위 5 가지로 구분된다고 보면된다.


안드로이드의 소스 코드는

kernel, bionic, bootloader, build, cts, dalvik, external, frameworks, hardware, packages, system 으로 구성되어 있다.


.....



간단히 안드로이드의 부팅 프로세스를 적어보면


1. linux kernel

-> 부팅 시 bootloader 를 통해 linux kernel 이 시작된다. 이 과정에서는 커널 초기화가 이루어 지고 마지막 과정에서 init process 가 호출되어 진다.


2. init

-> init process 는 각 device 를 초기화 하며, framework 동작에 필요한 각 daemon, context manager, media server, zygote 등을 실행한다.


2-1. daemon

-> init process 에서 실행하는 daemon process 는 다음과 같다.

* adbd = Android Debug Bridge 연결관리

* usbd = USB 연결관리

* debuggerd = debug system 의 시작관리

* rild = 무선 통신 연결관리


2-2. context manager

-> 안드로이드의 system service 를 관리하는 process 이다. 여기에서 system service는 framework 를 구성하는 component 이며, 각종 application 제작에 필요한 API 를 제공하는 등의 역할을 한다.


2-3. media server

-> audio flinger 나 camera service 와 같이 C/C++ 기반으로 작성된 native system service 를 실행하는 역할을 한다.


2-4. zygote

-> android application 의 loading time 을 단축하기 위한 process 이다. Java 기반의 android application 은 모두 zygote 를 통해 fork 된 process 상에서 동작되어 진다.


2-4-1. system server

-> zygote 에서 최초로 fork 되어 실행되는 android application process 이다. 주로 activity manager, location manager service 와 같은 Java system service 를 실행하는

역할을 한다.


여기까지의 과정이 부팅의 시작부터 framework 가 초기화 되는 부분까지이다.


.....


 위 init process 의 진행과정을 보면 각 process 간에 부모/자식 관계와 같은 생성 관계가 존재한다.

이런 process 간의 관계를 알아보는 것은 adb 를 이용하면 아주 간단하게 확인할 수 있다.


adb shell

$ps


를 이용하여 PIDPPID 를 확인하면 간단히 알 수 있다.

PPID 번호가 1 인 process 는 PID 번호가 1인 process 가 생성한 process 이다.

이 관계를 보면 init process 가 zygote 를 생성하였고 zygote process 가 수많은 seveice 와 process 를 실행한 것을 눈으로 확인할 수 있다. 단순히 terminal emulator 에서 ps 옵션으로도 확인이 가능하다.

'Programming > Android Kernel,Native' 카테고리의 다른 글

zygote process  (0) 2014.10.11
안드로이드의 프로세스 - init process_1  (0) 2014.10.08
Init 프로세스 동작  (0) 2014.10.08
[android] ART ( android runtime ) 이란?  (0) 2014.05.14
ASHMEM  (0) 2014.05.14