Computer Science/Operating System

IPC, Inter-Process Communication

rueMi 2024. 4. 15. 23:06

IPC, Inter-Process Communication

앞선 포스팅에서도 많이 살펴봤듯이, 프로세스는 독립적으로 실행된다. 프로세스와 흔히 비교되는 게 스레드인데, 스레드는 대부분의 메모리 공간을 공유하며 한 프로세스 내의 스레드끼리는 공유 자원을 가진다. 하지만 프로세스는 개별적으로 메모리 공간을 가지며 독립적으로 실행된다.

 

이러한 프로세스끼리도 통신할 수 있도록 한 기법이 바로 IPC이다.

❓ IPC, Inter-Process Communication

IPC는 말 그대로 프로세스 사이의 통신 기법을 의미한다. 프로세스는 유저 공간에서 독립적으로 돌아가고 있기 때문에 서로에게 영향을 끼치지 않지만, 통신이 어렵다는 단점이 있다. 이러한 문제를 해결하기 위해 커널 영역에서 IPC라는 프로세스 간 통신을 제공한다.

❓ 커널, Kernel

운영체제 자체도 소프트웨어이기 때문에, 메모리에 올라가야 사용할 수 있다. 하지만 메모리 공간의 제약으로 운영체제 중 항상 필요한 부분만을 메모리에 올려놓고, 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다. 이때 메모리에 상주하는 운영체제의 부분을 커널이라 한다.

즉, 커널은 메모리에 상주하는 부분으로써, 운영체제의 핵심적인 부분을 말한다.

 


IPC 설비 종류

프로세스 간 통신에도 상황에 맞는 IPC 설비를 선택할 수 있도록 다양한 설비들이 존재한다. 잘못된 IPC 설비의 선택은 코딩 과정을 어렵게 만들거나 프로그램의 작동을 효율적이지 못하게 만들 수 있기 때문에 올바른 설비를 사용하는 것이 매우 중요하다.

 

PIPE, 익명 PIPE, Anonymous PIPE

파이프는 두 프로세스를 연결하고 하나의 프로세스는 데이터를 쓰기만, 다른 하나는 데이터를 읽기만 할 수 있는 반이중(Half-Duplex) 통신 설비이다.

위 그림과 같이 한쪽 반향으로만 가능하므로, 만약 읽기와 쓰기, 즉 송수신을 모두 하길 원한다면 파이프 두 개를 만들어야 한다.

장점

  • 매우 간단하게 사용할 수 있다.
  • 단방향 통신이 필요한 경우 사용하면 좋다.

단점

  • 양방향 통신이 필요하다면 파이프 두 개를 만들어야 하기 때문에 구현이 복잡하다. 다른 설비를 선택하는 것이 더 좋다.
  • 통신할 프로세스를 명확하게 알 수 있는 경우에만 사용해야 한다. 예를 들어 부모와 자식 프로세스간 통신, 같은 PPID를 가지는 프로세스 간 통신만 가능하다.

Named PIPE, FIFO

이름이 있는 파일을 사용하기 때문에, 부모 프로세스와 무관하게 서로 전혀 모르는 프로세스 간 통신에 사용할 수 있다. 익명 PIPE의 확장이라 볼 수 있다.

 

Named PIPE의 생성은 mkfifo를 통해 이루어지는데, mkfifo가 성공하면 명명된 파일이 생성된다.

장점

  • 익명 파이프와는 다르게, 서로 전혀 모르는 프로세스 간 통신에 사용할 수 있다.

단점

  • 익명 파이프와 같이 읽기 쓰기가 동시에 불가능하다. 전이중 통신을 위해서는 결국 두 개의 FIFO 파일이 필요하다.

Message Queue, 메시지 큐

Queue는 선입선출 특성을 가지는 통신 설비로, 커널에서 관리한다. Message Queue를 메모리 공간으로 사용하여, Queue에 쓸 데이터에 번호를 붙임으로써 다수의 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.

 

장점

  • 비동기 방식이기에 방대한 처리량이 있다면 큐에 넣은 후 나중에 처리할 수 있다.
  • 다수의 프로세스들이 큐에 메시지를 보낼 수 있고, 다수의 프로세스들이 큐로부터 메시지를 꺼낼 수 있다.
  • 분산 처리 및 경쟁 처리 방식에 사용할 수 있다.

