'2017/02/26'에 해당되는 글 3건

  1. 2017.02.26 [android framework] 서비스 프레임웍 #2 - 바인더 드라이버
반응형

1. 서비스 등록

 바인더 드라이버를 이용하는 주체로 보았을때 서비스 등록은 다음의 절차로 진행된다.


 바인더 드라이버에서는 다음과 같이 내부에서 binder_proc, binder_buffer, binder_node 구조체를 생성하고 등록, 연결하는 역활을 한다.

 1) binder_proc는 IPC 동작에 필요한 다른 구조체를 포인터 형태로 접근할 수 있는 루트 구조체이며, 프로세스당 하나씩 존재하여 이 구조체를 통해 상대편의 프로세스를 찾거나, 해당 프로세스가 가진 IPC데이터 수신 버퍼를 찾는다.

2) binder_buffer구조체를 생성하고 binder_proc구조체에 등록한다.

 6) 바인더 드라이버는 컨텍스트 매니저의 binder_node 구조체를 찾고 여기에 연결된 binder_proc를 찾는다.

 7) 서비스 서버가 등록할 서비스에 대한 binder_node 구조체를 생성하고 이를 서비스 서버의 binder_proc구조체와 컨텍스트매니저의 binder_proc구조체에 각각 등록한다.

 9) IPC 데이터 송신 측 프로세스에 대한 binder_proc 구조체를 기억해 두는데, 이는 컨텍스트 매니저가 서비스 서버로 응답 데이터를 보낼 때 서비스 서버에 대한 binder_proc를 찾기 위함이다.

 11) 9)에서 기억해둔 binder_proc구조체에서 binder_buffer구조체에 등록된 수신 버퍼를 찾아 IPC응답 데이터를 송신하고 서비스 서버를 꺠움


2. 서비스 검색

 서비스 검색은 다음의 절차로 진행된다.


 바인더 드라이버에서는 다음과 같이 서비스 클라이언트의 binder_proc와 binder_buffer를 생성하고, 컨텍스트 매니저에게 데이터를 송신하며, 클라이언트가 요청한 서비스를 찾고 찾은 서비스에 해당하는 바인더 노드들 클라이언트의 binder_proc 구조체에 등록한다. 


3. 서비스 사용

 서비스 사용은 다음의 절차로 진행된다.

바인더 드라이버에서는 서비스 클라이언트의 binder_proc에 연결되어 있는 서비스 서버의 binder_node를 찾고 이 노드가 등록된 서버의 binder_proc를 찾는다. 그리고 서비스 서버의 binder_proc 에 등록된 binder_buffer 구조체에 IPC데이터를 복사한다. 그리고 서비스 서버를 깨우고 IPC데이터를 수신하게 하며 해당하는 함수를 실행시키게 한다. 실행 완료 후, 클라이언트 binder_proc를 찾아서 연결된 수신 버퍼에 데이터를 복사하고 수신 버퍼를 서비스 클라이언트에 전달한다.




반응형
Posted by alias
,