콘텐츠로 바로가기

Inter-Process Communication (IPC)

독립된 주소 공간을 가진 프로세스들이 물리적 경계를 넘어 데이터를 안전하게 주고받는 다양한 통신 채널과 동기화 기법을 다루는 학습 노드입니다.

sys.entry
M

Me

hyunyoun's Blog

posts7 min read

1. Overview

프로세스 간 통신(Inter-Process Communication, IPC)은 운영체제가 프로세스들에게 부여한 '고립된 주소 공간'이라는 물리적 감옥의 벽을 뚫고, 정보를 교환할 수 있게 만드는 안전한 통로이자 물리적 교량입니다.

프로세스들은 서로의 메모리를 볼 수 없습니다. 학습자는 커널이 중재하는 메시지 패싱(Message Passing) 방식과, 두 프로세스 사이의 벽을 허물어 메모리를 직접 맞붙이는 **공유 메모리(Shared Memory)**의 하드웨어적 구현 차이를 배웁니다. 또한, 단방향 통로인 파이프(Pipe), 긴급한 물리적 신호인 시그널(Signal), 그리고 네트워크 너머를 잇는 **소켓(Socket)**의 데이터 흐름을 분석합니다. 이를 통해 거대한 시스템 구축을 위해 작은 프로그램들을 결합할 때 발생하는 통신 지연과 동기화의 물리 문제를 해결하는 능력을 확보합니다.

2. Scope & Boundaries

In-Scope

  • IPC Mechanisms: 공유 메모리, 메시지 큐, 파이프, 소켓, 세마포어, 시그널
  • Performance Trade-offs: 커널 모드 전환 유무에 따른 데이터 복사(Copy) 횟수 및 물리 지연 분석
  • Synchronization: 메시지 순서 보장과 Race Condition 방지를 위한 결합 물리
  • Kernel Intermediation: 통신 채널 생성 및 접근 제어를 위한 하드웨어 게이트 기법

Out-of-Scope

  • 고수준 분산 메시징 미들웨어(Kafka, RabbitMQ)의 상세 (07-06-XX 메시지 브로커 노드로 위임)
  • 어플리케이션 계층의 API 디자인 (JSON, gRPC 등)

Boundaries

  • IPC vs. Network: IPC가 '동일 운영체제 커널이 제공하는 지역적 소통'에 집중한다면, 네트워크는 '물리적 전선을 넘는 원격 소통'의 프로토콜 계층에 집중하여 구분합니다.

3. Counterexample

  • 단순히 "데이터를 공유하는 것"을 IPC라고 정의하는 것은 부족합니다. 왜 공유 메모리가 속도는 가장 빠르지만 동기화라는 '추가적인 물리 통제'가 반드시 필요한지 입증할 수 있어야 하며, 메시지 큐가 데이터 복사라는 오버헤드에도 불구하고 왜 시스템 결합도(Coupling) 측면에서 물리적 안정성을 제공하는지 설명하지 못한다면 IPC의 가치를 제대로 이해하지 못한 것입니다.

4. Prerequisites

  • Process Lifecycle & PCB (Basic): 주소 공간과 PCB 구조 기초가 필수입니다. (03-02-01 PLP)
  • Kernel Synchronization Primitives (Recommended): 락과 원자성 보증 이해가 권장됩니다. (03-01-04 KSP)

5. Learning Map

  1. The Wall Principle: 주소 공간 격리가 왜 필요한지 하드웨어 보안 철학을 리마인드합니다.
  2. Kernel Messengers: 커널을 우체국 삼아 편지(Message)를 주고받는 대행 모델을 배웁니다.
  3. Common Ground: "이 땅은 너와 나 우리 모두의 것"이라 선언하는 메모리 공유 물리를 익힙니다.
  4. Relay Circuits: 파이프와 소켓을 통해 데이터가 강물처럼 흐르는 스트림 경로를 완성합니다.

6. Learning Topics

Basic

Core: IPC의 필요성과 기본 분류 (IPC Foundations)

  • Why to Learn: 프로그램들이 협업해야 복잡한 기능을 수행할 수 있는데, 격리의 벽을 넘는 공식 방법이 IPC이기 때문입니다.
  • What to Learn:
    • Independent vs Cooperating: 고립된 프로세스와 소통하는 프로세스의 물리 행태
    • Data Copying: 유저 공간에서 커널로, 다시 유저로 이동하는 물리적 복사 과정
    • Synchronization: 메시지가 도착할 때까지 기다리는 '블로킹' 물리의 본질
  • How to Learn:
    • 두 독립 프로세스에서 상대방의 메모리 주소를 직접 읽으려 할 때 발생하는 'Segmentation Fault' 재현 실습
    • 파일 시스템을 통한 데이터 공유와 커널 IPC를 통한 공유의 속도 물리 비교
  • Implement: 두 프로세스가 서로의 존재를 확인하고 간단한 정수 하나를 주고받는 포트폴리오 스켈레톤

Core: 파이프, 시그널과 비동기 알림 (Signaling & Streams)

  • Why to Learn: 가장 단순하면서도 강력한 프로세스 통제 및 데이터 스트리밍 수단이기 때문입니다.
  • What to Learn:
    • Anonymous Pipe: 부모-자식 간의 물리적 파일 서술자 공유 통로
    • Named Pipe (FIFO): 파일 경로를 주소 삼아 모르는 프로세스끼리 잇는 물리 관로
    • Signals: 하드웨어나 OS가 프로세스에게 던지는 물리적 '가로채기' 이벤트(SIGKILL,SIGINTSIGKILL, SIGINT)
  • How to Learn:
    • ls | grep 명령을 내렸을 때 커널 수준에서 파이프가 어떻게 두 프로세스의 I/O를 물리적으로 물리적으로 연결하는지 추적 실습
    • Ctrl+C를 눌렀을 때 CPU가 현재 프로세스의 실행을 멈추고 시그널 핸들러로 점프하는 하드웨어 시퀀스 분석
  • Implement: 특정 이벤트를 감지하면 다른 프로세스에게 시그널을 보내 우아하게 종료시키는 통제 스크립트

