[OS] 프로세스 간 통신하기 (IPC)
이 포스트는 개인 학습을 기록한 내용을 담고 있어 추후 수정될 수 있습니다.
프로세스는 메인 메모리에서 독립적으로 실행되는 프로그램 단위입니다.
각각의 프로세스는 고유의 주소 공간을 할당 받고 각자의 실행 흐름을 갖고 있기 때문에
한 프로세스가 다른 프로세스 주소 공간에 접근하여 데이터를 공유하는 것은 불가능합니다.
따라서 운영체제에서는 프로세스 간 데이터를 교환하고 상호작용을 위한 통신 메커니즘으로
IPC(Inter Process Communication)을 지원합니다.
IPC란
Inter Process Communication의 약자로 프로세스 간 통신 메커니즘을 의미합니다.
IPC는 동일한 시스템(= 같은 하드웨어)에서 실행되는
두 개 이상의 프로세스가 서로 통신하고 데이터를 주고 받을 수 있도록 합니다.
IPC 통신 메커니즘은 프로세스 간 통신 목적에 따라 파이프, 메시지 큐, 공유 메모리, 소켓 등
여러 통신 방법을 선택할 수 있습니다.
1. 파이프 (Pipe)
파이프는 운영체제에서 제공하는 기본 IPC 메커니즘 중 하나입니다.
이 방법은 단방향 통신을 위해 사용되며, 주로 부모와 자식 프로세스 사이에서
데이터를 전달하는 용도로 사용됩니다.
부모 프로세스가 파이프를 생성하고, 자식 프로세스에게 파이프를 상속시킨 뒤
파이프를 사용해 두 프로세스 간 통신이 이뤄집니다.
여기서 파이프는 운영체제가 관리하기 때문에 별도의 동기화 메커니즘을 사용하지 않습니다.
장점
- 구현이 간단하며, 운영체제가 지원하는 기본 IPC 방법
- 단일 시스템(=한 개의 컴퓨터)에서 부모, 자식 프로세스 간 통신에 적합
단점
- 단방향 통신만 가능, 양방향은 2개의 파이프 필요
- 단일 시스템에서만 가능하며, 외부 시스템의 프로세스와 통신 불가능
메시지 큐 (Message Queue)
메시지 큐는 통신하려는 프로세스 간 메시지를 비동기적으로 교환하기 위한 IPC 메커니즘입니다.
여기서 사용되는 Queue(메시지 큐)는 운영체제가 제공하는 중간 매체로 사용됩니다.
데이터를 송신하려는 프로세스는 큐에 Push하고
데이터를 수신하려는 프로세스는 큐를 Pop하여 저장된 데이터를 가져옵니다.
이름에서 알 수 있듯 Queue를 사용하기 때문에 FIFO(First-In First-Out)구조를 사용합니다.
장점
- 비동기적으로 메시지를 교환할 수 있어서 유연성과 확장성이 높습니다.
- 여러 프로세스 간 메시지 통신이 가능합니다.
단점
- 운영체제가 메시지 큐를 제공하기 때문에 운영체제에 따라 이식이 제한될 수 있음(이식성 제한)
- 메시지 전달을 위해서 시스템 콜(System Call)이 필요
공유 메모리 (Shared Memory)
공유 메모리는 여러 프로세스가 동일한 메모리 영역을 공유하며 데이터를 교환하는 IPC 메커니즘입니다.
이 방법은 주로 빠른 데이터 공유와 동기화를 위해서 사용됩니다.
공유 메모리를 사용하기 위해서는 운영체제가 제공하는 공유 메모리 함수를 사용하여
공유 메모리 세그먼트를 생성하고 공유 메모리를 이용하려는 프로세스의 주소 공간에 연결해야 합니다.
이 메모리를 사용할 때 주의할 점은 데이터의 일관성입니다.
여러 프로세스가 동시에 메모리에 접근하기 때문에 적절할 동기화 방법을 사용해서
데이터의 일관성을 유지해야 합니다.
장점
- 공유 메모리로 데이터를 직접 공유하기 때문에 복사, 전달 과정이 없어 빠른 데이터 공유 가능
- 데이터 공유를 위한 동기화가 필요없음
단점
- 여러 프로세스가 동시에 접근하기 때문에 데이터 일관성과 동기화 필요
소켓 (Socket)
소켓은 네트워크를 통해 프로세스 간 통신하는 IPC 메커니즘입니다.
소켓은 클라이언트-서버 모델을 기반으로 동작하며,
네트워크를 사용해 다른 시스템(=다른 컴퓨터)의 프로세스와 통신이 가능합니다.
소켓은 다른 시스템의 프로세스와 통신하기 위해서
IP 주소와 포트번호를 통해 데이터의 이동 경로를 설정하고
통신하면서 신뢰성을 보장하기 위해서 TCP 와 같은 다양한 규약을 사용합니다.
소켓 통신에 대한 설명은 이 블로그 Network Socket 카테고리에서 확인하실 수 있습니다.
장점
- 외부 시스템과 통신이 가능
- 클라이언트-서버 모델로 동작하여 분산 시스템 구축에 용이
단점
- 네트워크 기반 통신이기 때문에 네트워크에 문제가 있다면 통신 자체가 불가능
- 소켓을 사용하기 위해서는 시스템 콜(System Call)이 필요