Inter Process Communication
-
IPC
- 프로세스는 독립된 메모리 공간을 참조하기 때문에, 서로의 데이터에 독립적이다. 이런 독립된 프로세서가 서로 통신하는 방법(IPC)을 공부하였다.
-
Unnamed Pipe
- 파이프는 여러개의 프로세스의 입출력을 연결한다.
파이프는 단방향이기 때문에, 한 파이프는 한쪽 프로세스의 입장에서 읽기 혹은 쓰기 중 하나의 역할만으로 사용된다. 따라서 파이프를 이용해 양방향 통신을 위해선 두 파이프가 필요하고, 여러 프로세스와 통신할 경우 그에 따른 서로 다른 파이프를 필요로 한다.
- unnamed pipe(익명 파이프)는 부모-자식 관계처럼 프로세스간의 관계가 명확할 때 사용된다. 또, 사용하는 프로세스가 실행 중일 때만 존재한다.
-
Named Pipe
- 반면 Named pipe(명명 파이프)는 부모-자식 관계와 무관하게 사용이 가능하다. 익명 프로세스와 다르게 프로세스가 존재하지 않아도 소멸되지 않고 종속하기 때문에, 사용 후 제거해야한다.
보통 쉘에서 사용하는 unnamed pipe와 달리, Named pipe는 파일처럼 취급하고 파일 시스템을 사용한다.
> unnamed pipe는 단순히 pipe, named pipe는 FIFO 라고도 불린다.
-
Message Queue
- OS에서 제공하는 message queue를 사용하여 통신할 수 도 있다.
queue라는 이름 그래도 선입선출로 파이프와 같이 단방향으로 사용되나, 파이프는 데이터의 흐름(스트림)을 기반으로 작동하고, 메시지 큐는 메시지/패킷 단위로 작동한다. 데이터 흐름(pipe)과 공간(queue)의 차이라고 생각하면 될 것 같다.
-
Shared memorry
- 공유 메모리는 말그대로 여러 프로세스가 동시에 접근할 수 있는 메모리이다. 이 공통된 메모리 자체를 사용하는 것으로 통신할 수 있다.
프로세스의 4가지 영역 code, stack, heap, data 중 stack을 제외한 나머지를 공유 메모리로 사용하는 thread가 많이 사용된다.