0. 프로세스간 통신 이유
→ 프로세스간의 통신을 하지 않으면, 그 프로세스들은 독립적인 것들이다. 그러나 통신을 할 경우 그 프로세스들은 협력적이라고 할 수 있다.
1. 메모리 공유방식
- 같은 메모리를 프로세스들 간에 공유하는 방식
- 초기 설정만 해놓으면, 빠른 속도로 자원을 공유하는 것이 가능하다.
- 같은 자원의 접근 등의 충돌 고려해야 한다.
- 클라이언트 - 서버 관점으로 보았을 때
- 소비자인 클라이언트가 있지도 않은 자원을 끌어다 쓸 수 없도록 한다.
- 생산자인 서버는 해당 메모리에 생성된 자원을 넣어놓고, 해당 메모리 용량이 가득차면 더 만들지 않도록 한다. (유한 버퍼인 경우)
- 예시로는 POSIX API가 있다.
2. 메시지 전달 방식
- 별도의 프로세스(메일 박스, MACH의 경우 port, 이들은 process이기에 pid를 갖고 있다.)를 이용하여 메시지들을 전달하는 방식
- 자원간의 접근 충돌을 하지않아도 된다.
- 보통 자원에 대한 접근은 kernel을 사용하여 접근을 한다 → 즉 자원의 주소를 통하여 접근하는 방식(
MACH 메시지 전달 방식)
- 직접 접근하는 방식과 간접 접근 방식이 있다.
- Window의 ALCP 방식도 있다.
- 연결 포트를 이용해 연결한 후 동일한 포트를 공유하며 서로의 핸들을 갖는 방법
- 대용량일 경우 공유 색션 객체를 이용하여 교환
3. 동기화와 비동기화
- 하나의 통신이 수행될 동안 같은 류의 다른 통신은 일채 하지 않는 것을 동기화(봉쇄형)이라 하고, 그것과는 별개로 작업대로 통신을 하는 것을 비동기화(비봉쇄형)이라고 한다.
4. 파이프
- 일반적으로는 한 방향으로만 통신하는 반이중방식을 지원한다.(읽기 종단, 쓰기 종단이 존재)
- 그래서 양쪽 통신을 원할 경우 두 개의 파이프가 필요
- 동일한 기계상의 두 프로세스끼리만 통신이 가능하다.
- 데이터 송수신 후에 일반파이프들은 사라지게 된다.