본문 바로가기

C#

IPC(Inter-Process Commnication)

728x90

IPC

Process는 완전히 독립된 실행객체이다. 서로 독립되어 있다는 것은 다른 프로세스의 영향을 받지 않는다는 장점이 있다. 그러나 독립되어 있으니만큼 별도의 설비가 없이는 서로간에 통신이 어렵다는 문제가 있다.

이를 위해서 커널영역에서 IPC라는 내부 프로세스간 통신(Inter Process Communication)을 제공한다. 프로세스는 커널이 제공하는 IPC 설비를 이용해서 프로세스간 통신을 할 수 있다.


바로 프로세스들 간의 의사소통을 하는 것이라는 뜻인데, 프로세스가 통신 가능하다는 것은 서로 다른 프로세스가 데이터를 주고 받을 수 있다는 것이며, 동시에 접근 가능한 메모리 즉, 프로세스들이 공유하는 메모리가 필요하다는 뜻입니다.

IPC는 그러므로 컴퓨터 내부에서 보다 더 효율적으로 정보를 주고 받기 위해서 통신한 통신의 일종이라고 생각하면 되고, 인터넷 통신을 IPC의 확장을 이해해도 됩니다.(프로세스<-> 프로세스 가 서버 <-> 클라이언트와 유사하기 때문입니다.)

프로세스 간의 통신은 왜 어렵나요?
프로세스끼리의 통신이 어려운 이유를 이해하기 위해서는 프로세스와 스레드의 차이에 대해서 먼저 이해해야 합니다. 우리는 fork와 같은 함수로 프로세스를 pthread_create와 같은 함수로 스레드를 각각 생성해주는데, 둘을 만드는 과정에서 큰 차이가 존재합니다.
프로세스는 생성되면서 * PC를 포함하여 메모리 공간 등을 복사하여 자원을 할당하지만, 스레드는 메모리 공간과 자원들을 공유하기 때문에 그렇습니다. 즉, 우리가 프로세스와 스레드를 생성하기 전에 a라는 변수를 선언해 놓았다고 한다면 프로세스는 a를 각각 1개씩 갖게 되지만 스레드는 a를 공유합니다. 그래서 프로세스는 통신을 할 공간이 없기 때문에 별도의 공간을 만들어주어야 하기 때문에 프로세스간의 통신은 스레드 간의 통신보다 어렵습니다.

* PC(Program Counter) : 여기서의 PC는 Personal Computer가 아니라 프로그램 카운터로 다음에 수행해야하는 명령어의 주소를 가리키는 레지스터입니다. 어느 line을 실행할 지에 대한 주소를 저장하고 있는 포인터로 쉽게 이해하면 됩니다.

 

[IPC 종류]

https://leejooyeon.tistory.com/195

 

[출처]
https://mangkyu.tistory.com/9

https://0yumin.tistory.com/28

728x90