# 08. IPC
0. IPC란?

- 프로세스는 독립적으로 실행된다. (독립적이라는 것은 다른 프로세스에게 영향을 받지 않는다는 말. )
- 이런 독립적인 구조를 가진 프로세스들이 서로 통신을 해야하는 상황이 있을 것이고,
그것을 가능하도록 해주는 것이 IPC 통신이다.
- 프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스 간 통신을 할 수 있다.
1. IPC 종류
IPC 설비 종류도 여러가지가 있다. 필요에 따라 설비를 선택해서 사용하면 된다.
1. 익명 PIPE
2. Named PIPE(FIFO)
3. Message Queue
4. 공유 메모리
5. 메모리 맵
6. 소켓
* (익명) PIPE
익명의 PIPE를 통해서 동일한 PPID를 가진 프로세스들 간에 단방향 통신을 지원.
FIFO 구조
부모 자식 프로세스 간에 주로 쓰임.
생성된 파이프에 대해서는 WRITE 또는 READ 만 가능.
따라서 양방향 통신을 위해서는 READ용 하나, WRITE용 하나 총 두개 만들어야 한다.
* Named PIPE
이름을 가진 PIPE를 통해 프로세스들 간에 단방향 통신
서로 다른 프로세스들이 PIPE의 이름만 알면 통신이 가능하다.
FIFO 구조
연관이 전혀 없는 프로세스간에 통신을 할 때 주로 쓰임.
생성된 파이프에 대해서는 WRITE 또는 READ 만 가능.
* Message Queue
메모리를 사용한 PIPE
구조체 기반으로 통신을 한다.
FIFO 구조
프로세스간 다양한 통신을 할 때 쓰임.
*Shared Memory
임계 시스템상의 공유 메모리를 통해 통신한다.
일정한 크기의 메모리를 프로세스간에 공유하는 구조.
프로세스간 READ, WRITE를 모두 필요로 할 때 쓰임.
프로세스간에 메모리 크기가 동일해야 한다.
* Memory Map
파일을 프로세스의 메모리에 일정 부분 맵핑 시켜 사용한다.
파일로 대용량 데이터를 공유할 때 사용한다.
* Socket
네트워크 소켓통신을 사용한 데이터 공유
원격에서 프로세스 간 데이터를 공유할 때 사용.
| IPC 종류 | PIPE | Named PIPE | Mesage Queue | Shared Memory | Memory Map | Socket |
| 사용 시기 |
부모 자식 간 단 방향 통신 시 |
다른 프로세스와 단 방향 통신 시 |
다른 프로세스와 단 방향 통신 시 |
다른 프로세스와 양 방향 통신 시 |
다른 프로세스와 양 방향 통신 시 |
다른 시스템간 양 방향 통신 시 |
| 공유 매개체 |
파일 | 파일 | 메모리 | 메모리 | 파일+메모리 | 소켓 |
| 통신 단위 |
Stream | Stream | 구조체 | 구조체 | 페이지 | Stream |
| 통신 방향 |
단 방향 | 당 방향 | 단 방향 | 양 방향 | 양 방향 | 양 방향 |
| 통신 가능 범위 |
동일 시스템 | 동일 시스템 | 동일 시스템 | 동일 시스템 | 동일 시스템 | 동일 + 외부 시스템 |
출처
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/IPC(Inter%20Process%20Communication).md