IPC(Inter-Process Communication, 프로세스 간 통신)은 두 개 이상의 프로세스가 서로 데이터를 주고받거나 자원을 공유하기 위해 사용하는 메커니즘이다. 운영체제는 IPC를 통해 프로세스 간 효율적이고 안전한 데이터 교환을 가능하게 한다.
IPC의 필요성
- 데이터 공유:
- 여러 프로세스가 동일한 데이터를 처리해야 할 때 데이터의 일관성을 유지.
- 병렬 처리 지원:
- 분리된 프로세스가 작업을 나누어 병렬로 실행 가능.
- 효율적인 자원 사용:
- 메모리, CPU, 파일 등 자원을 효과적으로 공유.
- 프로세스 협력:
- 프로세스 간 협력을 통해 복잡한 작업을 수행.
IPC 메커니즘의 종류
메시지 전달(Message Passing)
- 프로세스 간 데이터를 주고받는 방식으로, 메시지를 교환한다.
- 장점: 데이터 교환이 간단하며 메모리를 공유하지 않아 충돌 위험이 적음.
- 방법:
- 직접 통신(Direct Communication):
- 프로세스가 서로의 이름을 알고 직접 메시지를 주고받음.
- 간접 통신(Indirect Communication):
공유 메모리(Shared Memory)
- 프로세스들이 공통 메모리 영역을 사용해 데이터를 교환.
- 장점: 메시지 전달 방식보다 빠름(커널 간섭 적음).
- 단점: 메모리 접근 동기화 필요(예: 뮤텍스, 세마포어).
- 사용 예:
- 생산자-소비자 문제(Producer-Consumer Problem).
파일 시스템(File System)
- 프로세스가 파일을 읽고 쓰는 방식으로 데이터를 공유.
- 특징:
- 파일 시스템을 이용해 데이터를 저장하고 교환.
- 단점: 속도가 느릴 수 있음(디스크 입출력).
- 적용: 로그 파일, 설정 파일 등을 통한 통신.
파이프(Pipe)
- 단방향 데이터 통신 채널로, 한 프로세스가 쓰면 다른 프로세스가 읽음.
- 특징:
- 부모-자식 관계에서 주로 사용.
- 익명 파이프: 같은 프로세스 계열에서만 사용 가능.
- 이름 있는 파이프(Named Pipe): 서로 다른 프로세스 간 통신 가능.
소켓(Socket)
- 네트워크 통신을 통한 데이터 교환 메커니즘.
- 특징:
- 동일 컴퓨터 내 또는 네트워크를 통해 원격 프로세스 간 통신 가능.
- TCP, UDP 같은 프로토콜 사용.
- 예:
세마포어(Semaphore)
- 동기화 도구로, 여러 프로세스가 동시에 접근할 때 공유 자원을 보호.
- 특징:
- 값이 0 이하로 내려가면 대기 상태가 됨.
- 주로 뮤텍스(Mutex)와 함께 사용.
메모리 맵 파일(Memory-Mapped File)
- 파일의 내용을 메모리에 매핑하여 공유.
- 특징:
- 데이터를 디스크로 저장하지 않고 메모리를 통해 빠르게 접근.
- 운영체제가 지원해야 사용 가능.
IPC의 주요 문제 및 해결 방법
- 데이터 충돌:
- 여러 프로세스가 동일한 데이터에 동시에 접근하여 충돌 발생.
- 해결: 세마포어, 뮤텍스, 모니터 등을 사용.
- 데드락(교착 상태):
- 여러 프로세스가 서로 자원을 기다리며 정지.
- 해결: 자원 할당 시 정렬된 순서로 접근, 타임아웃 설정.
- 성능 이슈:
- 대량의 데이터를 전달할 때 느린 속도.
- 해결: 공유 메모리와 같은 고속 IPC 메커니즘 사용.
IPC 선택 기준
- 속도: 공유 메모리 > 메시지 전달 > 파일 시스템.
- 구현 용이성: 파이프, 메시지 전달이 상대적으로 간단.
- 통신 범위: 소켓은 네트워크 통신이 가능해 유연성 제공.
실제 사용 사례
- 운영체제의 프로세스 간 협력(예: POSIX 파이프, Linux 세마포어).
- 네트워크 기반 클라이언트-서버 통신(예: HTTP 서버, 웹소켓).
- 병렬 프로그래밍 환경에서 데이터 공유(예: MPI, OpenMP).
IPC는 운영체제와 네트워크 프로그램의 핵심 기능으로, 효율적이고 안전한 데이터 교환을 보장한다.