1261.16 프로세스 간 통신(IPC)의 기초

1. 프로세스 간 통신의 정의

프로세스 간 통신(Inter-Process Communication, IPC)은 동일 호스트 또는 네트워크로 연결된 상이한 호스트에서 실행되는 복수의 프로세스가 데이터를 교환하고 실행을 동기화하는 메커니즘의 총체를 의미한다. Tanenbaum과 Bos(2014)는 Modern Operating Systems에서 IPC를 운영체제가 제공하는 핵심 추상화 중 하나로 분류하였다.

로봇 시스템에서 IPC는 특별한 중요성을 갖는다. 현대의 로봇 소프트웨어 아키텍처는 센서 드라이버, 인지 모듈, 제어기, 행동 관리기 등의 기능을 독립적인 프로세스로 분리하여 실행하는 구조를 채택한다. 이러한 다중 프로세스 구조에서 IPC는 각 프로세스를 연결하는 통신 기반(communication substrate)의 역할을 수행한다.

2. IPC의 기본 메커니즘

2.1 공유 메모리 (Shared Memory)

공유 메모리는 복수의 프로세스가 동일한 물리적 메모리 영역을 공유하여 데이터를 교환하는 메커니즘이다. POSIX 공유 메모리(shm_open, mmap) 또는 System V 공유 메모리(shmget, shmat)를 통해 구현된다.

공유 메모리의 주요 특성은 다음과 같다.

장점: 프로세스 간 데이터 복사(copy)가 발생하지 않아 대용량 데이터(예: 영상 프레임, 점군 데이터)의 전송에 있어 최소한의 지연 시간과 최대의 처리량(throughput)을 제공한다.

제약: 공유 메모리 자체는 동기화 메커니즘을 제공하지 않는다. 따라서 복수의 프로세스가 동시에 공유 영역에 접근할 때 발생하는 경쟁 조건(race condition)을 방지하기 위하여 뮤텍스(mutex), 세마포어(semaphore) 등의 동기화 원시 연산(synchronization primitive)을 병용하여야 한다.

공유 메모리를 통한 데이터 교환의 지연 시간 \tau_{\text{shm}}은 다음과 같이 근사할 수 있다.

\tau_{\text{shm}} \approx \tau_{\text{sync}} + \tau_{\text{cache}}

여기서 \tau_{\text{sync}}는 동기화 연산의 소요 시간, \tau_{\text{cache}}는 캐시 일관성(cache coherence) 프로토콜에 의한 지연이다. 데이터 복사 비용이 없으므로 대용량 데이터에서 현저한 성능 우위를 보인다.

2.2 메시지 전달 (Message Passing)

메시지 전달은 프로세스 간에 구조화된 메시지를 명시적으로 송수신하는 메커니즘이다. 운영체제 수준에서는 파이프(pipe), 명명된 파이프(named pipe, FIFO), 메시지 큐(message queue), 유닉스 도메인 소켓(Unix domain socket) 등이, 네트워크 수준에서는 TCP/IP 소켓, UDP 소켓 등이 메시지 전달의 매체로 사용된다.

메시지 전달의 주요 특성은 다음과 같다.

장점: 송신 프로세스와 수신 프로세스 간의 메모리 주소 공간이 완전히 분리되어 있어, 한 프로세스의 메모리 오류가 다른 프로세스에 전파되지 않는다. 또한, 네트워크를 통한 원격 통신(remote communication)으로 자연스럽게 확장할 수 있다.

제약: 메시지의 직렬화(serialization), 전송, 역직렬화(deserialization)에 의한 오버헤드가 발생한다. 특히 대용량 데이터의 전송 시 데이터 복사 비용이 가산된다.

메시지 전달의 지연 시간 \tau_{\text{msg}}은 다음과 같이 분해할 수 있다.

\tau_{\text{msg}} = \tau_{\text{ser}} + \tau_{\text{copy}} + \tau_{\text{transport}} + \tau_{\text{deser}}

여기서 \tau_{\text{ser}}는 직렬화 시간, \tau_{\text{copy}}는 데이터 복사 시간, \tau_{\text{transport}}는 전송 시간, \tau_{\text{deser}}는 역직렬화 시간이다.

2.3 신호 (Signal)

신호(signal)는 프로세스에 비동기적 이벤트를 통지하는 경량 메커니즘이다. 전달할 수 있는 정보량이 극히 제한적이며, 주로 프로세스 종료 요청, 인터럽트 통지, 알람 등의 제어 목적으로 사용된다. 로봇 시스템에서는 비상 정지 신호의 전달이나 프로세스 생명주기 관리에 활용될 수 있다.

