안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기

Post on 16-May-2015

5.738 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

개요

• Android 플랫폼의 C++ 코드를 살펴 본다.

• Android 아키텍처 구조를 살펴본다.

• Android 는 프로세스 기반 컴포넌트 프로그래밍 모델을 제공한다. 프로세스 간 메쉬업을 위한 기반 설비 인 바인더에 대해 알아 본다.

ANDROID 코드를 보다. 같은 곳을 바라 보다..

https://github.com/android

Android C++ 코드들을 보면..

sp<IBinder>

RefBase

class BnSurface : public BnInterface<ISurface>

void*

reinterpret_cast<>

객체 관리 @Android

/frameworks/base/utils/StrongPointer.h ①

객체 관리 @Android

wp<>.promote()

를 통한 약한 참조로

순환 참조 문제 해결

Strong Pointer

강한 참조

객체소유권O 객체생명관리O

Weak Pointer

약한 참조

객체소유권X 객체생명관리X

BBinder

BnInterface<>

BnAudioManager

IAudioManager

class A { }; class B : public A { }; class C : public B { };

템플릿 상속#1

A

B

C

X#1

A, B 는 변경하지 않고 다양한 X 를 상속 받는 방법은?

X#2

class A { }; template<class T> class B : public A , public T { }; class X { }; class C : public B<X> { };

템플릿 상속#2

BBinder

BnInterface<>

BnAudioManager

IAudioManager

Binder C++ Library

Poll? Epoll?

ANDROID PC OS, Linux 프로세스

PC OS가 스마트폰 속으로..

Android

C++ Infra

Java Infra

JAVA Layer

C/C++ Layer

JNI

DalvikVM BioniC

Binder

Linux Kernel

Process

Process

Process

Process

Linux Kernel

Process

Process

Process

Process

시스템 서비스 프로세스

VM

VM

애플리케이션 프로세스

Linux Kernel

Process

Process

Process

Process

시스템 서비스 프로세스

VM

애플리케이션 프로세스

VM

Location 서비스

Carmera 서비스

응용 프로그램

VM

VM

시스템 서비스 프로세스 애플리케이션 프로세스

Process

Process

Process

Process

VM VM

시스템 서비스 프로세스 애플리케이션 프로세스

바인더 (Binder)

메쉬업 도구. 바인더 RPC! 같은 곳을 바라 보다..

B.Call(int value)

class B { void Call(int value) }

B* b = new B b->Call( 1004 )

0x01 : B 프로세스 / b

① 생성 - 등록 ② 조회 - 획득 『B프로세스의 b 에 1004 를 인자로

Call() 메소드호출』

③ RPC데이터

B.Call(int value)

class B { void Call(int value) }

B* b = new B b.Call( 1004 )

0x01 : B 프로세스 / b

Int arg = data.arg switch(code) { case “Call() 메소드호출” : b->Call(); break; … }

『B프로세스의 b 에 1004 를 인자로

Call() 메소드호출』

④ 룩업 ⑤ 해석

B.Call(int value)

class B { void Call(int value) }

B* b = new B b.Call( 1004 )

0x01 : B 프로세스 / b

Int arg = data.arg switch(code) { case “Call() 메소드호출” : b->Call(); break; … }

『B프로세스의 b 에 1004 를 인자로

Call() 메소드호출』

④ 룩업

⑤ 해석

① 생성 - 등록 ② 조회 - 획득

③ RPC데이터

Bridge

pack_data uppack_data forward_message transmit_message

calls

Server-side Proxy

pack_data uppack_data call_service send_response

Client-side Proxy

pack_data uppack_data send_request return

Broker

main_event_loop update_repository register_service acknowledgment find_server Find_client Forward_request Forward_response

Server

initialize enter_main_loop run_service use_Broker_API

Client

call_server start_task use_Broker_API

transfer message

calls

calls

uses API

transfer message

uses API

브로커 패턴

바인더 설비

커널 공간

프로세스 A 프로세스 B 사

용자

공간

int* a int b ?

IPC 설비

커널 공간

프로세스 A 프로세스 B

쓰레드#1

쓰레드#2

쓰레드#1

쓰레드#2

사용

자 공

간 Android IPC 솔루션

바인더 드라이버

커널 공간

프로세스 A 프로세스 B

쓰레드#1

쓰레드#2

쓰레드#1

쓰레드#2

사용

자 공

간 커널 공간은

모든 프로세스들이 공유한다.

프로세스 A 프로세스 B 가

상 메

모리

0x1000 ~ 0x2000

0x3000 ~ 0x4000

물리메모리

프로세스 A 프로세스 B

바인더 드라이버

사용자 Data 사용자 Data

수신 바인더 프로토콜 BR_TRANSACTION

송신 바인더 프로토콜 BC_TRANSACTION

커널 공간

프로세스 A 프로세스 B

사용자 Data 사용자 Data

수신 바인더 프로토콜 BR_TRANSACTION

송신 바인더 프로토콜 BC_TRANSACTION

“A 에서 B 로 데이터 송신”

ioctl() ioctl()

switch (바인더프로토콜) { case BC_TRANSACTION : {…} case BR_TRANSACTION : {…} }

BINDER_WRITE_READ BINDER_WRITE_READ

struct binder_transaction_data { size_t handle; unsigned int code; void *buffer; };

커널 공간

프로세스 A 프로세스 B

사용자 Data 사용자 Data

수신 바인더 프로토콜 BR_TRANSACTION

송신 바인더 프로토콜 BC_TRANSACTION

ioctl() ioctl()

switch (바인더프로토콜) { case BC_TRANSACTION : {…} case BR_TRANSACTION : {…} }

바인더 RPC

바인더 IPC

바인더 드라이버

BpServiceManager addService()

BpBinder transact()

BnServiceManager onTransact()

ServiceManager addService()

마무리 원 밖의 원.

정리

• Android 는 스마트포인터, 템플릿 상속, epoll 을 통한 이벤트 처리기를 구현하고 있다.

• Android 는 프로세스 단위의 컴포넌트 모델을 갖고 있고 서버 프로세스 형태로 시스템 기능을 제공하는데, 프로세스 간 기능 메쉬업(Mesh-up)을 위해 바인더 설비를 제공한다.

• Android 의 바인더(Binder) 는 커널 메모리 참조를 이용해 모바일 기기에 최적인 프로세스 간 통신을 지원한다.

참고자료

• Microsoft “Singularity OS”

• Google IO

• Wikipedia.org

• Kandroid.org

• Naver 웹툰

• 인사이드 안드로이드

감사합니다.

top related