2019년 2월 13일
IPC (Inter Process Communication)
I. 다중 프로세스 상호 간 통신, IPC
가. IPC (Inter Process Communication)의 개념
- 공유 메모리가 없는 독립된 프로세스 간 동기화 및 데이터 교환을 위한 상호통신 기법
나. IPC의 필요성
동기화 문제 해결 | – 다중 프로세스 환경에서 여러 사용자가 동시 쓰기 시 데이터 무결성 보장 가능 |
프로세스간 데이터 교환 | – 작은 데이터의 경우 메시지 큐 방식 – 큰 데이터의 경우 공유메모리 방식 권고 |
II. IPC 통신 기법
구분 | 통신 기법 | 설명 |
---|---|---|
직접 통신 | – Send(P, Message) – Receive(Q, Message) | – 두 프로세스가 상대 호출 – 대칭통신, 모듈성 낮음 – 프로세스 P에 메시지 송신 – 프로세스 P로부터 수신 |
간접 통신 | – Send(A, Message) – Receive(A, Message) | – 우편함과 송수신 방식 – 송/수신 분리, 유연성제공 – 우편함 A로 메시지 송신 – 우편함 A로부터 수신 |
버퍼링 | – Zero Capacity – Bounded Capacity – Unbounded Capacity | – 링크의 메시지 보유 용량 – 버퍼링 없음, 동기 통신 – 유한길이 큐, 자동 버퍼링 – 무한길이 큐, 자동 버퍼링 |
동기화 | – Blocking Send – Non-Blocking Send – Blocking Receive – Non-Block Receive | – Data 수신대기 동기/비동기 – 메시지 받을 때까지 대기 – 메시지 보내고 다른 연산 – 메시지 있을 때까지 대기 – 메시지유무 관계없이 수신 |
III. IPC 구현 방식
구현방식 | 핵심 기술 | 설명 |
---|---|---|
파이프 방식 | – Pipe 기반 단방향 | – 통신 버퍼기반 단방향 통신 – 익명파이프, 네임드파이프(반이중) |
세마포어 | – P(), V() 연산 | – 프로세스 간 동기화, 보호 – 상호배제, 자원공유 |
공유 메모리 | – 커널생성 메모리 | – 프로세스가 커널에 메모리 요청 – 공간 할당, 메모리 영역 접근 |
메시지 큐 | – System Call | – 커널 내부 메시지 기록 공간생성 – 송수신 시 OS에 요청, 전달느림 |
소켓 | – 소켓기반 송수신 | – 생성 도메인, Type, Protocol 지정 – Bind, Listen, Accept 소켓 연결 |
IV. 메시지 큐 방식과 공유 메모리 방식
가. 메시지 큐 방식 구성 및 수행 절차
구성도 | 수행 절차 |
---|---|
① 송신필요 P#1 커널 통해 메시지전달 ② 전송 메시지는 마지막에 연결 ③ 수신측 P#2, 메시지 큐 선택적 수신 – msgget():큐 생성, msgsnd(), msgctl() – 프로세스 간 이산적 양 송수신 – 전송 데이터를 메시지형태 생성/수신 |
나. 공유 메모리방식 구성 및 수행 절차
구성도 | 수행 절차 |
---|---|
– P 요청으로 커널에 의해 생성/관리 ① 통신필요 P#1 공유 메모리 생성 – 자신의 메모리 영역으로 첨부, 쓰기 ② P#2가 공유 메모리 찾음, 첨부, 읽기 – 생성된 공유메모리는 직접 제거 필요 |
- 공유 메모리 생성 후 사용하는 모든 프로세스가 종료되어도 메모리는 종료 안되므로 수동 제거 필요
V. IPC 기법 중 Pipe 방식
① 파이프 1 생성 후 파이프 2 생성 ② Fork 수행 ③ 부모 프로세스는 Pipe#1 읽기 닫음 ④ 부모 프로세스는 Pipe#2 쓰기 닫음 ⑤ 자식 프로세스는 Pipe#1 쓰기 닫음 ⑥ 자식 프로세스는 Pipe#2 읽기 닫음 ⑦ 전송 완료 후 모든 파이프 닫음 |
- 모든 파이프는 단일 방향을 가지며, 한 방향 데이터 흐름
- 양방향 데이터 흐름 필요 시, 두 개의 파이프 생성 후 방향 전송위해 각각 하나씩 사용