1. Binder
1.1 Binder란?
안드로이드에서 바인더는 각각 독립된 프로세서들을 연결해주는 역할을 한다.
리눅스에서 시스템의 기능을 이용하기 위해서 시스템 콜(system call)을 사용하여 시스템에서 제공하는 프로세서, 파일 시스템 기능을 이용하도록 제공하고 있다.
하지만 안드로이드에서는 각 독립적으로 운영되는 프로세스, 특히 서비스의 기능을 이용할 수 있도록 제공하는 것이 바인더의 핵심이다.
안드로이드 시스템을 개발하는 시스템 개발자의 입장에서 기존 서비스의 변경이나 기능 추가 또는 새로운 서비스를 구성하기위해 어떠한 표준 인터페이스를 통해 서비스를 구현해야 하는지 알아야하기 때문에 바인더에 대해 이해하고 있어야한다.
운영체제 혹은 시스템에서 제공해 주는 기능을 각각의 컴포넌트 혹은 모듈 형태로 만들고 이것을 운영할 수 있도록 만들어 주는 것이 바인더의 가장 큰 목적이다.
1.2 IPC (Inter Process Communication)
- process A에서 B로 데이터를 전송할 경우의 예제
2. 대표적인 IPC
1. Message Queue
- 프로세서 간 주고 받는 메시지를 커널에 복사하고 읽어가는 방식
- IPC 내의 메시지를 하나의 구조체 형태로 통째로 주고 받을 수 있어서 구현하기에 편리
- 여러가지 이벤트를 하나로 관리, 사용하기에 편리
2. Shared Memory
- 프로세스간에 공유 메모리를 지정하여, 이 영역에 복사하고 읽어감
3. UDS (Unix Domain Socket)
- 기존 소켓 API와 유사하게 사용
- 여러가지 이벤트를 하나로 사용하기에 편리한 구조
IPC는 각 프로세스간 어떠한 식으로 데이터를 전송하고 데이터를 받을 수 있을지에 대한 약속일 뿐, 각각의 프로세서가 정해진 방법으로 통신 할 수 있도록 구현해야함
3. 안드로이드 바인더를 이용한 서비스의 구조
안드로이드 IPC의 전체구조
1. 바인더 드라이버
안드로이드 IPC시스템의 핵심, 서비스 프로바이더와 서비스 유저 사이의 데이터를 전달하는 역할
2. 서비스 프로바이더
안드로이드 시스템에서 서비스를 제공하는 서비스 역할, 바인더 드라이버로부터 받은 데이터를 파싱하여 처리하는 역할을 함
3. 서비스 매니저
특별한 서비스 프로바이더, 다른 서비스 프로바이더의 서비스를 관장
4. 서비스 유저
서비스의 프로바이더 기능을 호출하는 응용 프로그램이나 서비스, 바인더의 핵심은 IPC 방법을 통하여 다른 프로세서, 즉 서비스 프로바이더의 기능을 호출하는 것이 목적
4. 구성
바인더는 리눅스 커널에서의 드라이버 디렉터리 아래 2개의 파일로 구성되어있다.
drivers/staging/android/binder.h
drivers/staging/android/binder.c
다음과 같은 정보가 담겨져있다.
Proc 디렉터리
바인더를 호출한 프로세스의 내용
state
binder_read_proc_state()함수를 이용해 binder state 내용을 보여줌
state
binder_read_proc_transactions()
transcation_log
binder_read_proc_transcation_log(type struct binder_transaction_log)
failed_transcation_log
binder_read_proc_transcation_log(type struct binder_transaction_log)
binder_proc structure의 주요 부분
* currnet process
* process ID
* memory mapping information
* 바인더의 통계 정보
* thread 정보
<binder.c 위치 찾는 명령어>
'Android OS' 카테고리의 다른 글
Ubuntu에서 NDK 설치, 설정, 실행해보기 (3) | 2024.11.07 |
---|---|
Android Boot & Init (3) | 2024.11.01 |
Android.mk (0) | 2024.10.31 |
Android Platform 구조 (0) | 2024.10.31 |
ADB : 안드로이드에 APK파일 설치하기 (0) | 2024.10.31 |