본문 바로가기

6. With IT/6.1 Android

Android-Runtime


안드로이드 런타임

안드로이드의 핵심 라이브러리core library는 Java 프로그래밍 언어의 핵심 라이브러리에서 사용가능한 대부분의 기능을 포함하고 있다.

모든 안드로이드 애플리케이션은 달빅Dalvik 가상 머신에 대한 자기 자신의 인스턴스를 가지고, 자신의 프로세스 내에서 실행된다. 달빅은 하나의 디바이스에서 다양한 가상머신이 효율적으로 실행될 수 있도록 만들어졌다. 달빅 가상머신은 최소 메모리를 사용footprint하도록 최적화된 달빅 실행executable 포맷(.dex)의 파일을 실행한다. 이 가상머신은 레지스터 기반이며, Java 언어 컴파일러에 의해 컴파일된 후, SDK에 포함되어 있는 “dx”라는 툴tool을 통해 .dex 포맷으로 변환된 클래스를 실행한다.

달빅 가상머신은 쓰레딩threading과 저 수준low-level 메모리 관리와 같이 그것의 기반이 되는 기능에 대해서는 리눅스 커널에 의존한다. 


Android Runtime(Dalvik VM ; register-based VM)

안드로이드 애플은 java코드(데이터와 리소스 포함)는 SDK에 존재하는 aapt util에 의해서 apk 파일로 패키징 된다.

모든 안드로이드 애플은 달빅 가상머신에 대한 자기 자신의 인스턴스를 가지고, 자신의 프로세스 내에서 실행된다.

따라서 다른 모든 애플과 격리되어 실행된다. 달빅은 레지스터 기반으로 실행되어진다.

 

디폴트로 각각의 애플리케이션에는 고유한 리눅스 유저user ID가 부여된다. 애플리케이션을 구성하는 파일들은 해당 사용자와 해당 애플리케이션 그 자신 에게만 보여지도록 퍼미션permission이 설정된다- 비록, 다른 애플리케이션에게도 그 파일을 보여줄 방법이 있기는 하지만. 두 개의 애플리케이션에 대해 동일한 유저user ID를 공유할 수 있도록 배치하는 것이 가능하다. 그런 경우에 두 개의 애플리케이션은 각자 다른 애플리케이션의 파일을 볼 수 있을 것이다. 시스템 자원을 절약하기 위해 동일한 ID를 가지는 애플리케이션은 또한 동일한 리눅스 프로세스 안에서 실행되도록 배치되며, 동일한 가상머신을 공유한다.

 

레지스터기반 머신(Register-based Machine)
 CPU는 피 연산자를 저장하는 위치에 따라 레지스터 기반 프로세서(register-based processor)와 스택 기반 프로세서(stack-based processor)로 나눌 수 있다. 레지스터 기반 프로세서는 레지스터를 사용하여 연산하는 방식이고 스택 기반 프로세서는 피 연산자를 스택에 저장하고 나서 연산을 수행하면 피 연산자를 꺼내어 연산 후에 그 결과를 다시 스택에 넣는 방식이다.
임베디드 시스템에서 자주 사용되는 스택 기반 프로세서는 함수 호출 시 인자를 스택에 넣어줘야 하는 레지스터 기반 프로세서와 달리 이미 스택에 인자가 저장되어 있기 때문에 추가적인 작업이 필요하지 않다. 또한 컨텍스트 스위치(context switch)가 일어날 경우 레지스터 기반 프로세서는 모든 레지스터의 상태를 저장해 줘야 하지만, 스택 기반 프로세서는 각 프로세스마다 스택을 할당하기 때문에 단지 스택만 변경시킴으로써 간단히 해결할 수 있다.
반면 레지스터 기반 프로세서의 가장 큰 장점은 속도가 매우 빠르다는 것이다. 레지스터가 CPU 내에 존재하기 때문에 레지스터의 참조가 무척 빠른 반면 스택 기반 프로세서는 대부분의 스택을 메모리에 두기 때문에 값을 읽고 쓰기 위해선 메모리를 액세스해야 한다. 또한 레지스터 기반 프로세서는 인스트럭션이 가독성이 있으므로 디버깅에 유리하다.
레지스터 기반 프로세서의 대표적인 예는 인텔 x86이 있고, 스택 기반 프로세서는 RTX32P가 있다.

 

'6. With IT > 6.1 Android' 카테고리의 다른 글

Android - Dalvik VM & Core Lib  (0) 2011.05.28
Android-Lifecycle  (0) 2011.05.27
Android-Event3  (0) 2011.05.27
Android-Event2  (0) 2011.05.27
Android-Event  (0) 2011.05.27