
IPC
- 클라이언트-서버 시스템 상의 통신 방법: 시그널, 파이프, 소켓
Signal
- 두 개 이상의 프로세스에 비동기적 이벤트를 신호
- 가장 오래된 IPC 방법
- 신호 무시(SIGSTOP, SIGKILL), 신호 유예, 직접 처리, 커널 처리 등
- 비동기적 IPC: 곧바로 시그널 처리 X. 시그널을 받는 프로세스가 준비가 되어야 처리 가능 O
Pipes
- 두 프로세스 간의 통신관
- Named: 부모/자식 관계없이 이름만 가지고 파이프 통신 가능

- 통신 관련 이슈: 통신 방향(단/양방향), half/full duplex
- fork() → -1(에러), 양수(부모 프로세스), 0(자식 프로세스) PID 리턴
Ordinary pipes
- Ordinary: 파이프 생성 프로세스 외부에서는 접근 불가능. 부모 프로세스가 파이프 생성, 이를 생성한 자식 프로세스와 통신하기 위해 사용

- 생산자가 write-end에 아이템을 삽입, 소비자가 read-end에서 아이템을 꺼내는 구조 → 단방향 구조. 양방향을 위해서는 파이프 두 개가 필요함
Named pipes
- ordinary보다 활용하기 간편
- 여러 개의 프로세스가 파이프를 통해 통신 가능
Sockets
- 통신을 위한 endpoint, 포트를 위해 사용
- 포트: OS가 제공하는 네트워크를 위한 추상화
- 서로 다른 서버에서 동작하더라도 통신 가능한 통로를 제공
- 물리적 포트: HW용 포트, NIC을 통해 OS에서 사용
- 논리적 포트: 논리적으로 여러 개의 포트를 생성 가능 + 통신(E.g. 웹 포트 80)
- 프로세스 위치에 독립적: local, remote 모두 동작 - (1). local은 포트 번호만으로 (2). remote는 포트 및 IP 주소를 통해서 식별 가능
- 연결의 semantics: (1). reliable TCP (2). unreliable UDP

- 자주 사용되는 포트는 테이블 번호를 참조해 바로 사용 가능
Shared Memory
shmget(shared memory get), shmat(shared memory attache), shmdt(shared memory detach), shmctl(shared memory control)
Message Queue
msg.h, msgget(message get), msgsnd(message send), msgrcv(message receive), msgctl(message control)