프로세스는 완전히 독립된 실행객체임, 그래서 서로간의 통신이 어려움
이를 위해서 커널 영역에서 IPC라는 내부 프로세스간 통신을 제공하고 이를 통해서 프로세스간 통신을 할 수 있음
두 개의 프로세스를 연결하고 하나의 프로세스는 데이터를 쓰기만, 다른 하나는 데이터를 읽기만 함, 한 쪽 방향 통신만 가능함
하나의 통신선로는 읽기나 쓰기 하나만 가능, 쌍방 통신을 위해서는 두 개의 파이프를 만들어야함
FIFO 구조, 부모 자식 프로세스간 통신할 때 많이씀(동일한 PPID를 가진 프로세스들 간에 단방향 통신)
전혀 모르는 프로세스들 사이의 통신의 경우 사용함 즉, 부모 프로세스와 무관하게 전혀 다른 모든 프로세스들 사이에서 통신이 가능함
프로세스 통신을 위해 이름이 있는 파일을 사용하기 때문
FIFO 구조, 생성된 PIPE에 대해서 읽기나 쓰기 하나만 가능(기본적으로 PIPE와 역할은 비슷하고 확장한 버전으로 봐도 됨)
위의 파이프와 다르게 메모리 공간을 활용함, 메시지 큐에 쓸 데이터에 번호를 붙여 여러 개의 프로세스가 동시에 데이터를 쉽게 다룰 수 있음
FIFO 구조이고 프로세스간 다양한 통신이 가능함
데이터를 아예 공유, 함께 사용하는 것, 공유메모리가 데이터 자체를 공유하도록 지원함
프로세스간 메모리 영역은 다른 프로세스가 접근을 하지 못하도록 되어 있는게 기본인데 이 공유 메모리 방식은 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용함
프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당함, 그러면 이후 어떤 프로세스건 해당 메모리영역에 접근할 수 있음(IPC 중 가장 빠르게 동작 가능)
여기서 프로세스간 사용할려면 메모리 크기가 동일해야함
Shared Memory와 유사하게 메모리를 공유한다는 측면에 있어서 서로 비슷함
차이점은 열린 파일을 메모리에 맵핑시켜서, 공유한다는 점임(파일은 시스템의 전역적인 자원이므로 서로 다른 프로세스들끼리 데이터를 공유하는데 문제가 없음)
대용량 데이터 공유시 용이하고 FILE IO가 느릴때 사용하면 좋음
네트워크 소켓통신을 사용한 데이터 공유
네트워크 소켓을 이용하여 client-server 구조로 데이터 통신, 원격에서 프로세스간 데이터를 공유할 때 사용함
네트워크 소켓 통신?
말 그대로 네트워크의 소켓 통신을 활용하여서 프로세스간 통신의 응용하는 것
같은 도메인 내에서 연결될 수 있고 서버단에서 bind, listen, accept를 진행해 소켓 연결을 위한 준비를 함, 그러면 클라이언트 단에서는 connect를 통해 서버에 요청하고 연결이 수립된 후에서는 socket을 send함으로써 데이터를 주고 받음
연결이 끝나면 close()로 clear함
자세한 소켓 통신은 네트워크에서 알아볼 것임
프로세스 간 데이터를 동기화하고 보호하는데 그 목적을 두는 통신
메시지 전송, Shared Memory를 통해 특정 데이터를 공유하게 될 경우, 발생하는 문제가 공유된 자원에 여러개의 프로세스가 동시에 접근하면 안되며, 단지 한번에 하나의 프로세스만 접근 가능하도록 만들어줘야 할 것이며, 이때 Semaphore를 사용함
즉, 운영 체제 또는 프로그램 작성 내에서 공유 자원에 대한 접속을 제어하기 위해 사용되는 신호임
한 프로세스가 사용하고 있는 동안에 Semaphore를 세워서 다른 프로세스를 대기시키고 사용이 끝나면 해제시키는 방법으로 사용
이것이 또 Thread를 막는 Mutex라는 것이 있는데 이를 두 개 비교해보면 아래와 같음
파일 형태? 메모리 공간?
위에서 PIPE의 경우 파일의 형태 그리고 Stream으로 데이터 자원을 처리하고 쓴다고 하였고 Message Queue에서는 메모리 공간을 활용해서 처리한다고 하였음
물론 추상적으로나마 그리고 도식화를 봄으로써 그것의 데이터들의 주고 받는 형식에 대해서 느낌을 알 수 있지만 좀 더 이 개념에 대해서 생각을 해 본다면
먼저 PIPE의 경우 파일 형태를 공유하면서 처리하는데, 이는 Stream의 형태로 처리한다고 함, 이 Stream은 일련의 데이터 요소를 말하는데, 개별 바이트나 문자열 등 데이터의 원천임
즉, 이는 PIPE에서 파일을 보낸다고 하더라도 파일 그 자체를 통으로 보내는 게 아닌 PIPE를 통한 Stream의 형태로 작은 데이터 조각들이 보내진다고 마치 흐르듯이 도식화와 같이 보내진다고 보면 됨
근데 여기서 Message Queue는 이와 다른 방식으로 메모리 공간을 활용한다고 하였는데, 이는 또 다시 보면 데이터를 한 곳에서 다른 곳을 보낼 때 일시적으로 그 데이터를 보관하는 메모리 영역을 말하는데, 이는 Buffer라고도 함, Queue라고도 부르는데 이런식으로 Message Queue에서는 일종의 메모리 영역을 사용한다고 볼 수 있음
각각의 IPC 통신에 있어서 방식도 중요하지만 이 차이는 짚고 넘어감