[Android] 안드로이드 구조와 부팅 과정
안드로이드 구조
는 크게 5개의 계층으로 구성되어 있다.
리눅스 커널 계층
리눅스 커널은 안드로이드의 가장 기본적인 계층으로, 하드웨어와 소프트웨어의 중간 역할을 한다. 프로세스 관리, 메모리 관리, 파일 시스템 관리, 네트워크 관리 등의 기능을 제공한다.
리눅스 커널은 안드로이드 기기의 하드웨어를 관리하고, 안드로이드 프레임워크 및 애플리케이션이 실행되기 위한 기본적인 환경을 제공한다.
하드웨어 추상화 계층(HAL)
HAL은 하드웨어와 소프트웨어의 차이를 추상화하여, 하드웨어에 대한 접근을 단순화한다. 예를 들어, 카메라, 화면, 오디오 등 다양한 하드웨어 장치에 대한 접근을 HAL을 통해 제공한다.
HAL은 안드로이드 프레임워크 및 애플리케이션이 하드웨어에 직접 접근하지 않고도 하드웨어를 사용할 수 있도록 한다.
네이티브 라이브러리/안드로이드 런타임 계층
네이티브 라이브러리/안드로이드 런타임 계층은 C/C++로 작성된 라이브러리와 안드로이드 런타임을 포함하는 계층이다.
라이브러리는 HAL에서 제공하는 하드웨어에 대한 기능을 구현하며 안드로이드 런타임은 안드로이드 애플리케이션이 실행되기 위한 기본적인 환경을 제공한다.
ex)
{ **Android Runtime (ART)**은 안드로이드 운영체제에서 자바 애플리케이션을 실행하기 위한 가상 머신이며 안드로이드 버전 5.0(API 레벨 21) 이상을 실행하는 기기에서 사용된다.
ART는 다음과 같은 기능을 제공한다.
- 자바 바이트코드를 기계어로 컴파일하여 실행 효율을 높인다.
- 가비지 컬렉션을 사용하여 메모리를 효율적으로 관리한다.
- 디버깅을 지원하여 애플리케이션의 문제를 진단하고 해결할 수 있도록 한다.
ART는 네이티브 라이브러리/안드로이드 런타임 계층에 속하고 이 계층은 C/C++로 작성된 라이브러리와 안드로이드 런타임을 포함한다. }
애플리케이션 프레임워크 계층
애플리케이션 프레임워크 계층은 안드로이드 애플리케이션이 개발되고 실행되는 계층이다.
Activity, Service, Broadcast Receiver, Content Provider 등의 구성 요소를 제공하여, 안드로이드 애플리케이션의 기본적인 동작을 구현할 수 있도록 한다.
ex)
{ 뷰시스템은 안드로이드 애플리케이션의 사용자 인터페이스(UI)를 구성하는 데 사용되는 프레임워크이다. 뷰시스템은 다음과 같은 기능을 제공한다.
- 뷰(View)의 생성, 관리 및 이벤트 처리
- 레이아웃(Layout)의 관리
- 애니메이션 및 전환(Transition)의 지원
뷰시스템은 애플리케이션 프레임워크 계층에 속한다.}
{ 안드로이드 시스템 서비스는 안드로이드 운영체제의 기본적인 기능을 제공하는 서비스이다. 안드로이드 시스템 서비스는 다음과 같은 기능을 제공한다.
- 네트워킹
- 파일 시스템
- 보안
- 위치 서비스
- 하드웨어 제어
안드로이드 시스템 서비스는 애플리케이션 프레임워크 계층에 속한다}
애플리케이션 계층
애플리케이션 계층은 사용자가 직접 사용하는 안드로이드 애플리케이션이 포함된 계층이다.
안드로이드 프레임워크를 사용하여 개발된 애플리케이션은 이 계층에서 실행된다.
안드로이드 부팅 과정
- 전원 켜기 및 하드웨어 초기화:
- 전원을 켜면 안드로이드 기기의 하드웨어가 초기화된다.
- Power-On Self-Test (POST)가 실행되어 하드웨어의 기본 상태를 확인하고 초기화한다. ( POST가 완료되면 부트로더가 실행 )
- 부트로더(bootloader)가 실행된다. 부트로더는 기기의 하드웨어를 초기화하고, 커널을 메모리에 로드한다.
- 커널(kernel)이 실행된다. 커널은 기기의 하드웨어를 관리하고, 프로세스와 메모리를 관리한다.
- init 프로세스가 실행된다. init 프로세스는 기기의 장치를 초기화하고, 안드로이드 시스템 서비스를 시작한다.
- 안드로이드 시스템 서비스가 시작된다. 안드로이드 시스템 서비스는 안드로이드 운영체제의 기본적인 기능을 제공한다.
- **사용자 인터페이스(UI)**가 시작된다. UI는 사용자가 기기를 조작할 수 있는 인터페이스를 제공한다.
전원 켜기 및 하드웨어 초기화
전원을 켜면 기기의 전원 공급 장치가 활성화되고, 기기의 메모리가 초기화된다. 그런 다음, Power-On Self-Test (POST)가 실행되어 하드웨어의 기본 상태를 확인하고 초기화한다. POST는 다음과 같은 작업을 수행한다.
- 메모리 테스트
- CPU 테스트
- 하드웨어 장치 테스트
POST가 완료되면 부트로더가 실행된다.
부트로더
부트로더는 기기의 플래시 메모리에 저장되어 있다. 부트로더는 다음과 같은 작업을 수행한다.
- 기기의 펌웨어를 검사
- 운영 체제를 시작하기 위한 준비
- 사용자 정의 부트로더 실행
부트로더가 완료되면 커널을 로드한다.
커널
커널은 안드로이드 운영 체제의 가장 기본적인 부분입니다. 커널은 다음과 같은 작업을 수행한다.
- 하드웨어 관리
- 프로세스 관리
- 메모리 관리
- 파일 시스템 관리
- 네트워킹 관리
커널이 완료되면 init 프로세스를 시작한다.
init 프로세스
init 프로세스는 안드로이드 시스템의 초기화 및 관리를 담당하는 프로세스이다. init 프로세스는 다음과 같은 작업을 수행한다.
- 기기의 장치 초기화
- 안드로이드 시스템 서비스 시작
- zygote 프로세스 시작
init 프로세스가 완료되면 안드로이드 시스템 서비스가 시작된다.
안드로이드 시스템 서비스
안드로이드 시스템 서비스는 안드로이드 운영 체제의 기본적인 기능을 제공하는 서비스이다. 안드로이드 시스템 서비스는 다음과 같은 작업을 수행한다.
- 네트워킹
- 파일 시스템
- 보안
- 위치 서비스
- 하드웨어 제어
안드로이드 시스템 서비스가 완료되면 zygote 프로세스가 시작된다.
Zygote 프로세스
Zygote 프로세스는 안드로이드에서 앱 프로세스를 생성하는데 사용되는 프로세스이다. Zygote 프로세스는 다음과 같은 작업을 수행한다.
- 앱 프로세스의 기본 환경을 구성
- 앱 프로세스의 기본 라이브러리를 로드
Zygote 프로세스가 완료되면 앱 및 사용자 인터페이스가 로딩된다.
앱 및 사용자 인터페이스 로딩
앱 및 사용자 인터페이스가 로딩되면 안드로이드 기기가 사용자에게 사용할 수 있는 상태가 된다. 사용자 인터페이스를 담당하는 시스템 프로세스들이 시작되며, 홈 화면이 표시된다. 사용자가 앱을 실행하면 해당 앱의 프로세스가 생성되고 실행된다.
