임베디드에서의 메일박스(Mailbox) 사용

IPC(Inter Process Communication)

최근 SoC는 MCU, DSP, GPU 등 여러 프로세스를 내장하고 있기 때문에 프로세스 간 데이터 통신을 필연적으로 사용해야 하는 경우가 많다. 그런데 기본적으로 프로세스들은 안전성을 위해 자신에게 할당된 메모리 영역 이외의 다른 프로세스의 메모리 영역에는 접근이 불가능하다. 그래서 데이터 통신을 위한 방법이 필요하고 이러한 방법들을 통틀어 IPC라고 한다. 이 IPC를 위한 방법은 직접 전송, 파이프, 공유 메모리 등 여러 종류가 있다. 그중에서 오늘의 주인공은 메일박스다.

메일박스 사용 이유

IPC를 위한 방법들은 각각의 장단점이 있다. 그런데 그 중에서 메일박스를 사용하는 이유는 사용하려는 칩에 메일박스가 있기 때문이다. 칩에 메일박스가 있으면 메일박스와 관련된 SDK가 있을 것이고 이것을 활용할 수 있다. 메일박스를 사용하지 않고 다른 방법을 사용해도 되겠지만 (아마도)작업 난이도가 올라갈 것이다. 칩사에서 메일박스를 지원하는 이유도 있을 것이다.

*아래 칩은 예시일 뿐이며 SDK를 제공해주는지 확인하지 않았다.

ADSP-CM41xF Block Diagram

메일박스 개념

메일박스는 두 프로세스간 데이터가 이동할 때 중간에 메일박스를 거쳐서 이동하는 방법이다.

프로세스 A가 메일박스로 데이터를 송신하면 메일박스는 프로세스 B에게 데이터가 왔다는 것을 알려준다. 이후 프로세스 B가 받을 준비가 되면 메일박스에서 프로세스 B로 송신한다. 이때 실제 데이터가 이동하는 것이 아닌 데이터의 주소를 이동시켜서 오버헤드를 감소시킨다. 또한 메일박스는 브로드캐스팅이 가능하여 여러 프로세스간 통신이 가능하다.

실제 구현을 위한 필요 함수는 send(목적지, &메일박스), receive(송신지, &메일박스), open(&메일박스), close(&메일박스) 정도로 사용이 간편하다. 그러나 메일박스는 단방향 통신이므로 일반적으로는 두개의 채널(메일박스 두 개 생성)로 양방향을 구현하는 듯 보인다.

Leave a Comment