3. IPC 메커니즘의 비교

메커니즘통신 범위데이터 복사동기화대역폭지연 시간
공유 메모리동일 호스트없음 (제로 카피)외부 동기화 필요최대최소
파이프동일 호스트커널 버퍼 경유내재적중간중간
메시지 큐동일 호스트커널 공간 복사내재적중간중간
유닉스 도메인 소켓동일 호스트커널 공간 복사내재적중간~높음중간
TCP 소켓네트워크전체 복사 + 전송내재적네트워크 의존높음
UDP 소켓네트워크전체 복사 + 전송없음네트워크 의존중간~높음

4. 로봇 미들웨어에서의 IPC 추상화

로봇 통신 미들웨어는 상기의 IPC 메커니즘을 추상화하여, 응용 개발자가 저수준의 IPC 세부 구현에 관여하지 않고도 프로세스 간 데이터 교환을 수행할 수 있게 한다.

4.1 ROS2에서의 IPC 구현

ROS2는 DDS 미들웨어를 기본 통신 계층으로 사용하며, DDS는 내부적으로 공유 메모리, UDP 멀티캐스트(multicast) 등의 전송 메커니즘을 활용한다. 동일 호스트 내의 프로세스 간 통신에서는 공유 메모리 전송(shared memory transport)이 활성화될 수 있으며, 이를 통해 대용량 데이터의 제로 카피(zero-copy) 전송이 가능하다.

ROS2는 또한 동일 프로세스 내의 노드 간 통신을 위한 프로세스 내 통신(intra-process communication) 메커니즘을 제공한다. 이 메커니즘은 동일 프로세스 내에서 메시지의 포인터를 직접 전달함으로써 직렬화 및 데이터 복사 오버헤드를 완전히 제거한다. rclcpp::NodeOptions에서 use_intra_process_comms 옵션을 활성화하여 사용할 수 있다.

4.2 제로 카피 전송의 원리

제로 카피(zero-copy) 전송은 메시지 데이터의 물리적 복사 없이 발행자에서 구독자로 데이터를 전달하는 기법이다. 이는 공유 메모리 영역에 데이터를 기록하고 해당 영역에 대한 참조(reference)만을 전달함으로써 구현된다. Iceoryx와 같은 공유 메모리 기반 DDS 구현은 이 기법을 체계적으로 지원하며, 영상이나 점군과 같은 대용량 센서 데이터의 전달에서 현저한 성능 향상을 제공한다.

5. 로봇 행동 제어에서의 IPC 설계 고려사항

행동 제어 시스템의 IPC 설계에서는 다음의 사항을 고려하여야 한다.

첫째, 지연 시간의 최소화이다. 센서 데이터로부터 행동 결정에 이르는 전체 처리 경로(processing pipeline)에서 IPC에 의한 지연은 제어 루프의 주기에 비하여 충분히 작아야 한다.

\tau_{\text{IPC}} \ll T_{\text{control}}

여기서 T_{\text{control}}은 제어 루프의 주기이다.

둘째, 결정론적 타이밍(deterministic timing)의 보장이다. 안전 임계적 행동에서는 IPC의 지연 시간이 사전에 정해진 상한 내에서 보장되어야 한다. 이를 위하여 실시간 운영체제(RTOS)의 IPC 메커니즘이나 우선순위 기반 스케줄링을 활용한다.

셋째, 데이터 일관성(data consistency)의 유지이다. 복수의 프로세스가 동일한 데이터를 공유할 때, 부분적으로 갱신된 데이터의 관측(torn read)을 방지하기 위한 동기화 전략이 필요하다.

넷째, 장애 격리(fault isolation)이다. IPC 메커니즘의 선택은 프로세스 간의 장애 전파 특성에 영향을 미친다. 메시지 전달 방식은 프로세스 간의 메모리 격리를 유지하여 한 프로세스의 장애가 다른 프로세스에 파급되는 것을 방지하는 반면, 공유 메모리 방식은 격리 수준이 상대적으로 낮다.

IPC의 기초에 대한 이해는 로봇 통신 미들웨어의 내부 동작 원리를 파악하고, 행동 제어 시스템의 성능 최적화를 위한 적절한 통신 구성을 선택하는 데 필수적인 기반 지식이다.