Practical

Core: 공유 메모리와 메시지 큐 (Shared Memory vs Queues)

  • Why to Learn: 대용량 데이터 처리와 작업 큐 기반의 아키텍처를 설계하는 물리적 표준이기 때문입니다.
  • What to Learn:
    • Shared Memory Model: 동일한 물리 페이지를 두 프로세스의 페이지 테이블에 동시에 사상하는 기법
    • Message Queue Model: 메시지 경계(Boundary)가 보존되는 신뢰성 있는 전송 물리
    • Race Condition in Shm: 락(Lock) 없이 메모리를 건드릴 때 발생하는 물리적 데이터 파손 현상
  • How to Learn:
    • 1GB 데이터를 넘길 때 공유 메모리와 소켓 통신의 소요 시간 차이를 측정하여 'Zero-copy'의 위력 실습
    • 세마포어를 써서 공유 메모리 접근 순서를 물리적으로 통제(Serialize)하는 과정 분석
  • Implement: POSIX Shared Memory API를 사용하여 서로 다른 바이너리가 같은 배열을 실시간 업데이트하는 모듈

Advanced

Core: 소켓 물리와 네트워크 IPC (Socket Internals)

  • Why to Learn: 한 대의 컴퓨터를 넘어 분산 시스템으로 확장되는 통신 물리체계를 이해하기 위함입니다.
  • What to Learn:
    • Domain Socket: 같은 장치 내에서 네트워크 스택을 거치지 않고 직접 통신하는 고속 물리 채널
    • Protocol Buffering: 데이터가 유저 스택에서 커널 버퍼로 쌓이는 물리적 대기 열
    • Serialization Physics: 메모리 상의 객체를 바이트 흐름으로 납작하게 펴서 물리 전선에 태우는 과정
  • How to Learn:
    • TCP 소켓과 Unix Domain 소켓의 지연 시간(Latency) 차이를 비교하여 커널 프로토콜 처리 오버헤드 산출 실습
    • 통신 버퍼가 가득 찼을 때(Flow Control) 커널이 수신 프로세스를 어떻게 물리적으로 멈추는지 연구
  • Implement: 유닉스 도메인 소켓을 사용하여 커널 바이패스 수준의 고속 데이터 릴레이 엔진

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
IPC 서로 다른 프로세스가 데이터를 물리적으로 교환하거나 공동 작업을 수행하는 커널 중재 메커니즘입니다. 기본 통신 기초 Channel / Buffer RPC '단순한 파일 읽기'와는 차원 다름 P1:CS2023 core
Shared Memory 두 개 이상의 프로세스가 동일한 물리 메모리 영역을 자신의 주소 공간에 사상하여 공유하는 기법입니다. 추천 고속 전송 Page Mapping / Zero-copy Message Queue 동기화 없으면 데이터 오염 P1:CS2023 core
Pipe 한 프로세스의 출력을 다른 프로세스의 입력으로 직접 연결하는 선입선출(FIFO) 기반의 물리 통로입니다. 추천 스트림 통신 Buffer / Descriptor Socket 단방향이 기본임 Industry Phil core
Signal 프로세스에게 비동기적으로 이벤트를 알리는 소프트웨어적 인터럽트 기법입니다. 실무 상태 제어 Handler / Async Interrupt 데이터 전달용보다는 상태 전이용 P1:CS2023 core

8. References

Primary

Secondary

  • [Unix Network Programming, Vol 2: Interprocess Communications] W. Richard Stevens — The IPC bible.
  • [Advanced Programming in the UNIX Environment] Stevens & Rago — Implementation details.

Industry

  • [The Open Group: POSIX.1-2017 IPC Specifications] — API standards.
  • [Linux Kernel: IPC Overview] — Implementation of System V and POSIX IPC.

9. Final Checklist

Primary

  • '메시지 패싱'과 '공유 메모리'의 물리적 데이터 전달 방식(복사 vs 직접 참조)의 차이를 설명 가능한가? (P1)
  • '시그널'을 통해 실행 중인 프로세스를 강제 종료시킬 때 커널이 PCB의 상태를 어떻게 물리적으로 바꾸는지 입증할 수 있는 가? (P1)

Secondary

  • 대용량 이미지 처리 협업 시, '메시지 큐'보다 '공유 메모리'가 왜 물리적 대역폭 낭비를 획기적으로 줄여주는지 소통 가능한가?
  • 파이프의 '버퍼 크기'가 가득 찼을 때, 데이터를 쓰는(Write) 프로세스가 왜 물리적으로 멈춰야(Block) 하는지 원리를 도출할 수 있는 가?

Industry

  • 마이크로서비스 아키텍처(MSA)를 한 서버 내에서 구현할 때, 왜 TCP 소켓보다 'Unix Domain Socket'이 물리적 성능 측면에서 유리한지 제안할 수 있는 가? (SFIA)
  • 공유 메모리를 사용할 때 발생하는 '교착 상태(Deadlock)'를 방지하기 위해 세마포어를 하드웨어 친화적으로 배치하는 최우선 순위 기법을 기술할 수 있는 가?