Android RPC, Binder IPC
Android RPC, Binder IPC
RPC
RPC에 대해서는 이전 글에서 다루었습니다. IPC가 무엇이고 왜 필요한지에 대해서도 알아보았습니다. 이제 Android에서 IPC가 어떻게 이루어지는지 알아보기 위해, 우선적으로 간략히 RPC에 대해 알아보았습니다.
2022.08.12 - [운영체제] - RPC_Remote Procedure Calls
RPC_Remote Procedure Calls
Remote Procedure Calls (RPC) RPC RPC는 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수/프로시저를 실행할 수 있게 하는 기술이다. RPC를 사용해 프로그래머는 실행 프로그램 속 함수가 로컬
noobcodeing.tistory.com
Android RPC
일반적으로 분산 시스템에서는 클라이언트-서버 컴퓨팅과 연관된 RPC(원격 프로시저 호출)이 활용됩니다. 그렇지만, 이는 동일한 시스템 내에서 실행되는 프로세스 간 통신(IPC) 형태로도 사용될 수 있습니다.
*서비스는 사용자 인터페이스가 없지만 백그라운드에서 실행되며, 장기 실행 연산이나 원격 process에 대한 작업을 수행합니다.
*서비스의 예시로는 백그라운드에서 음악을 재생하거나, 다른 process 대신 네트워크 연결을 통해 데이터를 검색하고 다운로드할 때, 다른 process가 실행 중단되는 것을 방지할 수 있습니다. 클라이언트 앱이 bindService() 서비스 메소드를 호출하면, 해당 서비스가 "바운드"되어 메시지 전달 또는 RPC를 사용하여 클라이언트-서버 통신을 제공할 수 있습니다.
https://developer.android.com/guide/components/fundamentals?hl=ko
애플리케이션 기본 항목 | Android 개발자 | Android Developers
애플리케이션 기본 항목 Android 앱은 Kotlin, Java, C++ 언어를 사용하여 작성할 수 있습니다. Android SDK 도구는 모든 데이터 및 리소스 파일과 함께 코드를 컴파일하여 하나의 APK를 만듭니다. Android 패
developer.android.com
안드로이드 플랫폼은 리눅스 커널 영역을 기반으로 합니다. 카메라를 사용하거나 소리를 출력 및 조절하는 등의 기능을 이용하려면, 시스템 콜을 통해 커널에 요청을 해야 합니다.
예를 들어, 안드로이드 SDK에서 제공하는 위치 정보를 얻기 위한 API를 호출하면, 내부적으로는 리눅스 프로세스로 요청을 보내고 해당 프로세스가 위치 서비스를 제공한 후 결과를 응답받아 처리합니다. 그러나 안드로이드에서는 모든 시스템 서비스가 서버 프로세스 형태로 제공되기 때문에, 다른 프로세스와의 요청 및 응답을 위해 메시지 패싱 기법을 활용한 IPC 방식이 필요합니다.
안드로이드에서 이런 IPC 메커니즘을 담당하는 것이 바로 Binder입니다.
Binder IPC
Binder는 프로세스 간 요청과 응답을 전송하는 메커니즘으로, 서버 프로세스를 통한 최적화된 프로세스 간 통신 방법을 제공합니다.
바인더 드라이버의 커널 공간은 모든 프로세스들이 공유하게 됩니다. 이를 통해 모든 프로세스가 공유하는 커널 메모리를 참조하면서, 메모리 복사에 따른 오버헤드를 최소화합니다. 또한 C++로 작성된 RPC 프레임워크를 제공하여 개발 생산성을 향상시킵니다.
이러한 안드로이드 플랫폼 구조는 다음과 같은 장점을 가지고 있습니다:
- 손쉬운 기능 확장/제거: 새로운 시스템 서비스를 추가하거나 기존 기능을 제거하기 쉽습니다.
- 손쉬운 포팅: 새로운 프로세서로의 포팅 시 변경 부분이 작아 포팅이 쉽습니다. 또한, 포팅을 위한 툴체인도 제공됩니다.
- 손쉬운 테스트: 컴포넌트 단위로 한정된 테스트로 전체를 테스트하는 불편함이 줄어들고 엄격한 테스트가 가능합니다.
- 분산 시스템 지원: 바인더 기반의 프로세스 통신을 통해 컴포넌트 간 위치 투명성이 보장되므로 분산 시스템을 지원합니다.
위와 같은 장점은 마이크로커널 구조의 운영체제가 갖는 장점과 매우 유사합니다.
바인더 메커니즘의 아이디어는 "모든 프로세스가 공유할 수 있는 영역에 요청 내용과 응답 내용을 쓰고, 각 프로세스가 그 메모리 주소를 참조하게 하자"입니다. 이를 위해 커널 공간이 사용됩니다.
출처: https://d2.naver.com/helloworld/47656
Service client가 binder를 통해 service server의 함수를 호출하는 과정
Sihyeon Kim
A simple yet classy theme for your Jekyll website or blog.
sihyeon-kim.github.io