[안드로이드] Android binder. 컴부리 이야기

<출처 : http://www.flowdas.com/blog/introduction-to-android-binder/the-history-of-android-binder>

 

이 글의 내용은 "오가네" 블로그의 바인더 관련 칼럼을 발췌한 내용 입니다.

정리 차원에서 제 블로그에 옮긴 사항으로 혹시라도, 제글을 블로깅할 예정이시면, 원문 출처를 같이 옮겨 주십시오.

감사합니다.

 

1. Binder의 역사


    1991년 BeBox라는 하드웨어에서 동작하게끔 만든 BeOS라는 운영체제가 있었다. BeOS는 Be라
는 회사에서 만든 운영체제로 당시의 일반적인 운영체제와 달리 처음부터 GUI에 기반해 설계한 운
영체제였다.
    당시 Be사는 ParmSource사에 인수되기 전에, 차세대 BeOS의 핵심 기능들을 위해 Component
System화 하는 프로젝트를 시작한다.
    Component System은 비교적 작고 단순한 여러 개의 소프트웨어들이 상호 협력하여, 시스템을
운영할 수 있게끔 소프트웨어의 각 구성 요소 사이의 신호 전달을 일관성 있고 효율적으로 제공해
주는 것이 목적 이었으며, 이를 Open Binder 프로젝트로 진행했었다.
(이와 유사한 방식으로는 Windows 진영의 COM, Unix 진영의 CORBA가 있다.)


    이후 Be사는 ParmSource사에 인수되었지만 Open Binder는 디니 핵본(Dinnie Hackborn)에 의해
계속 개발되어 ParmOS6인 Cobalt OS의 프로세스를 관리하는 기반이 된다.
    구글로 옮겨간 Dinnie Hackborn은 안드로이드의 프로세스를 관리하기 위해 오픈 바인더를 수정
한 Android Binder를 개발한다.


    바인더는 원래 IPC(Inter Process Communication) 도구 이지만 안드로이드에서는 다른 프로세스
에 있는 함수를 마치 현재 프로세스에 존재하는 함수처럼 사용할 수 있게 해주는 RPC(Remote
Process Call)를 지원하는 데 주로 이용된다.

 

 

 

 

 

 2. 안드로이드 바인더 목적

-. 리눅스 메모리 공간과 바인더 드라이버

안드로이드의 프로세스는 리눅스와 마차가지로 프로세스만의 고유한 가상 주소 공간에서 실행된다.
총 4GB에 달하는 가상 주소 공간은 3GB의 User Space와 1GB의 kernel Space로 나눠진다.

  

Process A의 user space 내에서 동작하는 사용자 공간 Resource를

Process B로 전달하기 위해서는 Process간 공유가 가능한 Kernel space를 이용해야 한다.

 

 

 

 

 

3. 안드로이드 바인더 모델

바인더 모델은 기본적으로 Remote Procedure Call 기술과 유사하다.
클라이언트 프로세스와 서버 프로세스 간에 메모리를 공유하기 위하여, virtual memory 을 생성하는
system call api인 mmap() 함수를 이용하여 공유 메모리를 생성하면, 커널 공간의 바인더 드라이버는
두 프로세스간의 virtual memory 영역을 physical memory에 kalloc()함수를 이용하여 mapping 함으로서
자원을 공유한다.

 

 

 

 

 

 

4. 바인더 모델의 한계와 전망

    현재 바인더가 제공하는 기능을 사용하는 가장 효율적인 환경은,

Android Interface Definition Language Tool를 사용하여 Service를 제작하는 것이다.


    이 작업에 필요한 도구는 SDK에서 제공되고 있지만, NDK에서는 제공되고 있지 못하다.

    즉, 자바환경에서 서비스를 제작하거나 서비스를 사용하는 환경에 대해서는 지원하고 있지만,

NDK의 C++환경에 대한 지원은 전무한 상황이다.


    NDK에 포함되어 있는 헤더 파일과 PDK의 binder driver와 system driver등을 이용하여,

빌드는 가능하지만, Linux Kernel 에서 User ID permission deny error가 발생하기 때문에

현재 상태에서는 사용할 수 없다.


    차후 NDK 환경에서 C++을 위한 AIDL및 클래스 라이브러리 지원이 이루어질 것으로 보이며,

향후 Android 2.3 Gingerbread에서 native Activity 와 native event Dispatching 기술이 지원 된다면,

바인더 기술을 이용할 수 있을 것으로 보인다.


    또한 바인더의 확장은 원격 호출을 단말에 있는 다른 프로세스까지만 허용하는 것이 아니라,

다른 단말이나 서버에 있는 프로세스 까지 허락하는 것으로 발전될 것으로 보인다.


    이는 향후 Google의 차세대 전략인 Cloud Service 와 Chrome OS에서 더욱 활성화 될 것으로 전망 된다.

 

 

 

 

SDK : Standard Development Kit (Java 언어 지원)
NDK : Native Development Kit (C++ 언어 지원)
PDK : Porting Development Kit (OEM porting kit)


덧글

  • cwon 2011/11/21 08:54 # 답글

    잘 보고 갑니다..!
댓글 입력 영역