안드로이드 부팅 시 작동 순서
2023. 3. 20. 02:17

1. Boot ROM
: 파워 버튼을 누르면, ROM 내부의 Boot ROM 코드가 실행된다.
-> RAM으로 Bootloader의 첫 번째 단계를 로드한다.
2. Bootloader
: 커널을 디바이스로 불러오는 역할을 하는 프로그램이다.
- 커널을 디바이스로 불러오는 역할을 하는 프로그램이다.
- 운영체제 시작 전 장치가 어떻게 시작하는지 알려주고 kernel을 찾는 명령어를 가진 low-level 코드이다.
- 커널을 실행하기 위해 필요한 보드나 프로세서, 시계, 키패드, 네트워크, 메모리 등을 셋업하는 역할을 한다.
- Ram(메모리) 초기화, HW 초기화한다.
- kernel과 Ramdisk를 RAM으로 올린다. (kernel 시작 지점으로 점프해서 kernel을 시작시킨다.)
- Bootloader는 비휘발성 메모리에 상주한다.
정리하면 총 2단계로 진행된다.
1. Primary Bootloader : Secondary Boot Loader를 디스크 내 특정 위치에서 로드한다.
2. Secondary Bootloader : RAM(메모리)를 초기화하고, RAM의 "boot" flash 위치에 kernel을 로드한다.
3. 안드로이드 커널
: 메모리, 캐시 등을 셋업하고 스케쥴링하는 작업을 한다.
- 커널이 로드되면 캐시, 메모리 보호, 예약, 인터럽트 컨트롤러, 스케줄링을 설정하고 드라이버를 로드한다.
- 안드로이드는 리눅스 기반의 플랫폼이기 때문에 Bootloader를 통해 리눅스 커널이 부팅되면 일반적인 리눅스 부팅처럼 커널 초기화 작업을 거친다.
- 커널이 이러한 시스템 셋업 과정들을 끝내고 부팅을 완료하면 마지막으로 시스템 파일 중 "init" 파일을 찾아 root process 또는 시스템의 첫 프로세스로 지정된 것을 실행한다.
4. init process
: 첫 번째 프로세스로, 모든 프로세스들의 루트 프로세스이다.
- 안드로이드 init 프로세스는 각종 디바이스를 초기화한다. 프레임워크 동작에 필요한 각종 데몬, 컨텍스트 매니저(Context Manager), 미디어 서버(Media Server), Zygoto 등을 실행한다.
<init 프로세스가 실행하는 데몬 프로세스>
- USB 데몬(usbd) : USB 연결 관리
- 안드로이드 디버그 브릿지 데몬(adbd) : ADB 연결 관리
- 디버거 데몬 : 디버그 시스템 시작
- 무선 인터페이스 레이어 데몬(rild) : 무선 통신 연결 관리
-> 이 단계에서 기기 전원을 킬 때 처음으로 보이는 화면인 안드로이드 로고를 볼 수 있다.
5. Zygote 초기화
: 안드로이드 어플리케이션의 로딩 시간을 단축하기 위해 고안된 프로세스이다.
- 모든 자바 기반 안드로이드 어플리케이션은 Zygote를 통해 포크된 프로세스 상에서 동작한다.
- 해당 프로세스는 어플리케이션이 실행되기 전에 실행된 VM의 코드 및 메모리 정보를 공유함으로써 어플리케이션이 실행되는 시간을 단축시킬 수 있다.
- Zygote는 Virtual Machine을 구동한 이후, Virtual Machine Instance를 생성해 System Server라는 자바 서비스를 실행한다.
6. System Server
: 핵심 안드로이드 서비스를 실행한다.
- 안드로이드 프레임워크를 구성하는 중요한 컴포넌트로서 카메라, 오디오, 비디오 처리에서부터 각종 어플리케이션 제작에 필요한 중요 API를 제공하는 역할을 수행한다.
- Zygote에서 최초로 포크되어 실행되는 안드로이드 어플리케이션 프로세스이다.
- System Server에서 실행하는 자바 시스템 서비스도 안드로이드 어플리케이션이나 프레임워크 내부 모듈에서 개발자가 사용할 수 있게 하기 위해서 Context Manager에 등록되어 있어야 한다.
- 각 서비스에 대해 서비스를 초기화하고, Service Manager에 등록한다.
'Android - 이론' 카테고리의 다른 글
JNI와 NDK (0) | 2023.03.11 |
---|---|
안드로이드에서 사용하는 자바와 코틀린 (0) | 2023.03.10 |
APKTool과 디컴파일 (0) | 2023.03.10 |
안드로이드 개념 및 4대 구성요소 (0) | 2023.03.08 |