개요
안드로이드의 OS가 어떻게 구성되어 있는지 아십니까?
분명 공부한 기억은 있는데, 세세하게까지는 기억이 나지 않는다. 그래서 정리한다.
1. 안드로이드란?
안드로이드는 리눅스 커널 기반의 모바일 운영체제이다.
그래서 다음과 같은 특징을 가진다.
1-1. 특징
1) 리눅스 커널 기반
-> 프로세스 관리, 메모리 관리, 네트워크 관리, 전원 관리 등의 핵심 기능을 제공한다.
-> 리눅스의 멀티태스킹 기능을 활용해 여러 애플리케이션을 동시에 실행이 가능하다.
-> 커널 모듈을 이용해 다양한 하드웨어(카메라, 블루투스, Wi-Fi 등)를 지원한다.
2) 가상 머신(ART, Dalvik)
-> 안드로이드 애플리케이션은 기본적으로 가상 머신에서 실행되어, 각 앱은 독립된 프로세스로 동작한다.
* Dalvik
-> Android 4.4까지 사용된 가상머신이다.
-> DEX(Dalvik Executable) 포맷 사용
# 일반적인 JVM이 사용하는 Java 바이트코드(.class) 대신해서 DEX(.dex) 포맷을 사용해 실행 파일 크기를 줄이고, 모바일 환경에 최적화했다.
-> Just-In-Time (JIT) 컴파일 방식
# 앱이 실행될 때 필요한 코드만 실시간으로 컴파일해 실행한다.
# 첫 실행 속도가 빠르지만, 앱 실행 중에 컴파일 작업이 이루어직 때문에 성능 저하의 가능성이 있다.
* ART
-> Android 5.0부터 기본 런타임 환경으로 채택되어, Dalvik을 대체했다.
-> AOT 컴파일 방식
# 앱이 설치될 때 모든 코드를 미리 네이티브 코드로 변환해 저장한다.
# 이로 인해 실행 시 추가적인 컴파일 과정 없이 바로 실행되어 앱 실행 속도가 빠르다.
* JIT + AOT 하이브리드 방식
-> Android 7.0 이후, JIT를 일부 포함해서 하이브리드 방식으로 최적화했다.
-> 처음 실행할 때는 JIT로 실행 후, 이후에는 AOT로 최적화해 각각의 장점을 살리는 느낌
2. 안드로이드 아키텍처 및 구조
위의 그림에서 보다시피 안드로이는 5개의 주요 계층으로 구분된다. 하나씩 살펴보자
2-1. 리눅스 커널 계층
-> 커널의 경우 하드웨어와 OS를 연결하는 다리의 역할을 하며, 안드로이드 시스템의 핵심적인 부분을 관리한다.
-> 하드웨어 추상화
-> 메모리 관리
-> 보안 설정
-> 전원 관리
-> 다른 하드웨어 장치의 드라이버 관리
-> 네트워크 시스템 관리
2-2. 하드웨어 추상화 계층(HAL)
-> 하드웨어들은 기계어나 어셈블리어 같은 저급 언어를 사용하는데, 이 언어들이 복잡하기 때문에 자바 API 프레임워크가 기기 하드웨어의 기능을 사용할 수 있도록 한다.
-> 여러 모듈 형태로 이루어져 있고, 프레임워크 API가 하드웨어에 접근하기 위해서 호출 명령을 내리면 안드로이드 시스템에서 해당 하드웨어 구성요소에 대한 라이브러리 모듈을 불러온다.
2-3. 네이티브 라이브러리 계층(Native Libraries)
-> 우리가 일반적으로 사용하는 라이브러리 기능들이 모인 곳이다.
-> C/C++ 기반으로 작성된 네이티브 라이브러리를 제공한다.
: OpenGL ES
-> 그래픽 렌더링
: Media Framework
-> 오디오 및 비디오 처리
: SQLite
-> 데이터 저장
: WebKit
-> 웹 브라우저 엔진
2-4. 런타임 계층
-> 실행 중인 어플리케이션 코드들을 OS가 이해할 수 있도록 컴파일하는 계층이다.
-> ART, Dalvik (위에 설명)
-> Garbage Collector
2-5. 자바 API 프레임워크(= 어플리케이션 프레임워크)
-> 어플리케이션 개발을 위한 API를 제공한다.
: Activity Manager
-> 애플리케이션 생명주기 관리
: Content Providers
-> 애플리케이션 간의 데이터 공유 관리
: View System
-> UI 구성
: Notification Manager
-> 알림 시스템
: Resource Manager
-> 앱에서 사용하는 리소스들을 관리
: Location Manager
-> GPS 또는 기지국 신호를 통해 위치 정보 관리
2-6. 애플리케이션 계층
-> 사용자가 직접 실행하는 앱 (전화, 메시지, 브라우저, 서드파티 앱 등)
'Android > Android' 카테고리의 다른 글
[Android] Proguard란? (1) | 2025.02.13 |
---|---|
[Android] Retrofit2 & OkHttp3 (0) | 2025.02.11 |
[Android] 컴포넌트 - Broadcast Receiver (1) | 2025.01.27 |
[Android] 컴포넌트 - ContentProvider (0) | 2025.01.23 |
[Android] LaunchMode (0) | 2024.10.31 |