단점

  • 메시지가 정말 잘 전달되었는지 알 수 없다.
  • 큐에 데이터를 넣고 나오는 과정에서 오버헤드가 발생할 수 있다.
  • 데이터가 많이 쌓일수록 추가적인 메모리 자원이 필요하다.

Shared Memory, 공유 메모리

프로세스 간 메모리 영역을 공유해서 사용할 수 있도록 허용하는 설비이다.

 

프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당해준다. 이후 어떤 프로세스건 해당 메모리 영역에 접근할 수 있다.

장점

  • 중개자 없이 곧바로 메모리에 접근할 수 있기 때문에, 다른 모든 IPC들 중에서 가장 빠르게 작동한다.

단점

  • 커널 설정에 종속적이기 때문에, 사용하기 전에 커널에서 허용하고 있는 공유 메모리 사이즈를 확인해야 한다.

Memory Map

Shared Memory와 비슷하게 공유 메모리를 사용하며, 열린 파일메모리에 Mapping 시켜서 공유하는 설비이다.

 

파일은 시스템의 전역적인, 즉 모두 공유할 수 있는 자원이므로 서로 다른 프로세스들끼리 데이터를 공유하는 데에 문제가 없다.

장점

  • 데이터가 메모리에 이미 올라와 있는 것처럼 간단하게 접근할 수 있다.
  • 일반적인 파일 I/O에 비해 나은 성능을 보여준다.
  • 비동기 I/O를 사용하지만 시스템에서 처리해주기 때문에 걱정할 필요가 없다.

단점

  • 일반 파일 I/O에 비해 상당히 많은 메모리가 요구된다.
  • 많은 데이터를 얼마나 오랫동안 메모리에 둘 것인지 컨트롤 할 수 없다.

Socket

같은 도메인 내에서 연결될 수 있고, 네트워크를 통해 프로세스들 사이의 통신을 가능하게 하는 설비이다.

소켓 연결 과정

  • 소켓을 생성하고 이름을 지정한다. domain, type, protocol을 지정한다.
  • 서버 : bind, listen, accept를 통해 소켓 연결을 위한 준비를 한다.
  • 클라이언트 : connect를 통해 서버에 연결을 요청하고, 연결 수립 후에는 socket에 send를 함으로써 데이터를 주고 받는다.
  • 연결이 끝나면 반드시 close()로 clear한다.

장점

  • 서버/클라이언트 환경을 구축하는 데에 용이하다.
  • Internet Socket인 경우 데이터 유실이 발생할 수 있지만, Unix Domain 소켓은 PIPE와 같은 형태로 이루어지고 같은 시스템에서 교환이 일어나므로 패킷이 유실되거나 순서가 바뀌는 등의 문제는 발생하지 않는다.
  • 범용적인 IPC로 양방향 통신이 가능하다.
  • 패킷 단위로 주고 받음으로, 직관적으로 이해하기 쉬운 코드를 만들 수 있다.

단점

  • Internet UDP와는 달리 경로를 지정할 수 없기 때문에, 다중 클라이언트를 받아들이는 서버의 경우 문제가 될 수 있다.

요약

 


 

참고자료

 

IPC의 종류와 특징

IPC(Inter Process Communication) - 프로세스 간 통신에 대하여 종류와 특징들에 대하여 살펴보겠습니다. [리눅스 커널 구조] - 위 그림처럼 Process는 완전히 독립된 실행객체입니다. 서로 독립되어 있다는

jwprogramming.tistory.com

 

 

[운영체제] IPC Inter-Process Communication

IPC란? 프로세스는 독립적으로 실행된다. 이처럼 독립적인 공간을 가진 프로세스 간 통신에 사용되는 기법이 IPC 통신이다. 프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스 간의 통신을

yaelimeee.tistory.com

 

 

[OS/운영체제] IPC란? - 정의, 종류, 방법

IPC(Inter Process Communication)란? 정의 IPC의 종류 >IPC = 프로세스 간 통신 >프로세스들끼리 서로 데이터를 주고받는 행위 또는 그에 대한 방법을 뜻한다. 위 그림처럼 Process는 완전히 독립된 실행객체

velog.io