프로세스간 통신(Inter Process Communication)는 무엇일까?
늘 그랬듯 위키 먼저 보자
프로세스 간 통신이란 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로를 뜻한다. IPC는 마이크로커널과 나노커널의 디자인 프로세스에 매우 중요하다: 마이크로커널은 커널이 제공하는 기능의 수를 줄여준다.
프로세스가 통신 가능하다는 것은 서로 다른 프로세스가 데이터를 주고 받을 수 있다는 뜻인데, 이때 필요한 것이 동시에 접근가능한 메모리 즉, 프로세스들이 공유하는 메모리가 필요하다.
그런데 프로세스는 생성되면서 PC(program counter) 를 포함하여 메모리 공간 등을 복사하여 자원을 할당한다.
그러므로 프로세스간 통신을 위해서는 별도의 메모리 공간을 할당해주어야 한다. 이를위한 기술들 몇가지를 소개하겠다.
파이프의 위키백과를 보자
파이프는 유닉스 계열 운영 체제에서 제공되는 병행성 메커니즘의 하나로서, 두 프로세스가 생산자-소비자 모델에 따라 통신할 수 있게 해주는 원형 버퍼이다. 즉, 파이프는 한 프로세스가 쓰고 다른 프로세스가 읽는 선입선출 형태의 큐라 할 수 있다.
통신을 위한 메모리공간(버퍼)을 생성하여(PIPE) Process A가 생산자 모델을 갖고 Process B가 소비자 모델을 가졌다. 통신이 A에서 B로 간다.
그림으로 보듯 파이프는 단반향의 통신이다. 그렇기 떄문에 2개의 프로세스가 양방향으로 통신이 필요할 떄는 파이프를 2개 쓴다.
하지만 이러한 파이프 구조 떄문에 프로세스가 많아지면 메모리 공간의 낭비가 심해진다.
Unix 도메인 소켓 또는 IPC 소켓은 동일한 호스트 운영 체제에서 실행되는 프로세스간에 데이터를 교환하기위한 데이터 통신 엔드 포인트입니다.
서버/클라이언트 환경을 구축하는데 용이하다.
중대형 애플리케이션에서 주로 사용한다.
공유 메모리는 컴퓨터 환경에서 여러 프로그램이 동시에 접근할 수 있는 메모리이다. 과다한 복사를 피하거나 해당 프로그램 간 통신을 위해 고안되었다. 환경에 따라 프로그램은 하나의 프로세서에서나 여러 개의 프로세서에서 실행할 수 있다.
프로세스A가 메세지를 공유메모리에 전송하면 프로세스 B가 공유메모리의 메세지를 읽는 방식으로 동작한다.
공유 메모리는 이런식으로 동작한다고 한다.
마이크로 커널과 나노커널 그리고 디자인 프로세스는 (2)에서 다루겠다.