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

50
Android 프로세스들의 통신 메커니즘 바인더 이야기 Joonseok 2012.05.19 @ SDC3 주체 : 온라인 서버 개발자 모임 후원 : 넷텐션

Upload: ongameserver

Post on 16-May-2015

5.736 views

Category:

Technology


6 download

TRANSCRIPT

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

개요

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

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

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

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

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

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

https://github.com/android

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

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

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

sp<IBinder>

RefBase

class BnSurface : public BnInterface<ISurface>

void*

reinterpret_cast<>

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

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

객체 관리 @Android

/frameworks/base/utils/StrongPointer.h ①

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

객체 관리 @Android

wp<>.promote()

를 통한 약한 참조로

순환 참조 문제 해결

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

Strong Pointer

강한 참조

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

Weak Pointer

약한 참조

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

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

BBinder

BnInterface<>

BnAudioManager

IAudioManager

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

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

템플릿 상속#1

A

B

C

X#1

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

X#2

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

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

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

Poll? Epoll?

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

ANDROID PC OS, Linux 프로세스

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

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

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

Android

C++ Infra

Java Infra

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

JAVA Layer

C/C++ Layer

JNI

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

DalvikVM BioniC

Binder

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

Linux Kernel

Process

Process

Process

Process

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

Linux Kernel

Process

Process

Process

Process

시스템 서비스 프로세스

VM

VM

애플리케이션 프로세스

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

Linux Kernel

Process

Process

Process

Process

시스템 서비스 프로세스

VM

애플리케이션 프로세스

VM

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

Location 서비스

Carmera 서비스

응용 프로그램

VM

VM

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

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

Process

Process

Process

Process

VM VM

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

바인더 (Binder)

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

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

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

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데이터

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

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() 메소드호출』

④ 룩업 ⑤ 해석

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

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데이터

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

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

브로커 패턴

바인더 설비

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

커널 공간

프로세스 A 프로세스 B 사

용자

공간

int* a int b ?

IPC 설비

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

커널 공간

프로세스 A 프로세스 B

쓰레드#1

쓰레드#2

쓰레드#1

쓰레드#2

사용

자 공

간 Android IPC 솔루션

바인더 드라이버

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

커널 공간

프로세스 A 프로세스 B

쓰레드#1

쓰레드#2

쓰레드#1

쓰레드#2

사용

자 공

간 커널 공간은

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

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

프로세스 A 프로세스 B 가

상 메

모리

0x1000 ~ 0x2000

0x3000 ~ 0x4000

물리메모리

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

프로세스 A 프로세스 B

바인더 드라이버

사용자 Data 사용자 Data

수신 바인더 프로토콜 BR_TRANSACTION

송신 바인더 프로토콜 BC_TRANSACTION

커널 공간

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

프로세스 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; };

커널 공간

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

프로세스 A 프로세스 B

사용자 Data 사용자 Data

수신 바인더 프로토콜 BR_TRANSACTION

송신 바인더 프로토콜 BC_TRANSACTION

ioctl() ioctl()

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

바인더 RPC

바인더 IPC

바인더 드라이버

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

BpServiceManager addService()

BpBinder transact()

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

BnServiceManager onTransact()

ServiceManager addService()

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

마무리 원 밖의 원.

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

정리

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

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

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

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

참고자료

• Microsoft “Singularity OS”

• Google IO

• Wikipedia.org

• Kandroid.org

• Naver 웹툰

• 인사이드 안드로이드

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

감사합니다.