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)