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의 데이터 전송 방식으로 프로세스 간에 통신이 가능하다.