2 분 소요

프로세스 간 통신 (Inter Process Communication) : 프로세스 간에 데이터를 주고받는 행위

프로세스 간 통신은 프로세스 간에 데이터를 주고받는 행위를 의미한다. 독립 프로세스(Independent Process)는 단일 처리 시스템에서 다른 프로세스에 대해 독립적으로 동작하는 동기적 프로세스이다. 이러한 프로세스는 자신만의 자원과 데이터를 사용하며, 다른 프로세스와의 직접적인 통신이나 데이터 공유가 필요하지 않다. 반면, 협력 프로세스(Cooperating Process)는 실행 중인 다른 프로세스와의 상호 작용을 통해 수행되는 비동기적 프로세스이다. 협력 프로세스는 자원과 데이터를 공유하며, 상호 통신을 통해 작업을 협력적으로 수행한다. 이로 인해 프로세스 간 동기화와 데이터 일관성 문제가 발생할 수 있어 이를 해결하기 위한 다양한 통신 방법이 필요하다.

공유 메모리 (Shared Memory)

공유 메모리는 협력 프로세스 간에 하나의 공유 메모리 영역을 만들어 상호 통신하는 방식이다. 공유 메모리 영역은 공유 메모리 세그먼트를 생성하는 프로세스의 주소 공간에 위치한다. 이 방식은 커널 의존성이 낮아 속도가 빠르고, 유저 레벨의 IPC가 가능해 자유로운 통신이 가능하다. 또한, 대량의 정보를 다수의 프로세스에게 배포할 수 있다. 그러나 자원과 데이터를 공유하므로 동기화 문제가 발생할 수 있다.

메시지 패싱 (Message Passing)

메시지 패싱은 협력 프로세스 간 각자의 메시지를 운영 체제에 전달해 통신하는 방식이다. 이는 커널만을 이용하기에 비교적 구현이 쉽다. 그러나 커널을 이용할 때마다 시스템 호출에 따른 문맥 전환이 매번 발생, 문맥 복사 2번 수행과 문맥 전환 오버헤드가 발생한다.

파이프 (PIPE)

파이프는 통신을 위한 버퍼를 생성해 프로세스가 데이터를 상호 통신하는 방식이다.

익명 파이프 (Anonymous PIPE)

익명 파이프는 통신할 프로세스를 명확히 아는 경우에 사용된다. 주로 부모-자식 혹은 형제 간 통신에 사용되며, 외부 프로세스에서는 사용할 수 없다. 하나의 프로세스는 데이터를 쓰기만 하고, 다른 하나는 데이터를 읽기만 수행하여 반 이중(Half-Duplex) 통신을 한다. 송수신을 모두 원한다면 파이프를 2개 구현해야 한다.

네임드 파이프 (Named PIPE)

네임드 파이프는 전혀 모르는 상태의 프로세스 간 통신에 사용된다. 익명 파이프의 확장된 형태로, FIFO를 통해 이름이 있는 파일을 사용하여 프로세스 간 통신을 한다. 이 경우에도 송수신을 모두 원한다면 파이프를 2개 구현해야 한다.

소켓 (Socket)

소켓은 동일한 운영체제에서 실행되는 프로세스 간 데이터를 교환하는 Endpoint이다. 클라이언트와 서버가 네트워크 소켓 통신을 통해 데이터를 공유하며, 원격에서 프로세스 간 데이터를 공유할 때 사용된다. 양쪽 PC에서 각각 임의의 포트를 정하고, 해당 포트 간의 대화를 통해 데이터를 주고받는다. 각각의 PC의 포트를 담당하는 소켓은 데이터를 송수신하는 역할을 맡은 하나의 프로세스이다. 소켓은 전이중(Full Duplex) 통신이 가능하여 서버-클라이언트 환경을 구축하는 데에 용이하며, 중대형 어플리케이션에서 주로 사용된다.

메시지 큐 (Message Queue)

메시지 큐는 메모리 공간을 활용한 PIPE로, 입출력 방식은 Named PIPE와 유사하다. 그러나 PIPE나 FIFO와 달리 다수의 프로세스 간 메시지를 전달할 수 있다. 사용할 데이터에 번호를 붙여 여러 프로세스가 동시에 데이터를 다룰 수 있으며, 이를 위해 메시지 접근을 위한 키(Key)가 필요하다.

메모리 맵 (Memory Map)

메모리 맵은 열린 파일을 메모리에 맵핑시켜서 공유하는 방식이다. 공유 메모리처럼 메모리를 공유하며, 공유 매개체가 파일과 메모리이다. 주로 파일로 대용량 데이터를 공유해야 할 때 사용되며, 파일 입출력이 느릴 때 사용하면 편리하다. 대부분의 운영체제에서 프로세스를 실행할 때 실행 파일의 각 세그먼트를 메모리에 사상하기 위해 메모리 맵 파일을 사용한다. 메모리 맵 파일은 파일 크기를 변경할 수 없으며, 메모리 맵 파일을 사용하기 이전 혹은 이후에만 파일 크기를 변경할 수 있다.

태그:

업데이트: