///
Search
📶

IPC : inter process communication

태그
OS
CS

IPC란?

프로세스 간에 통신을 가능하게 하는 메커니즘을 통틀어 말한다.

왜 필요한가?

프로세스는 독립적인 자신만의 공간을 갖는다. 만약 독립적인 공간을 공유해야 할 일이 생긴다면 어떻게 해야할까? 바로 통신을 해야 한다. 그래서 IPC를 이용하여 프로세스간 자원을 공유할 수 있게 하는 것이다.

개념적 분류

크게 두 가지의 모델이 존재한다. 모델인 것이다. 즉, 기법의 세부적인 구현이 아니라, 단순히 개념을 도식화 시킨 것이다. 그래서 이렇게 생각하고 차후 기법에 대해서 생각을 좀 더 깊게 해보면 좋다. 아래는 gpt를 이용하여 조금 세분화해서 분류했다. 근데 생각해보니 모델만 알고 있어도 상관없는 것 같다.
GPT를 이용해서 개념적 세분화

공유 메모리

메모리를 공유한다. 즉, 다른 각각의 프로세스들이 공동의 메모리 영역을 참조하여 사용한다. 또한 확장해서 생각해보면, 데이터의 일관성이 무너지거나, 경쟁할 수 있다. 즉, 동기화 기술이 필요하다.

메시지 패싱

커널이 하나의 설비를 만들어서 이를 메시지라는 형태로 주고 받게 해주는 설비다. 당연히 운영체제의 개입으로 인하여 공유 메모리 모델 보다 상대적으로 느리다.

기법

direct(직접 통신)
간단하게 p1이 p2의 정보를 알고 전송하는 것이다. p2도 마찬가지고 p1의 정보를 알고 수신하는 것이다.
indirect(간접 통신)
간단하게 p1, p2 둘 다 mailBox만 바라보고 있다.
여기서 재미있는 사실 간접 통신이 뭔가 되게 비슷하게 생긴 모양을 어디서 봤을 수도 있다. Dependency Inversion Principle와 되게 비슷한 모양이라고 생각한다. p1, p2는 서로 뭘하는지 모른다. 그리고 mailBox만 바라보게 된다. 이점에서 직접 통신보다, 간접 통신이 현대에 많이 사용 되겠구나를 알 수 있었다. 또한 이렇게 간접적인 통신을 하는 것들이 생각보다 많다. 객체지향 디자인에서도 비슷한 사례들이 자주 나온다. 이래서 CS공부를 하구나.

실제 종류

공유 메모리

Shared Memory (공유 메모리)
공유 방법 - 메모리
통신 단위 - 구조체
통신 방향 - 양방향
통신 범위 - 동일 시스템
Memory Mapping (메모리 매핑)
공유 방법 - 메모리 + 파일
통신 단위 - 페이지
통신 방향 - 양방향
통신 범위 - 동일 시스템

메시지 패싱

Pipes (파이프), Named Pipe(명명된 파이프)
공유 방법 - 파일
통신 단위 - Stream
통신 방향 - 단방향
통신 범위 - 동일 시스템
특이점 - 부모-자식 관계가 있음, 초기에 pipe는 부모 자식 간의 통신, named pipe의 경우 부모-자식 관계가 아니어도 통신 가능
Message Queue(메시지 큐)
공유 방법 - 메모리
통신 단위 - 구조체
통신 방향 - 단방향
통신 범위 - 동일 시스템
특이점 - key의 형태로 찾을 수 있다. pipe와 유사하지만 다른 점은 파일이 아닌 메모리 공간을 사용한다는 점이다.
이 부분은 사실 맞다라고 이야기하기 힘들 것 같다. 어떤 사람은 단방향이라고 한다. 그래서 확신은 없지만 내 생각에는 양방향이다. 왜냐하면 pipe의 경우 한쪽으로 들어가는 건 똑같지만 원하는 데이터를 가져오리란 보장이 없다. 그래서 두 개의 입력/출력 파이프를 만들어야 했다. 하지만 메시지 큐의 경우 한 방향으로 보내도 원하는 데이터의 키만 알고 있다면 원하는 데이터를 가져올 수 있다.