QNX RTOS: 5. Interprocess Communication

2025. 11. 27. 17:46운영체제/QNX

1. IPC란 무엇인가?

IPC(Inter-Process Communication) =

두 프로세스가 서로 데이터를 보내거나(Event, Data), 제어 명령을 교환하는 행위

예:

  • 한 프로세스의 스레드가
    다른 프로세스의 스레드로 메시지를 보내는 것 → IPC
  • 이벤트 발생을 알려주는 알림(Notify) → IPC
  • 데이터를 공유하는 Shared Memory 활용 → IPC

즉, “프로세스 간 협업을 위한 모든 수단”이 IPC.


2. QNX가 제공하는 IPC는 크게 두 종류

QNX IPC는 크게 Core IPCPOSIX IPC로 나뉨.


2.1 QNX Core IPC (QNX 고유 기능 — 핵심)

QNX OS의 가장 기초가 되는 IPC이며, OS 내부 구성요소도 전부 이걸로 움직인다.

✔ 구성 요소

  1. QNX Message Passing (기본 IPC)
    • 프로세스 간 Request/Reply 기반 메시지 전송
    • Block/Unblock 기반 → RTOS 실시간성 최적화
    • 서버/클라이언트 구조 구현에 최적
  2. QNX Pulses
    • 매우 빠르고 작은 notification 이벤트
    • Interrupt handler → User thread 전달에도 사용
    • 비용이 극도로 낮아서 신호(notify) 용도에 최적
  3. QNX Shared Memory (Core SHMEM)
    • 여러 프로세스가 동일 메모리 페이지를 맵핑하여 데이터 공유
    • 가장 빠른 IPC 형태
    • 단점: 동기화는 별도로 필수(Mutex/Condvar 필요)

Core IPC는 QNX 전용 구조이며, 모든 QNX 드라이버/서버가 실제로 사용하는 방식.


2.2 POSIX IPC (Portable API — 다른 OS에서도 동일하게 사용)

다른 UNIX 계열 OS와 호환되는 IPC 표준 API.
다만 QNX에서는 일부 기능이 프로세스 형태로 구현되어 있음.

✔ POSIX IPC 구성 요소

  1. POSIX Signals (시그널)
  2. POSIX Shared Memory (shm_open())
  3. POSIX Pipes
    • 사용하려면 pipe 프로세스가 반드시 존재해야 함
  4. POSIX Message Queues
    • QNX에서는 mqueue 프로세스가 필요
  5. TCP/IP Sockets
    • QNX에서 TCP/IP 기능은 io-sock 리소스 매니저가 제공

즉, POSIX IPC는 “휴대용 API”라서 다른 OS와 코드 공유에 유리하지만,
QNX 핵심 성능은 Core IPC가 훨씬 우수함.


3. QNX IPC를 보는 핵심 관점

✔ (1) QNX Core IPC는 RTOS 실시간성 최적화

  • Message Passing은 “커널이 직접 스레드 간 데이터 복사”
  • Block/Unblock 기반 scheduling → latency 매우 낮음
  • microkernel 구조에서 모든 자원 관리가 “메시지 기반”으로 동작

즉, QNX는 IPC 중심으로 설계된 OS.


✔ (2) POSIX IPC는 portability는 좋지만 성능은 QNX Core보다 낮음

  • mqueue / pipe / io-sock 같은 프로세스에 의존
  • latency가 QNX Message Passing보다 높음
  • 실시간 제어에는 다소 불리

→ 차량/로봇 분야에서는 대부분 Core IPC 사용

 


4. 핵심 요약

  • IPC = 프로세스 간 데이터/이벤트 교환
  • QNX는 Core IPC(Message, Pulse, SHMEM)POSIX IPC 모두 지원
  • Core IPC는 QNX OS의 근간이며 실시간성과 성능이 탁월함
  • POSIX IPC는 휴대용이지만 QNX에서는 부가 프로세스(pipe, mqueue, io-sock)가 필요함