안드로이드 부팅 시 작동 순서

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

BELATED ARTICLES

more