[OS] Extra. IPC

KYJ의 Tech Velog·2023년 4월 14일
0

OS

목록 보기
15/23
post-thumbnail

Inter-Process Communication

운영체제 상에서 실행중인 프로세스 간에 정보를 주고받는 것을 의미합니다. 프로세스는 할당된 메모리 내의 정보만 접근할 수 있습니다.

그래서 데이터를 공유하기 위해서 메모리 공간을 공유하는 스레드를 이용하는 경우가 많습니다. 하지만 스레드는 결국 한 프로그램 안에서 메모리 공간을 공유하는 것입니다. 결국 서로 다른 프로그램(프로세스)의 데이터를 공유하려면 다른 프로세스의 메모리에 접근해야 합니다.

1. PIPE

두 개의 프로세스를 연결합니다. 하나의 프로세스는 데이터를 쓰기만 가능하고 다른 프로세스는 데이터를 읽기만 가능합니다. 따라서 PIPE는 단방향 통신만 가능합니다. 양방향 통신을 원한다면 PIPE를 두 개 만들어야 합니다.

PIPE는 매우 간단하게 사용할 수 있다는 장점이 있습니다. 단순한 단방향 통신만 원한다면 고민없이 PIPE를 사용하면 됩니다.

하지만 양방향 통신을 하기 위해서 PIPE를 2개 만들어야 하는데 구현이 꽤나 복잡해질 수 있습니다.

2. Named PIPE

PIPE는 통신을 할 프로세스가 명확할 때 사용합니다. 예를 들어 자식과 부모 프로세스간 통신이 있습니다. 반면 Named PIPE는 전혀 모르는 상태의 프로세스간 통신에 사용합니다. 부모 프로세스와 무관하게 전혀 다른 모든 프로세스들 사이에서 통신이 가능합니다. 프로세스 통신을 위해 이름을 가진 PIPE를 사용하기 때문입니다.

하지만 단방향 통신은 결국 PIPE와 똑같이 해결해야합니다.

3. Message Queue

프로세스 간의 메시지를 임시로 저장하는 간단한 버퍼라고 생각하면 됩니다. 메시지를 전송하고자 하는 프로세스가 메시지를 Message Queue에 추가합니다. 메시지를 받고자 하는 프로세스는 Message Queue에서 메시지를 검색합니다. 여러 프로세스가 물건을 꺼내 쓸 수 있는 컨테이너 벨트라고 생각하면 됩니다.

Message Queue는 양방향 통신이 가능합니다.

4. Shared Memory

데이터를 아예 공유하는 방법입니다. 공유 메모리가 데이터 자체를 공유하도록 지원하는 방식입니다. 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용합니다.

중개자 없이(커널의 관여없이) 곧바로 메모리에 접근할 수 있기 때문에 모든 IPC들 중에서 가장 빠르게 작동할 수 있습니다. 하지만 여러 프로세스가 동시에 메모리에 접근하는 문제가 발생할 수 있어서 별도의 동기화 과정이 필요하다는 단점이 있습니다.

5. Memory Map

Shared Memory와 비슷하지만 열린 파일을 메모리에 맵핑시켜서 공유한다는 점이 다릅니다. 파일은 시스템의 모두가 공유할 수 있는 자원이므로 프로세스간 데이터 공유에 전혀 문제가 없을 것입니다.

Socket과 Semaphore도 있지만 Socket은 네트워크에 대한 내용이고, Semaphore는 프로세스 동기화에서 다루었기 때문에 생략하도록 하겠습니다.

0개의 댓글