Android 시스템 부팅 과정 개요
Android 운영체제는 리눅스 커널을 기반으로 한 복잡한 구조를 가지고 있으며, 시스템이 부팅되는 과정도 여러 단계로 이루어져 있습니다. 본 포스팅에서는 Android 시스템이 전원을 켠 후 정상적으로 동작하기까지의 주요 부팅 과정을 설명하겠습니다. 필요에 따라 AOSP(Android Open Source Project) 코드를 참고하여 설명을 보완하겠습니다.
1. Android 부팅 과정 개요
Android 시스템의 부팅 과정은 다음과 같이 주요 단계로 구분됩니다.
- 부트로더(Bootloader) 실행
- 커널 및 init 프로세스 실행
- Zygote 및 System Server 실행
- 애플리케이션 프레임워크 및 런처 실행
각 단계는 시스템이 정상적으로 부팅되기 위해 필수적인 역할을 수행합니다. 이제 각 단계를 자세히 살펴보겠습니다.
2. 부트로더(Bootloader) 실행
부트로더는 Android 시스템이 실행되기 전에 가장 먼저 실행되는 프로그램입니다. 부트로더는 SoC(System on Chip) 제조업체에 따라 다르게 구현될 수 있으나, 기본적인 역할은 공통적입니다.
- 하드웨어 초기화: CPU, RAM, 저장 장치 등을 초기화합니다.
- 부트 파티션 로딩: 부트 이미지를 RAM에 로드합니다.
- 커널 실행: 리눅스 커널을 로드하고 실행합니다.
AOSP에서는 부트로더와 관련된 부분이 bootable/bootloader/
디렉터리 내에 정의되어 있습니다.
3. 커널 및 init 프로세스 실행
3.1 리눅스 커널 로딩
부트로더가 커널을 로드하면, 커널이 실행을 시작합니다. 이 과정에서 다음과 같은 작업이 수행됩니다.
- CPU 및 메모리 관리 초기화
- 드라이버 로드 (스토리지, 네트워크, 디스플레이, 오디오 등)
- 파일 시스템 마운트 (주로
ramdisk
) - 첫 번째 사용자 공간 프로세스인
init
실행
3.2 init 프로세스 실행
커널이 초기화된 후 가장 먼저 실행되는 사용자 공간 프로세스가 init
입니다. Android의 init
은 일반적인 리눅스 시스템의 init
과 다르게 동작하며, AOSP의 system/core/init/
에 해당 코드가 존재합니다.
init
의 주요 역할은 다음과 같습니다.
init.rc
스크립트 실행- 기본적인 시스템 서비스 시작 (예:
ueventd
,vold
등) Zygote
및System Server
실행
다음은 init.rc
에서 정의된 일부 서비스 예제입니다.
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
class main
user root
group root
onrestart restart zygote
이와 같이 zygote
는 init
프로세스에 의해 실행되도록 정의됩니다.
4. Zygote 및 System Server 실행
4.1 Zygote
Zygote는 Android 시스템에서 애플리케이션 프로세스를 생성하는 역할을 담당하는 핵심 프로세스입니다. app_process
바이너리를 통해 실행되며, Java VM을 초기화하고 기본적인 시스템 클래스를 로드합니다.
Zygote의 주요 역할은 다음과 같습니다.
- Java VM 생성 및 초기화
- 기본적인 Android 시스템 클래스 로딩
System Server
실행- 애플리케이션 프로세스 fork
Zygote는 com.android.internal.os.ZygoteInit
클래스를 통해 초기화되며, main()
메서드가 실행됩니다.
public static void main(String argv[]) {
ZygoteServer zygoteServer = new ZygoteServer();
RuntimeInit.enableDdms();
preload();
zygoteServer.run();
}
4.2 System Server
Zygote가 실행되면 System Server
를 fork하여 실행합니다. System Server
는 Android의 핵심 시스템 서비스를 관리하는 프로세스로, 다음과 같은 주요 서비스를 초기화합니다.
- Activity Manager Service (AMS): 애플리케이션 생명주기 관리
- Window Manager Service (WMS): UI 및 윈도우 시스템 관리
- Package Manager Service (PMS): 애플리케이션 패키지 관리
- Power Manager Service (PMS): 전원 관리
System Server는 com.android.server.SystemServer
클래스에서 실행됩니다.
public static void main(String[] args) {
new SystemServer().run();
}
5. 애플리케이션 프레임워크 및 런처 실행
System Server
가 실행되면, Activity Manager Service
(AMS)가 Launcher
애플리케이션을 실행합니다. 사용자는 이때 홈 화면을 보게 됩니다.
5.1 애플리케이션 프로세스 생성
사용자가 앱을 실행하면 AMS는 Zygote
를 통해 새로운 프로세스를 fork하여 애플리케이션을 실행합니다.
5.2 런처(Launcher) 실행
Android 시스템이 정상적으로 부팅되면, 기본 런처가 실행되며 홈 화면이 나타납니다. 런처는 패키지 매니저를 통해 설치된 애플리케이션 목록을 조회하고 UI를 구성합니다.
6. 결론
Android 시스템의 부팅 과정은 부트로더, 커널, init
, Zygote
, System Server
, 그리고 애플리케이션 프레임워크 실행 순서로 진행됩니다. 각 단계는 시스템이 정상적으로 동작하기 위한 중요한 역할을 수행하며, AOSP 코드를 참고하면 각 구성 요소가 어떻게 동작하는지 더욱 깊이 이해할 수 있습니다.
'Android > Framework' 카테고리의 다른 글
HAL이 필요한 이유 (0) | 2025.03.19 |
---|---|
커스텀 Android 빌드 환경 구성하기 (0) | 2025.03.18 |
Android 빌드 시스템의 구조 (Soong, Makefile) (0) | 2025.03.17 |
Android의 전체 아키텍처 개요 (0) | 2025.03.15 |
Android의 역사와 발전 과정 (0) | 2025.03.14 |