• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
 

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

on

  • 4,954 views

 

Statistics

Views

Total Views
4,954
Views on SlideShare
3,446
Embed Views
1,508

Actions

Likes
3
Downloads
70
Comments
0

2 Embeds 1,508

http://ongameserver.tistory.com 1503
http://www.hanrss.com 5

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Android 프로세스들의 통신 메커니즘 바인더 이야기 Joonseok 2012.05.19 @ SDC3 주체 : 온라인 서버 개발자 모임 후원 : 넷텐션
    • 개요• Android 플랫폼의 C++ 코드를 살펴 본다.• Android 아키텍처 구조를 살펴본다.• Android 는 프로세스 기반 컴포넌트 프로그 래밍 모델을 제공한다. 프로세스 간 메쉬업을 위한 기반 설비 인 바인더에 대해 알아 본다.
    • 같은 곳을 바라 보다..ANDROID 코드를 보다.
    • https://github.com/android
    • Android C++ 코드들을 보면..
    • RefBaseclass BnSurface : public BnInterface<ISurface> sp<IBinder> void* reinterpret_cast<>
    • ①②③
    • 객체 관리 @Android ①/frameworks/base/utils/StrongPointer.h
    • 객체 관리 @Android wp<>.promote() 를 통한 약한 참조로 순환 참조 문제 해결
    • Strong Pointer Weak Pointer 강한 참조 약한 참조 객체소유권O 객체소유권X객체생명관리O 객체생명관리X
    • ② BBinder BnInterface<> IAudioManagerBnAudioManager
    • 템플릿 상속#1 A, B 는 변경하지 않고 다양한 X 를 상속 받는 방법은?class A{}; Aclass B : public A{};class C : public B B X#1{}; X#2 C
    • 템플릿 상속#2class A Binder C++ Library{};template<class T> BBinderclass B : public A , public T{}; BnInterface<> IAudioManagerclass X{}; BnAudioManagerclass C : public B<X>{};
    • ③Poll? Epoll?
    • PC OS, Linux 프로세스ANDROID
    • PC OS가스마트폰 속으로..
    • AndroidC++ Infra Java Infra
    • JAVA Layer J N IC/C++ Layer
    • BioniC DalvikVM Binder
    • ProcessProcess Process Process Linux Kernel
    • 시스템 서비스 프로세스 애플리케이션 프로세스 ProcessProcess VM Process Process VM Linux Kernel
    • 시스템 서비스 프로세스 애플리케이션 프로세스 ProcessProcess VM Process VM Process Linux Kernel
    • 시스템 서비스 프로세스 애플리케이션 프로세스Location 서비스 응용 VM 프로그램 VM Carmera 서비스
    • 시스템 서비스 프로세스 애플리케이션 프로세스Process Process VM VM 바인더 (Binder) Process Process
    • 같은 곳을 바라 보다..메쉬업 도구. 바인더 RPC!
    • class B { B.Call(int value) void Call(int value) } b->Call( 1004 ) B* b = new B ③ RPC데이터② 조회 - 획득 『B프로세스의 b 에 1004 를 인자로 ① 생성 - 등록 Call() 메소드호출』 0x01 : B 프로세스 / b
    • class B {B.Call(int value) void Call(int value) }b.Call( 1004 ) B* b = new B Int arg = data.arg 『B프로세스의 b 에 switch(code) 1004 를 인자로 { Call() 메소드호출』 case “Call() 메소드호출” : b->Call(); ⑤ 해석 break; ④ 룩업 … } 0x01 : B 프로세스 / b
    • class B {B.Call(int value) void Call(int value) } ② 조회 - 획득 ① 생성 - 등록b.Call( 1004 ) B* b = new B③ RPC데이터 Int arg = data.arg 『B프로세스의 b 에 switch(code) 1004 를 인자로 { Call() 메소드호출』 case “Call() 메소드호출” : b->Call(); ⑤ 해석 break; … ④ 룩업 } 0x01 : B 프로세스 / b
    • 브로커 패턴 transfer transfer message messageClient-side Broker Server-sideProxy Proxy 바인더 설비 main_event_looppack_data pack_data update_repositoryuppack_data uppack_data register_servicesend_request call_service acknowledgmentreturn send_response find_server Find_clientcalls Forward_request Forward_response uses API calls uses API callsClient Bridge Server pack_data initializecall_server uppack_data enter_main_loopstart_task forward_message run_serviceuse_Broker_API transmit_message use_Broker_API
    • 프로세스 A 프로세스 B int* a ? int b사용자 공간 커널 공간 IPC 설비
    • 프로세스 A 프로세스 B Android IPC 솔루션사용자 공간 쓰레드#1 쓰레드#1 바인더 드라이버 쓰레드#2 쓰레드#2 커널 공간
    • 프로세스 A 프로세스 B 커널 공간은사용자 공간 쓰레드#1 쓰레드#1 모든 프로세스들이 쓰레드#2 공유한다. 쓰레드#2 커널 공간
    • 프로세스 A 프로세스 B 물리메모리가상 메모리 0x1000 ~ 0x2000 0x3000 ~ 0x4000
    • 프로세스 A 프로세스 B 사용자 Data 사용자 Data 송신 수신바인더 프로토콜 바인더 프로토콜BC_TRANSACTION BR_TRANSACTION 바인더 드라이버 커널 공간
    • 프로세스 A 프로세스 B “A 에서 B 로 데이터 송신” 사용자 Data struct binder_transaction_data 사용자 Data { size_t handle; 송신 unsigned int code; 수신 바인더 프로토콜 void *buffer; 바인더 프로토콜 BC_TRANSACTION }; BR_TRANSACTIONBINDER_WRITE_READ BINDER_WRITE_READ ioctl() ioctl() switch (바인더프로토콜) { case BC_TRANSACTION : {…} case BR_TRANSACTION : {…} } 커널 공간
    • 프로세스 A 프로세스 B 사용자 Data 바인더 RPC 사용자 Data 송신 수신바인더 프로토콜 바인더 프로토콜BC_TRANSACTION BR_TRANSACTION ioctl() 바인더 IPC switch (바인더프로토콜) ioctl() { case BC_TRANSACTION : {…} 바인더 드라이버 case BR_TRANSACTION : {…} }
    • 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 웹툰• 인사이드 안드로이드
    • 감사합니다.