Inter-Process Communication

Haiseong Jeong·2022년 10월 31일
1
post-thumbnail

단골질문

면접에서 단골 질문이 있다. 필자는 사실 3학년이라 면접같은거 본적 없다. '프로세스와 스레드의 차이점이 무엇인가요?' 이는 운영체제가 시스템의 자원을 어떤단위로 할당하고 프로세스와 스레드가 어떻게 이 자원을 공유하는지에 대한 질문이다. 위 질문에 답을 하면 프로세스는 OS로 부터 독립된 메모리 공간을 할당받는 작업의 단위고 프로세스 내의 스레드는 이 자원을 나눠서 쓰는 실행단위라고 할 수 있다.

이 말은 다시 말해 같은 프로세스 내 스레드 간에는 같은 메모리를 사용하기 때문에 통신이 자유롭지만 프로세스는 각각의 메모리 공간을 할당받기 때문에 통신이 자유롭지 못하다. 오늘은 프로세스간에 정보를 주고받는 방법 여러가지를 알아본다.

Inter Process Communication

다시 말하지만 프로세스는 생성되면서 별도의 공간을 할당받기 때문에 통신을 하기위해서는 별도의 공간이 필요하다. 따라서 커널영역에서 IPC를 제공한다. 이를 통해 프로세스간 통신이 가능하다.

shared memory

커널의 통신 서비스를 이용해 협력하는 프로세스들 사이에 공유되는 메모리 영역(shared memory)을 구축한다. 메모리를 직접 접근하기 때문에 속도가 빠르고 사용이 편하다. 하지만 별도의 동기화 기술이 필요하다. 예를들어 101번과 102번 프로세스가 통신을 한다 가정 할때 101번 프로세스가 공유 메모리에 데이터 전달해도 102번 프로세스는 데이터가 전달된 상태인지 아닌지 알 수 없다.

Pipe

커널영역에 존재하는 가상 파일의 I/O를 통해 프로세스 간 데이터를 주고 받는다. 파이프 생성 시 두개의 파일 디스크립터(read, write)가 return 된다. 일반적인 파일 입출력 함수(read/write)를 통해 데이터를 전달하기 때문에 사용이 간단하다. 하지만 부모/자식 프로세스 관계에 있는 경우에만 사용할 수 있고, 통신 방향이 단방향이다.

Named Pipe

마찬가지로 생성 시 두개의 파일 디스크립터(read, write)가 return 된다. 특수한 파일(FIFO)을 이용하여 통신하는 방법이다. 파일 이름만 알면 부모/자식 프로세스 외에도 정보를 공유하는 양방향 통신이 가능해진다.

Message Queue

입출력 방식으로 보자면 위의 Named PIPE와 동일하지만 메시지 큐는 메모리 공간을 이용한다. 컨테이너 벨트같은 특성을 가진다. 프로세스간 다양한 통신을 할 때 사용 할수 있다.

Memory Map

대용량 데이터를 공유할 때 사용한다. Shared Memory와 마찬가지로 메모리를 공유한다. 차이점은 Memory Map은 열린파일을 메모리에 맵핑시켜서 공유한다.

Socket

네트워크 소켓통신을 시용한 데이터 공유가 이뤄진다. 네트워크 소켓을 이용하여 Client-Server 구조로 데이터 통신한다. 통신이 끝나면 반드시 close가 필요하다.

profile
나는 개발자다. 5000만큼 코딩한다.

0개의 댓글