본문 바로가기
Programming/Android Kernel,Native

3.1 안드로이드 바인더 IPC 개요

by 개Foot/Dog발?! 2014. 10. 22.

URL : http://insideandroid.org/3-1-%EB%B0%94%EC%9D%B8%EB%8D%94-ipc-%EA%B0%9C%EC%9A%94/


.....


 바인더 IPC 관점에서 시스템 서비스와 애플리케이션의 상호작용을 이해해 보자. 

 음악 애플리케이션에서 음악을 들을려면, 오디오 플링어 서비스에서 제공하는 play() 기능을 사용해야 한다. 그런데 오디오 플링어 서비스는 미디어 서버에서 동작하고 있고, 음악 애플리케이션은 자신의 프로세스에서 동작 중 임으로 음악 애플리케이션과 오디오 플링어 서비스 사이에는 play() 함수 호출을 전달하는 바인더 IPC가 필요하다.

 안드로이드 플랫폼에서 애플리케이션을 실행하면 내부적으로 자이고트(Zygote)에 의해 새로운 프로세스에서 동작한다. 

 예를 들어, 음악 애플리케이션을 실행하면 새로운 프로세스가 생성되고 그 위에서 음악 애플리케이션이 실행되는 것이다.  음악 애플리케이션은 화면에 자신의 UI를 표시해야 하며, 음악 재생 기능을 제공해야 한다. 안드로이드 플랫폼에서 화면을 담당하는 것은 서피스 플링어 서비스이고 소리를 관리하는 것은 오디오 플링어 서비스이며, 각각 시스템 서버(system_server)와 미디어 서버(mediaserver) 프로세스에서 동작한다. 

 따라서, 음악 애플케이션은 자신의 UI가 갱신되거나 음악 재생 동안에 이들 서비스와 빈번하게 바인더 IPC 해야 한다.


 이때, 바인더 IPC를 통해 전달하는 것은 함수 호출 정보와 이에 필요한 데이터이다. 음악 애플리케이션은 오디오 플링어 서비스의 play() 함수를 호출하고, 재생할 오디오 데이터를 전달해야 한다. 전달 과정은 바인더 드라이버에서 담당하고 있다. 따라서 오디오 플링어 서비스를 분석하려면 함수 호출 경로와 데이터 전달 과정을 정확히 이해하고 있어야 한다. 


......