관리 메뉴

나만을 위한 블로그

[Android] 안드로이드 OS의 구조 본문

Android

[Android] 안드로이드 OS의 구조

참깨빵위에참깨빵 2021. 10. 8. 19:49
728x90
반응형

안드로이드의 구조를 그림으로 보면 아래와 같다.

 

다른 이미지도 있는데 각 이미지에서 보이는 영역의 이름만 조금 다르고 하는 일은 똑같다.

 

맨 위부터 응용 프로그램, 응용 프로그램 프레임워크, 라이브러리, 안드로이드 런타임, 리눅스 커널의 총 5개 계층으로 분류돼 있다.

또한 안드로이드의 OS는 리눅스 기반이고 쓰이는 언어는 자바, 코틀린이다.

 

리눅스 커널 계층

 

OS가 리눅스 기반으로 설계됐기 때문에 커널도 리눅스로 만들어져 있다. 여기서 커널은 하드웨어, OS를 연결하는 다리 역할을 하는 것이다.

이 계층은 안드로이드 계층의 맨 밑에 위치해 있으며 안드로이드 시스템의 핵심적인 부분을 관리한다. 이 곳에서 하는 일은 아래와 같다.

 

  • 하드웨어 추상화
  • 메모리 관리
  • 보안 설정
  • 전원 관리
  • 다른 하드웨어 장치의 드라이버 관리(카메라, 블루투스, 오디오 등)
  • 네트워크 시스템 관리

 

사용자, 개발자가 이 계층을 다룰 일은 없다.

 

하드웨어 추상화 계층

 

이 계층에 대해 안드로이드 소스가 말하는 내용은 아래와 같다.

https://source.android.com/devices/architecture?hl=ko 

 

Android 아키텍처  |  Android 오픈소스 프로젝트  |  Android Open Source Project

Android 아키텍처 Android 시스템 아키텍처에는 다음과 같은 구성요소가 포함됩니다. 그림 1. Android 시스템 아키텍처 애플리케이션 프레임워크. 애플리케이션 프레임워크는 애플리케이션 개발자가

source.android.com

하드웨어 추상화 계층(HAL)은 하드웨어 공급업체에서 구현해야 하는 표준 인터페이스를 정의하며 안드로이드에서 하위 드라이버 구현을 고려하지 않아도 되게 해주는 시스템이다. 이걸 쓰면 상위 수준 시스템을 수정하거나 시스템에 영향을 주지 않고도 기능을 구현할 수 있다. HAL 구현은 모듈로 패키징되며 적절한 시점에 안드로이드 시스템에 의해 로드된다.

 

하드웨어들은 기계어나 어셈블리어 같은 저수준 언어를 사용한다. 이 언어들이 복잡하기 때문에 이 부분을 감추고 표준 인터페이스를 제공해 자바 API 프레임워크가 기기 하드웨어 기능을 사용할 수 있게 한다. 여러 모듈 형태로 이뤄져 있고 카메라 모듈 또는 블루투스 모듈 같은 유형으로 하드웨어 구성 요소의 인터페이스를 구현한다. 프레임워크 API가 하드웨어에 접근하기 위해 호출 명령을 내리면 안드로이드 시스텡메서 해당 하드웨어 구성요소에 대한 라이브러리 모듈을 불러온다.

안드로이드 8.0 이상인 경우 기존 HAL과 조금 다른 HAL을 사용한다. 이 내용이 더 궁금하다면 아래 링크 참고.

https://source.android.com/devices/architecture/hal-types?hl=ko 

 

HAL 유형  |  Android 오픈소스 프로젝트  |  Android Open Source Project

HAL 유형 Android 8.0 이상에서는 좀 더 모듈식에 가까운 새 아키텍처를 채택하도록 하위 수준 레이어가 재작성됩니다. Android 8.0 이상을 실행하는 기기는 HIDL로 작성된 HAL을 지원해야 하지만 아래와

source.android.com

 

네이티브 라이브러리 계층

 

일반적으로 사용하는 라이브러리 기능들이 모인 곳인데 좀 더 저수준에서 동작하는 라이브러리다.

왜냐면 안드로이드는 메인 메모리가 거의 없고 CPU 전원이 낮은 기기에서 실행돼야 하므로 CPU, GPU 집약적 작업을 위한 라이브러리들은 기기에 최적화된 네이티브 코드로 컴파일되야 한다.

오디오와 비디오 코덱을 포함하고 음악, 영상, 사진 등의 미디어 처리를 담당하는 Media Framework, 화면의 창 구성을 처리하는 Surface Manager를 비롯한 여러 매니저와 프레임워크가 있고 아래의 오픈소스 라이브러리들이 담겨져 있다.

 

  • SGL : 2D 그래픽 담당
  • OpenGL ES : 2D/3D 그래픽 담당. AR 앱을 만들 때 이 이름의 클래스를 다룬 적이 있다.
  • Free Type : 폰트 렌더링
  • WebKit : 웹 브라우저 엔진
  • libc : 시스템 C 라이브러리
  • SQLite : 모바일을 위한 경량화된 로컬 DB
  • Open SSL(Secure Socket Layer 프로토콜)

 

런타임 계층

 

