Android - Platform Architecture

Michael Kim·2021년 7월 7일
0

출처: 안드로이드 공식 페이지

안드로이드 플랫폼 아키텍처

Android는 다양한 기기와 폼 팩터(제품의 구조화된 형태)에 사용할 수 있도록 제작된 Linux(커널?) 기반의 오픈소스 소프트웨어 스택입니다.
image

Linux Kernel

Android 플랫폼의 기반은 Linux 커널(Linux의 구성 요소로서, 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스)입니다.
Linux 커널을 사용하면 Android가 주요 보안 기능을 활용하고 기기 제조업체(주로 SAMSUNG)가 널리 알려진 커널용 하드웨어 드라이버를 개발할 수 있습니다.
(주요 보안 기능 - 커널 보안: 프로세스 분리, 보안 IPC(프로세스 간 통신), 타 사용자의 파일, 메모리, CPU리소스, 하드웨어(전화, GPS, 블루투스)에 접근 권한 제한)

+) 커널의 역할 - 출처: Red Hat

1) 메모리 관리: 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는지를 추적합니다.
2) 프로세스 관리: 어느 프로세스가 중앙 처리 장치(CPU)를 얼마나 오랫동안 사용할지를 결정합니다.

  • 프로세스: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램과 프로그램의 상태가 메모리 상에서 실행되는 작업(task) 단위를 지칭한다.
  • CPU: 프로그램을 실행하기 위해 주기억장치(ROM:read only memory, 전원 끊겨도 O. RAM:random access memory, 휘발성, 고속.)에 저장된 프로그램 명령어와 데이터를 읽어와 처리, 결과를 다시 주기억장치에 저장하는 역할
  • 프로그램: 일반적으로 하드 디스크 등에 저장되어 있는 실행코드를 뜻한다.
    3) 장치 드라이버: 하드웨어와 프로세스 사이에서 중재자/ 인터프리터(해석기. 프로그램 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경)의 역할을 수행합니다.
    4) 시스템 호출 및 보안: 프로세스의 서비스 요청을 수신합니다.
    +)알기 쉬운 커널 😀: 커널은 강력한 경영진(하드웨어)을 위해 일하는 바쁜 비서입니다. 비서의 할 일은 직원 및 대중(사용자)으로부터 수신되는 메세지 및 요청(프로세스)을 경영진(하드웨어)에게 전달하고, 어디에 무엇이 저장되어 있는지 기억(메모리)하고, 특정한 시간에 누가 경영진(하드웨어)을 얼마 동안 만날 수 있는지 결정하는(=프로세스 스케쥴링) 것입니다.

HAL(하드웨어 추상화 계층)

HAL은 상위 수준의 Java API 프레임워크에 기기 하드웨어 기능을 노출하는 표준 인터페이스(센서 등 모듈으 사용을 위한 패키지)를 제공합니다. HAL은 여러 라이브러리 모듈로 구성되어 있으며, 카메라 또는 블루투스 모듈과 같은 특정 유형의 하드웨어 구성 요소를 위한 인터페이스를 구현합니다. 프레임워크 API가 기기 하드웨어에 접근하기 위해 호출을 수행하면 Android 시스템이 해당 하드웨어 구성 요소에 대한 라이브러리 모듈을 불러옵니다.
즉, 개발자가 센서, 하드웨어를 사용하 수 있도록 라이브러리를 제공한다!!

Android Runtime

Android 5.0(API Lv.21) 이상을 실행하는 기기의 경우, 각 앱이 자체 프로세스 내에서 자체 ART(안드로이드 런타임)인스턴스로 실행됩니다. ART는 DEX 파일을 실행하여 저용량 메모리 기기에서 여러 가상 머신을 실행하도록 작성되었습니다. DEX파일은 Android용으로 특별 설계된 Byte코드 형식으로, 최소 메모리 공간에 맞게 최적화되어 있습니다. Jack과 같은 Toolchain을 빌드하고, Java소스를 Andorid 플랫폼에서 실행될 수 있는 DEX 바이트코드로 컴파일합니다. Java의 목적은 Byte코드 하나만으로 여러 가지 아키텍쳐나 플랫폼에 작동할 수 있도록 돕는 것인데, 이를 위해 자바 가상 머신이 필요하다. 즉, ART는 자바를 사용하기 위한 실행환경으로 볼 수 있다

ART의 주요 기능 어렵다 자바에 대한 이해가 필요할 것 같다
(ART 나무위키: https://namu.wiki/w/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%20%EB%9F%B0%ED%83%80%EC%9E%84)

AOT(Ahead-of-Time) 및 JIT(Just-in-Time) 컴파일
최적화된 가비지 컬랙션(메모리 관리 기법, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다.
Android(API Lv.28)이상에서 앱 패키지의 DEX 형식 파일이 더욱 간소한 기계 코드로 변환
전용 샘플링 프로파일러, 상세 진단 예외 및 크래시 보고, watchpoint를 설정하여 특정 필드를 모니터링할 수 있는 기능을 비롯한 향상된 디버깅 지원 기능

Native C/C++ 라이브러리

(NDK: https://developer.android.com/ndk/guides/stable_apis?hl=ko)

ART, HAL 등 많은 핵심 Android 시스템 구성 요소와 서비스가 C/C++로 작성된 네이티브 라이브러리를 필요로 하는 네이티브 코드를 기반으로 빌드되었습니다. Android 플랫폼은 Java 프레임워크 API를 제공하여 이러한 일부 네이티브 라이브러리의 기능을 앱에 노출합니다.
ex) Android 프레임워크의 Java OpenGL(2D 및 3D 그래픽 지원 라이브러리) API를 통해 OpenGL ES에 접근하여 앱에서 2D 및 3D 그래픽을 그리고 조작할 수 있는 지원 기능을 추가할 수 있습니다.

+) OpenGL의 기능의 예- 그림 객체의 좌표 매핑을 통해, 화면 크기와 모양에 따라 유연하게 그림 객체가 출력될 수 있도록 돕는다.

C/C++ 코드가 필요한 앱을 개발하는 경우에는 Android NDK를 사용하여 네이티브 코드에서 직접 이러한 몇몇 네이티브 플랫폼 라이브러리(메모리, 네트워킹, 센서, 저장용량, 입력 등)에 액세스할 수 있습니다.

Java API Framework

(https://developer.android.com/reference/packages?hl=ko)

Android OS는 Java언어로 작성된 API를 통해 접근할 수 있습니다. 이 API를 이용하여 Android앱이 제작됩니다.

  • View 시스템: 목록, 그리드, 텍스트 상자, 버튼 등 앱의 UI를 빌드
  • Resource Manager: 문자열, 그래픽 및 레이아웃 파일 같은 리소스(특히 xml파일)에 대한 액세스 제공
  • Notification Manager: 모든 앱이 상태 표시줄에 사용자 지정 알림을 표시할 수 있도록 지원
  • Activity Manager: 앱의 수명 주기를 관리하고 탐색 백 스택(뒤로가기 버튼 클릭했을 때 일어나는 것들...)을 제공한다.
  • 콘텐츠 제공자: 앱이 다른 앱의 데이터에 접근하거나 공유할 수 있도록 지원

시스템 앱

Android는 이메일, 메시지, 캘린더, 인터넷 검색, 주소록 등 주요 앱 세트를 제공합니다. ex) SMS앱을 이용하여 타 앱에서 SMS보내기, 번호를 통하여 전화앱에 연결하기, 검색할 때 키보드앱 호출하기

profile
정리하고 복습하고 일기도 쓰고

0개의 댓글