
Process
- 실행 중인 프로그램
- 각각의 프로세스는 독립된 공간(user-space)을 할당받음
- 프로세스끼리는 통신이 어려움
IPC
- 프로세스 간 통신을 하기 위한 방법
- 크게 메시지 전달 방식과 공유 메모리 방식으로 나뉨
IPC가 필요한 이유
- 정보 공유 : 여러 사용자가 동일한 정보에 엑세스할 필요가 있음
- 가속화 : 특정 작업(task)을 여러 서브 작업(sub-task)로 쪼개어 병렬 처리하여 처리 속도 높임. 메인 작업과 서브 작업 간에는 통신이 필요
- 모듈화 : 특정한 시스템 기능을 별도의 프로세스로 구분하여 모듈화된 시스템 구성
- 편의성 : 다수의 사용자가 동시에 여러 작업을 수행
IPC 방식 - 공유 메모리 (Shared Memory)

- 두 개 이상의 프로세스들이 주소 공간의 일부를 공유하며, 공유한 메모리 영역에 읽기/쓰기를 통해 통신을 수행
- 프로세스가 공유 메모리 할당을 커널에 요청하면, 커널은 해당 프로세스에 메모리 공간을 할당해줌. 그 후에는 모든 프로세스가 커널의 관여 없이 해당 메모리 영역에 접근 가능
공유 메모리 장점
- 공유 메모리 할당 이후 커널이 관여하지 않기 때문에 속도가 빠름
- 프로그램 레벨에서의 통신 기능 제공하고 자유로운 통신이 가능
공유 메모리 단점
- 프로세스간 데이터 전달 시점을 모르기 때문에 동기화 과정이 필요
- 동시에 같은 메모리 위치를 접근할 수 있으므로 Lock이 필요
IPC 방식 - 메시지 전달 (Message Passing)

- 커널을 통해 메시지를 전달하는 방식
- 프로세스간 메모리 공유 없이 동작
메시지 전달 방식 종류
Pipe
- 하나의 프로세스가 파이프를 통해 다른 프로세스로 데이터를 전달 (1대1 통신)
- 파이프를 사용 시 데이터는 한 방향으로만 이동
- 단순한 데이터 흐름에 적합
- Pipe와 Named Pipe가 있음
- Pipe(익명 파이프) : 부모-자식간에 단방향 통신을 위해 사용됨
- Named Pipe : 부모-자식 관계가 아닌 서로 독립적인 프로세스 간 통신을 위해 사용됨. 파이프에 이름이 있어 어떤 파이프를 사용할지 지정 가능
Message Queue (정리글)
- FIFO 구조의 Queue를 이용해 데이터 전송 및 수신하는 방식
- 비동기 방식으로 많은 데이터 처리에 유리함
- 1대1 통신 뿐 아니라 1대 다, 다대 다 통신도 가능
- 구현이 복잡하고 큐에 데이터를 넣고 빼는 과정에서 오버헤드 발생
Socket
- 네트워크 상에서 프로세스 간 통신하는 방법
- 외부 시스템에 존재하는 프로세스와도 통신이 가능한 방법
- 각 프로세스 간 1대 1 통신, 전이중 양방향 통신 가능
- 클라이언트-서버 모델에서 주로 사용됨
References
https://code-lab1.tistory.com/42
****https://yaelimeee.tistory.com/56
https://baebalja.tistory.com/359
https://y-oni.tistory.com/77
https://steady-coding.tistory.com/508
https://velog.io/@yanghl98/OS운영체제-IPC란