실행 중인 어플리케이션 코드들을 OS가 이해하도록 컴파일하는 계층이다.

안드로이드는 자바 언어의 저작권, 성능 문제 등 여러 요인으로 JVM을 쓰지 않고 DVM(달빅 VM)을 사용해오다가 ART(Android RunTime)을 사용하게 됐다.

달빅에선 실행 중에 컴파일하는 JIT(Just In Time) 컴파일 방식을 썼었는데 이 방식은 메모리를 많이 차지한다는 단점이 있다. 그래서인지 안드로이드 롤리팝(2014)부터는 달빅 VM을 폐지하고 ART를 새 런타임으로 완전히 대체했다.

ART 방식은 앱 설치 시 미리 기계어로 해석해놓고(Ahead-Of-Time, AOT), 앱 실행 시에는 바로 실행하는 방식으로 성능을 향상시켰다. 그러나 성능은 향상시켰지만 앱 설치 시 요구되는 용량이 늘었다.

이 ART 방식을 사용해오다가 안드로이드 누가(2016)부터는 JIT, ART 방식 모두 사용하는 하이브리드 형태로 바뀌었다. 이 내용의 근거는 아래 링크에 있다.

https://source.android.google.cn/devices/tech/dalvik/configure?hl=ko 

 

ART 구성  |  Android 오픈소스 프로젝트  |  Android Open Source Project

 

자바 API 프레임워크 계층

 

개발자가 코드를 작성하는 어플리케이션 계층과 자바 API 프레임워크 계층 밑의 계층들과 소통할 수 있도록 하는 다리 역할을 하며, 액티비티 생명주기와 언어 설정 등 프레임워크 수준의 기능을 담당한다. 즉, 안드로이드 개발자가 자주 이용하는 부분이 여기다.

추가로 안드로이드의 프레임워크 종류는 아래와 같은 것들이 있다.

 

  • Activity Manager : 애플리케이션 안의 액티비티들을 관리
  • Content Providers : 애플리케이션 간의 데이터 공유 관리
  • Telephony Manager : 음성통화 관리
  • Location Manager : GPS 또는 기지국 신호를 통해 위치 정보 관리
  • Resource Manager : 앱에서 사용하는 리소스들 관리
  • View System : UI에 쓰이는 안드로이드 뷰들을 관리
  • Notification Manager : 알림 관리

 

앞서 말한대로 이 계층부터는 자바로 작성되며, 기본 네이티브 라이브러리(SQLite 등)와 안드로이드 런타임을 추상화한 계층이다.

 

어플리케이션 계층

 

이 최상위 계층이 일반 사용자들이 접하는 계층으로, 안드로이드 기본 제공 앱(전화, 문자, 캘린더, 계산기 등)과 스토어에서 다운받은 앱들이 속해서 각자의 기능들이 실행되는 영역이다. 개발자라면 자신이 구현한 기능들을 테스트하는 계층이기도 하다.

 

 

참고한 사이트)

 

https://www.charlezz.com/?p=792 

 

안드로이드의 구조 | 찰스의 안드로이드

Android Architecture 안드로이드 구조는 위의 이미지와 같이 다섯계층의 구조로 이루어져 있습니다. 리눅스 커널 계층 네이티브 라이브러리 계층 안드로이드 런타임 계층 애플리케이션 프레임워크

www.charlezz.com

 

https://bearhunter49.tistory.com/4

 

Android Architecture(안드로이드 구조)

공부 할 겸 안드로이드 구조에 대해 써봅니다! 안드로이드 구조  안드로이드 구조는 왼쪽의 사진과 같이 대표적으로 5계층으로 나뉘어져 있습니다. 리눅스 커널 계층 하드웨어 추상화(HAL) 계층

bearhunter49.tistory.com

 

https://m.blog.naver.com/searphiel9/221000280654

 

안드로이드 플랫폼 아키텍쳐의 구조

안드로이드 플랫폼 아키텍쳐의 구조안드로이드의 구조를 알아보고 애플리케이션이 어떻게 구동되는지 추론...

blog.naver.com

 

https://softwaree.tistory.com/52

 

안드로이드 Dalvik과 ART, JIT과 AOT 차이점

apk를 설치하면 실행파일의 경우 storage에 dex 파일로 저장됩니다. dex 파일은 byte code로 이루어져 있기 때문에 이를 실행하려면 단말의 cpu에 맞게 machine code로 변환하여야 합니다. 이 machine code로 프

softwaree.tistory.com

 

https://www.javatpoint.com/android-software-stack

 

Android Architecture | Android Software Stack - javatpoint

Android Architecture or Android Software Stack with linux kernal, libraries, android runtime, android framework, application with examples of Activity and Intent, Fragments

www.javatpoint.com

 

https://source.android.google.cn/devices/tech/dalvik/configure?hl=ko 

 

ART 구성  |  Android 오픈소스 프로젝트  |  Android Open Source Project

 

https://www.linkedin.com/pulse/android-application-framework-mayur-sojitra/

 

Android Application Framework

Android Architecture as shown in below image can be subdivided into five layers: The kernel and low level tools, native libraries, the Android Runtime, the framework layer and on top of all the applications. Green items are written in C/C++, blue items are

www.linkedin.com

 

반응형
Comments