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

7,131 views
6,712 views

Published on

Published in: Technology
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,131
On SlideShare
0
From Embeds
0
Number of Embeds
1,654
Actions
Shares
0
Downloads
112
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

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

  1. 1. Android 프로세스들의 통신 메커니즘 바인더 이야기 Joonseok 2012.05.19 @ SDC3 주체 : 온라인 서버 개발자 모임 후원 : 넷텐션
  2. 2. 개요• Android 플랫폼의 C++ 코드를 살펴 본다.• Android 아키텍처 구조를 살펴본다.• Android 는 프로세스 기반 컴포넌트 프로그 래밍 모델을 제공한다. 프로세스 간 메쉬업을 위한 기반 설비 인 바인더에 대해 알아 본다.
  3. 3. 같은 곳을 바라 보다..ANDROID 코드를 보다.
  4. 4. https://github.com/android
  5. 5. Android C++ 코드들을 보면..
  6. 6. RefBaseclass BnSurface : public BnInterface<ISurface> sp<IBinder> void* reinterpret_cast<>
  7. 7. ①②③
  8. 8. 객체 관리 @Android ①/frameworks/base/utils/StrongPointer.h
  9. 9. 객체 관리 @Android wp<>.promote() 를 통한 약한 참조로 순환 참조 문제 해결
  10. 10. Strong Pointer Weak Pointer 강한 참조 약한 참조 객체소유권O 객체소유권X객체생명관리O 객체생명관리X
  11. 11. ② BBinder BnInterface<> IAudioManagerBnAudioManager
  12. 12. 템플릿 상속#1 A, B 는 변경하지 않고 다양한 X 를 상속 받는 방법은?class A{}; Aclass B : public A{};class C : public B B X#1{}; X#2 C
  13. 13. 템플릿 상속#2class A Binder C++ Library{};template<class T> BBinderclass B : public A , public T{}; BnInterface<> IAudioManagerclass X{}; BnAudioManagerclass C : public B<X>{};
  14. 14. ③Poll? Epoll?
  15. 15. PC OS, Linux 프로세스ANDROID
  16. 16. PC OS가스마트폰 속으로..
  17. 17. AndroidC++ Infra Java Infra
  18. 18. JAVA Layer J N IC/C++ Layer
  19. 19. BioniC DalvikVM Binder
  20. 20. ProcessProcess Process Process Linux Kernel
  21. 21. 시스템 서비스 프로세스 애플리케이션 프로세스 ProcessProcess VM Process Process VM Linux Kernel
  22. 22. 시스템 서비스 프로세스 애플리케이션 프로세스 ProcessProcess VM Process VM Process Linux Kernel
  23. 23. 시스템 서비스 프로세스 애플리케이션 프로세스Location 서비스 응용 VM 프로그램 VM Carmera 서비스
  24. 24. 시스템 서비스 프로세스 애플리케이션 프로세스Process Process VM VM 바인더 (Binder) Process Process
  25. 25. 같은 곳을 바라 보다..메쉬업 도구. 바인더 RPC!
  26. 26. 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
  27. 27. 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
  28. 28. 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
  29. 29. 브로커 패턴 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
  30. 30. 프로세스 A 프로세스 B int* a ? int b사용자 공간 커널 공간 IPC 설비
  31. 31. 프로세스 A 프로세스 B Android IPC 솔루션사용자 공간 쓰레드#1 쓰레드#1 바인더 드라이버 쓰레드#2 쓰레드#2 커널 공간
  32. 32. 프로세스 A 프로세스 B 커널 공간은사용자 공간 쓰레드#1 쓰레드#1 모든 프로세스들이 쓰레드#2 공유한다. 쓰레드#2 커널 공간
  33. 33. 프로세스 A 프로세스 B 물리메모리가상 메모리 0x1000 ~ 0x2000 0x3000 ~ 0x4000
  34. 34. 프로세스 A 프로세스 B 사용자 Data 사용자 Data 송신 수신바인더 프로토콜 바인더 프로토콜BC_TRANSACTION BR_TRANSACTION 바인더 드라이버 커널 공간
  35. 35. 프로세스 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 : {…} } 커널 공간
  36. 36. 프로세스 A 프로세스 B 사용자 Data 바인더 RPC 사용자 Data 송신 수신바인더 프로토콜 바인더 프로토콜BC_TRANSACTION BR_TRANSACTION ioctl() 바인더 IPC switch (바인더프로토콜) ioctl() { case BC_TRANSACTION : {…} 바인더 드라이버 case BR_TRANSACTION : {…} }
  37. 37. BpServiceManager addService() BpBinder transact()
  38. 38. BnServiceManager onTransact() ServiceManager addService()
  39. 39. 원 밖의 원.마무리
  40. 40. 정리• Android 는 스마트포인터, 템플릿 상속, epoll 을 통한 이벤 트 처리기를 구현하고 있다.• Android 는 프로세스 단위의 컴포넌트 모델을 갖고 있고 서 버 프로세스 형태로 시스템 기능을 제공하는데, 프로세스 간 기능 메쉬업(Mesh-up)을 위해 바인더 설비를 제공한다.• Android 의 바인더(Binder) 는 커널 메모리 참조를 이용해 모바일 기기에 최적인 프로세스 간 통신을 지원한다.
  41. 41. 참고자료• Microsoft “Singularity OS”• Google IO• Wikipedia.org• Kandroid.org• Naver 웹툰• 인사이드 안드로이드
  42. 42. 감사합니다.

×