하나의 운영 체제(OS)에서 실행 중인 여러 프로세스가 서로 데이터를 주고 받거나 동기화 하기 위해 사용하는 메커니즘
운영 체제(OS)는 기본적으로 프로세스 간의 메모리를 격리하므로, 이들을 연결해주는 수단인 IPC(Inter-Process Communication)이 필요
운영 체제에서 제공하는 가장 기본적인 IPC 통신 메커니즘으로 단방향 통신을 위해 사용되며, 부모 프로세스와 자식 프로세스 사이에서 데이터를 전달하는 용도로 주로 활용
파일 디스크립터를 통해 접근되며, 파이프에 데이터를 기록하는 프로세스는 파이프로부터 데이터를 읽는 프로세스에게 데이터를 전달
부모 프로세스는 파이프를 생성하고 자식 프로세스에게 파이프를 상속 이후 부모 프로세스는 파이프의 쓰기 끝을 닫고 자식 프로세스는 파이프의 읽기 끝을 닫아서 데이터를 주고 받음
파이프는 운영 체제에서 관리되기 때문에 별도의 동기화 메커니즘 필요 x
부모-자식 관계인 두 프로세스 간에만 사용 가능
이름을 부여해서 전혀 관련 없는 프로세스 간에도 사용 가능
운영체제 Kernel이 관리하는 Queue에 메시지를 보내고 받음.
비동기적으로 데이터를 주고 받을 수 있는 구조
Shared Memory를 사용하기 위해서는 OS가 제공하는 Shared Memory 함수를 사용하여 Shared Memory Segment를 생성하고 Process의 주소 공간에 연결 필요
Shared Memory를 사용할 때 주의할 점은 데이터의 일관성과 동기화!!
여러 Process가 동시에 Shared Memory에 접근하므로, 적절한 동기화 메커니즘(Mutex, Semaphore)를 사용하여 데이터의 일관성과 상호 배타적인 접근 보장 필요
일반적으로 Socket은 IP주소와 Port 번호를 사용하여 특정 프로세스와 통신하며, Client Socket과 Server Socket이 상호 작용하여 데이터를 송수신
임베디드 시스템에서 Socket을 구현하기 위해서는 네트워크 스택과 Socket Library를 사용
프로세스 간에 간단한 메시지를 보내는 방식
예: SIGKILL, SIGINT, 사용자 정의 시그널 등.
지금까지 대표적인 IPC(Inter-Process Communication) 방식들인 Pipe, Message Queue, Shared Memory, Socket, Signal에 대해 간단히 정리해보았습니다.
각 방식마다 특징과 사용 목적이 다르기 때문에, 시스템 구조나 요구 사항에 따라 적절한 IPC 기법을 선택하는 것이 중요합니다.
앞으로는 이 중에서도 Shared Memory와 Socket을 중심으로,
직접 구현해보는 예제와 함께 실제 개발에서 어떻게 활용할 수 있는지에 대해 자세히 다룰 예정입니다.
예제를 통해 이론 뿐만아니라 실무 감각까지 익힐 수 있는 글을 준비하겠습니다!😄