play/Android

[Android] OS Architecture : 운영체제 구조 정리

카고형 2023. 6. 27. 02:55
728x90

[Android] 공격 방식 정리

[Android] 폴더 구조, APK파일 구조


소프트웨어 스택 [출처 https://developer.android.com/guide/platform?hl=ko#hal]

 

1. Linux Kernel

 Linux 커널의 핵심 기능은 보안, 장치 드라이버 지원, 전원 관리, 메모리 관리, 하드웨어 추상화를 제공합니다. 

  • 보안 : 하드웨어와 프로세서의 보안을 말하고, 파일 권한, 사용자 관리 및 프로세스 격리을 통해 제어 합니다.
  • 장치 드라이버 : 하드웨어 구성요소인 디스프레이, 각종 센서, 카메라, 오디오, 무선 모듈 및 기타 주변장치를 제어 하는데 필요한 드라이버 모음이 있습니다.
  • 전원 관리 : 베터리 수명을 최적화 하기위해 커널은 전원을 절약하고, 베터리 성능을 확장 하기 위래 CPU 주파수 스케일링, 장치 일시 중단 및 상태 관리등을 합니다.
  • 자원 관리 : 프로세스에 대한 메모리 리소스를 할당 하고 관리하여 효울적 관리, 프로그램 실행을 원만하게 하는 스케줄링 
  • 하드웨어 추상화 : 커널에서 android 플랫폼이 하드웨어가 독립적으로 행동 할 수 있도록 추상화 계층을 제공 합니다.  하드웨어적 복잡한 내부를 감추고 일관성 있는 인터페이스를 제공 합니다.

 

2. HAL(Hardware Abstraction Layer)

하드웨어 추상화 계층은 하드웨어에 대한 공통 명령어 집합들로 이루어져 있으며,카메라 또는 블루투스 모듈과 같은 특정 유형의 구성 요소를 위한 인터페이스를 구현하고 프레임 워크에 따라 호출을 수행 하면 해당 하드웨어 구성 요소에 대한 라이브러리 모듈을 제공 한다. 

 

3. Android Runtime

android 버전 5.0(API 레벨 21) 이사을 실행하는 기기의 경우 각 앱이 자체 프로세서 내에서 ART 인티턴스로 실행 됩니다. ART는 DEX 파일을 실행하여 저용량 메모리 기기에서 여러 가상 머신을 실행 하도록 작성 되어 있고, DEX 파일은 안드로이드용으로 설계된 바이트코드 형식으로 메모리 공간에 맞게 최적화 되어 있습니다.  Jack과 같은 툴체인을 빌드 하고 Dex 바이트 코드로 컴파일 합니다.

최적화된 GC(Garbage Collector: 메모리 관리)

 

Dalvick VM(Virtual Machine) 과 ART

안드로이드도 자바를 사용 하는데 안드로이 최적화된 달빅VM과 ART가 JVM 역활을 한다.

  •  ART  -  AOT(Ahead Of Time) 컴파일 
    • 어플 설치 시 한 번에 컴파일하여 바이트코드로 변환하고, 실행 시 변환된 코드를 사용 하는 방법 인데 달빅보다 빠르게 시작하고, RAM도 적게 소비한다. 설치 시 한번에 컴파일 하기 떄문에 상대적으로 공간이 많이 필요하고, 설치 시간이 오래걸림.
  • -Dalvick VM  -  JIT(Just In Time) 컴파일 
    • 어플 실행시 실시간으로 자바코드로 변환하고, 일정부분을 RAM에 상주 시키면서 성능 향상은 되었지만, 하드웨어에 부담이 커지고, RAM 사용량이 증가

 

4. Native C/C++ Libraries

ART 및 HAL 등의 많은 핵심 Android 시스템 구성 요소와 서비스가 C 및 C++로 작성된 네이티브 라이브러리를 필요로 하는 네이티브 코드를 기반으로 빌드되었습니다. Android 플랫폼은 Java 프레임워크 API를 제공하여 이러한 일부 네이티브 라이브러리의 기능을 앱에 노출합니다. C/C++ 코드가 필요한 앱 개발시 Android NDK를 사용하여 앱 일부를 Android에서 사용 가능한 언어로 구현 해주고, C/C++ 코드를 Library 나 Binary 로 만들어 주는 도구

JNI(Java Native Interface)는 Java 코드에서 C/C++로 만들어진 Library 를 사용 하게 해주는 인터페이스 제공, Native 함수 선언을 하면 library파일에서 매핑되는 함수를 찾음

5. Java API Framework

Java API 프레임워크는 핵심 시스템 구성요소 모듈과 서비스 재사용을 단순화 하여 앱을 제작하는데 필요한 빌딩 블록을 제공합니다.

  •  뷰 시스템 : 목록 그리드, 텍스트상자, 버튼 및 사입 가능한 웹브라우저를 포함한 UI를 빌드하는데 사용
  • 리소스 매니저 : 국가별 문자열, 그래픽 및 레이아웃 파일과 같은 코드가아닌 리소스에 대한 자원 접근 제공
  • 알림 매니저 : 모든 앱이 상태 표시줄에 사용자 알람을 표시 할 수 있도록 지원
  • 액티비티 매니저 : 앱 수명 주기 관리 
  • 콘텐츠 제공자 : 주소록 랩과 같은 다른 앱의 데이터에 엑세스 하거나 자신의 데이터를 공류할 수 있도록 지원

 

6. Applications

기본 앱 과 사용자가 설치한 앱 두가지로 나뉨. Android는 이메일, SMS 메시징, 캘린더, 인터넷 검색, 주소록 등의 주요 앱 세트와 함께 제공됩니다. 플랫폼에 기본적으로 포함된 앱에는 사용자가 설치하도록 선택하는 앱과 구별되는 특별한 상태가 없습니다. 따라서 타사 앱이 사용자의 기본 웹브라우저, SMS 메시징 또는 기본 키보드가 될 수 있습니다(단, 시스템의 설정 앱 등 가지 예외가 적용될 수 있음).

시스템 앱은 사용자를 위한 앱으로도 작동하고 개발자가 자신의 앱에서 액세스할 수 있는 주요 기능을 제공하기 위한 용도로도 작동합니다. 예를 들어, 앱이 SMS 메시지를 제공하고자 할 경우 해당 기능을 직접 빌드할 필요가 없습니다. 그 대신, 이미 설치된 SMS 앱을 호출하여 지정한 받는 사람에게 메시지를 제공할 수 있습니다.

 

 

참고 : https://developer.android.com/guide/platform?hl=ko#hal 

728x90

'play > Android' 카테고리의 다른 글

자주 사용 하는 adb 명령어  (1) 2023.12.15
[Android] 안드로이드 앱 주요 구성 요소  (0) 2023.06.29
[Android] 폴더 구조, APK파일 구조  (1) 2022.09.13
[Reactnative] 준비하기  (0) 2022.04.08
모바일 운영체제 종류  (0) 2021.08.26