10. Strong Pointer Weak Pointer
강한 참조 약한 참조
객체소유권O 객체소유권X
객체생명관리O 객체생명관리X
11. ②
BBinder
BnInterface<> IAudioManager
BnAudioManager
12. 템플릿 상속#1
A, B 는 변경하지 않고
다양한 X 를 상속 받는 방법은?
class A
{
};
A
class B : public A
{
};
class C : public B B X#1
{
}; X#2
C
13. 템플릿 상속#2
class A Binder C++ Library
{
};
template<class T> BBinder
class B
: public A
, public T
{
}; BnInterface<> IAudioManager
class X
{
};
BnAudioManager
class C : public B<X>
{
};
30. 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
31. 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
32. 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
34. 프로세스 A 프로세스 B
int* a
? int b
사용자 공간
커널 공간
IPC 설비
35. 프로세스 A 프로세스 B
Android IPC 솔루션
사용자 공간
쓰레드#1 쓰레드#1
바인더 드라이버
쓰레드#2 쓰레드#2
커널 공간
36. 프로세스 A 프로세스 B
커널 공간은
사용자 공간
쓰레드#1 쓰레드#1
모든 프로세스들이
쓰레드#2
공유한다. 쓰레드#2
커널 공간
37. 프로세스 A 프로세스 B
물리메모리
가상 메모리
0x1000 ~ 0x2000
0x3000 ~ 0x4000
38. 프로세스 A 프로세스 B
사용자 Data 사용자 Data
송신 수신
바인더 프로토콜 바인더 프로토콜
BC_TRANSACTION BR_TRANSACTION
바인더 드라이버
커널 공간
39. 프로세스 A 프로세스 B
“A 에서 B 로 데이터 송신”
사용자 Data struct binder_transaction_data
사용자 Data
{
size_t handle;
송신 unsigned int code; 수신
바인더 프로토콜 void *buffer; 바인더 프로토콜
BC_TRANSACTION }; BR_TRANSACTION
BINDER_WRITE_READ BINDER_WRITE_READ
ioctl() ioctl()
switch (바인더프로토콜)
{
case BC_TRANSACTION : {…}
case BR_TRANSACTION : {…}
}
커널 공간
40. 프로세스 A 프로세스 B
사용자 Data
바인더 RPC 사용자 Data
송신 수신
바인더 프로토콜 바인더 프로토콜
BC_TRANSACTION BR_TRANSACTION
ioctl() 바인더 IPC
switch (바인더프로토콜)
ioctl()
{
case BC_TRANSACTION : {…}
바인더 드라이버
case BR_TRANSACTION : {…}
}
44. 정리
• Android 는 스마트포인터, 템플릿 상속, epoll 을 통한 이벤
트 처리기를 구현하고 있다.
• Android 는 프로세스 단위의 컴포넌트 모델을 갖고 있고 서
버 프로세스 형태로 시스템 기능을 제공하는데, 프로세스 간
기능 메쉬업(Mesh-up)을 위해 바인더 설비를 제공한다.
• Android 의 바인더(Binder) 는 커널 메모리 참조를 이용해
모바일 기기에 최적인 프로세스 간 통신을 지원한다.
45. 참고자료
• Microsoft “Singularity OS”
• Google IO
• Wikipedia.org
• Kandroid.org
• Naver 웹툰
• 인사이드 안드로이드