28.4.1 운영체제 프로세스 단위 내 직렬화 우회 및 프로세스 간 메모리 큐 통신 체계
로보틱스 애플리케이션에서 방대한 양의 센서 데이터를 분산 모듈 간에 실시간으로 전송하기 위해서는 전통적인 네트워크 통신 프로토콜이 유발하는 구조적 병목 현상을 원천적으로 제거해야 한다. ROS2는 두 가지 상이한 아키텍처적 관점, 즉 ’동일 운영체제 프로세스 내벽’과 ’물리적 동일 호스트 내의 이기종 프로세스 간’이라는 조건에 따라 각각 최적화된 직렬화 우회 메커니즘과 메모리 큐(Memory Queue) 교환 규약을 제공한다.
1. 운영체제 프로세스 단위 내 직렬화 우회 메커니즘
서로 다른 두 노드가 컴포넌트(Component) 컨테이너 기법을 통해 단일 프로세스(Single Process) 메모리 공간에 적재되었을 때 통신 역학은 극적인 최적화를 맞이한다. 일반적인 노드 간 퍼블리싱은 C++ 원시 구조체(Native Structure)를 바이트 스트림(Byte Stream)으로 평탄화(Flattening)하는 데이터 분배 서비스(DDS) 레이어의 CDR(Common Data Representation) 직렬화 알고리즘을 강제 수행한다. 그러나 송수신 노드가 동일 힙(Heap) 주소 공간을 공유함을 미들웨어가 런타임에 인지할 경우, 이 직렬화 연산과 하부 네트워크 소켓 전송 과정 전체가 즉시 우회(Bypass)된다.
이 과정에서 퍼블리셔가 발행한 메시지의 포인터는 미들웨어의 중개 없이 ROS 클라이언트 라이브러리(RCL) 계층 내부에 마련된 직접 메모리 큐(Direct Memory Queue)로 삽입된다. 곧이어 실행자(Executor)가 서브스크라이버의 콜백 이벤트를 트리거하면, 서브스크라이버는 해당 포인터에 직접 접근하여 원본 데이터를 상호 복사 오버헤드 없이 인가받는다. 이는 컴파일러 최적화 수준의 함수 호출(Function Call)에 준하는 통신 효율을 보장하는 학술적으로 가장 이상적인 내부 IPC(Inter-Process Communication) 단절 구조이다.
2. 프로세스 간(Inter-Process) 공유 메모리 기반 제로 카피 체계
반면 시스템 아키텍처의 설계상 노드들이 물리적으로 분리된 운영체제 프로세스(Isolated Process)로 구동되어야 하는 상황에서도, 이들이 동일 호스트(Machine) 내부에서 작동한다면 네트워크 스택의 통과를 최소화할 수 있다. 분산된 단일 코어 또는 멀티 코어 환경에서 루프백 네트워크 인터페이스(Loopback Network Interface, e.g., 127.0.0.1)를 거치는 대신, 최신 DDS 구현체(예: Eclipse Iceoryx 기반 Fast DDS)는 POSIX 표준 기반의 시스템 공유 메모리(Shared Memory, SHM) 풀(Pool)을 활성화한다.
이 체계에서 퍼블리셔 프로세스는 개별 프로세스의 격리된 가상 메모리가 아닌, 커널(Kernel) 단에서 매핑된 전역 공유 메모리 블록에 메시지를 한 번만 기록한다. 이후 실제 데이터의 이동 없이 메모리 세그먼트의 서술자(Descriptor)와 읽기/쓰기 동기화 락(Synchronization Lock) 신호만을 경량화된 IPC 큐(IPC Queue)를 통해 서브스크라이버 프로세스로 전달한다.
서브스크라이버 측은 전달받은 서술자를 통해 자신의 가상 주소 공간에서 그 공유 객체에 직접 매핑하여 데이터 연산을 수행하게 된다. 이 두 가지 구조적 메커니즘(내부 큐 우회 및 외부 커널 SHM 매핑)의 유기적인 조화는 대용량 로보틱스 페이로드 통신 모델에 있어서 O(1) 수준의 결정적 런타임 확정성(Determinism)을 완성하는 핵심 토대로 기능한다.