IPC

생성일
2023/06/16 00:23
태그

IPC(Inter-Process Communication)

프로세스는 각각 완전히 독립된 실행 인스턴스로 다른 프로세스의 영향을 받지 않는다는 장점이 있지만, 프로세스 간 통신을 하려면 별도의 커널 영역에서 제공하는 여러 통신 방법이 필요하다.
커널(Kernel) 운영체제도 소프트웨어이기 때문에 메모리에 올라가야 사용할 수 있는데, 메모리의 공간 제약으로 인해 운영체제 프로그램 중 필요한 부분만 메모리에 올려놓고 그 외의 부분은 필요 시 메모리에 로드해서 사용한다. 커널은 운영체제의 실행 중 메모리에 상주하는 부분을 말한다.
IPC(Inter-Process Communication)는 동일한 시스템 내에서 혹은 네트워크를 통한 서로 다른 프로세스 간에 데이터를 주고받고 상호작용하기 위한 메커니즘이다.

IPC의 종류

Pipe
파일을 생성하여 통신하는 방법으로, 두 개의 프로세스를 연결하여 한 쪽에서는 쓰기만, 반대쪽에서는 읽기만 하여 단방향으로 데이터를 전송하는 통신 방법이다.
단방향 통신이기 때문에 서로 데이터를 전송하고 싶으면 두 개의 파이프를 만들어야 한다.
1.
Anonymous Pipe
파일을 통해 통신하지만 파일의 이름이 없는 파이프로, 오직 생성한 프로세스와 그 자식 프로세스 간에 통신할 때만 사용된다.
생성한 프로세스와 자식 프로세스만 사용하기 때문에, 생성 프로세스가 종료되면 파이프도 함께 소멸한다.
2.
Named Pipe
파일 시스템에 이름을 가지고 있어서, 해당 이름을 통해서 서로 독립된 두 프로세스 간 통신을 할 수 있다.
여러 개의 프로세스가 동일한 name pipe에 접근하여 통신할 수도 있다.
파일 시스템에 이름이 등록되어 있기 때문에, 파이프를 생성한 프로세스가 종료되어도 소멸하지 않으며 다른 프로세스가 접근이 가능하다. 따라서 사용하지 않으면 별도로 삭제를 진행하여야 한다.
Message Queue(Message Passing)
커널이 제공하는 message queue를 사용하여 통신하는 방법으로, 선입선출(FIFO) 방식이며 IPC 장치가 제공하는 send()와 receive() 두 가지 연산으로 통신한다.
단방향과 양방향 통신 모두 가능하며, 발신자가 메세지를 보내면 수신자가 받을 때까지 block 되는 blocking 방식과 buffer를 통해 메세지를 보낸 후 다른 작업을 수행하는 non-blocking 방식이 있다.
Shared Memory(공유 메모리)
서로 다른 프로세스 간에도 일부 주소를 공유하게 만들어, 공유된 메모리를 통해서 데이터를 주고 받는 방식이다.
중개자 없이 메모리에 직접 접근하기 때문에 IPC 중 가장 빠르지만, 서로 다른 프로세스들이 공유 자원에 접근할 때 동기화 문제가 발생할 수 있다.
Socket
클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 네트워크 기반의 IPC이며 TCP/IP나 UDP를 통해 데이터를 주고 받을 수 있다. 주로 원격에서 프로세스 간 데이터를 송수신할 때 사용한다.
IP 주소와 port 번호를 통해 연결되고, 파일에 소켓에 대한 정보들을 저장하여 하나의 프로세스에서 여러 프로세스를 연결할 수 있다.
Signal
시그널은 커널이나 프로세스에서 다른 프로세스에 이벤트가 발생했는지를 알려주고 프로세스 제어에도 사용된다.
IPC를 위해 존재하는 기능은 아니지만, 시그널을 통해서 0과 1의 데이터 전송 방식으로 프로세스 간에 통신이 가능하다.