[OS] IPC(Inter Process Communication)

foresec·2023년 7월 20일

IPC

독립적인 구조를 가진 프로세스 간의 통신을 해야하는 상황에서 쓰이는것이 IPC통신
프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스 간 통신을 수행함

IPC 종류

1. File 사용

텍스트 파일txt(혹은 다른 포멧의 파일)을 통해 데이터를 주고 받는 것
하지만 문제가 많은 방법

이 방식은 실시간으로 직접 원하는 프로세스에 데이터 전달하는게 어려움. 디스크에서 데이터 파일을 읽고, 프로세스에 적재되는 과정에서 Context-switching, Interrupt 등 여러 일을 처리해야 하기 때문

잘 꼽히지 않는 방식인 듯

2. 파이프(Pipe)

단방향 통신, 즉 부모-> 자식 프로세스 순으로 일방적으로 통신하는 기법
fork()를 통해 자식 프로세스를 만들고 나서 부모의 데이터를 자식에게 보냄

익명 PIPE

한쪽 방향으로만 통신이 가능한반이중 통신으로 이루어짐

매우 간단하게 사용할 수 있는 장점이 있고, 단순한 데이터 흐름을 가질 땐 파이프를 사용하는 것이 효율적임. 단점으로는 전이중 통신을 위해 2개를 만들어야 할 때는 구현이 복잡함

Named PIPE(FIFO)

익명 파이프는 통신할 프로세스를 명확히 알 수 있는 경우에 사용
Named 파이프는 전혀 모르는 상태의 프로세스들 사이 통신에 사용

즉, 익명 파이프의 확장된 상태로 부모 프로세스와 무관한 다른 프로세스도 통신이 가능한 것 (통신을 위해 이름있는 파일을 사용)

하지만, Named 파이프 역시 읽기/쓰기 동시에 불가능함. 따라서 전이중 통신을 위해서는 익명 파이프처럼 2개를 만들어야 가능

3. Message Queue

FIFO 정책으로 데이터가 전송되는 기법
부모-자식간 통신만 가능한 파이프와 달리 메시지 큐는 어떤 프로세스 간이라도 통신이 가능함. 또한 메시지 큐는 파이프처럼 데이터의 흐름이 아니라 메모리 공간임.
단, 단/양방향의 차이가 있음

4. 공유메모리

공유 메모리 기법은 커널 공간에 메모리 공간을 만들고, 해당 공간을 변수처럼 쓰는 방식
공유 메모리는 데이터 자체를 공유하도록 지원하는 설비

중개자 없이 곧바로 메모리에 접근할 수 있어서 IPC 중에 가장 빠르게 작동함

데이터를 버퍼에 넣어 처리하는 메시지 큐와 달리, 해당 메모리 주소를 변수처럼 접근해서 사용함. 공유 메모리 key를 통해 여러 프로세스가 접근을 가능하게 함.

5. 메모리 맵

공유 메모리처럼 메모리를 공유함. 메모리 맵은 열린 파일을 메모리에 맵핑시켜서 공유하는 방식(즉 공유 매개체가 파일+메모리)

주로 파일로 대용량 데이터를 공유해야 할 때 사용

6. 시그널(Signal)

가장 많이 사용하는 기법 중 하나. IPC가 주용도는 아니지만 활용 가능
커널 혹은 프로세스에서 다른 프로세스에 이벤트가 발생되었는지를 알려주는 기법
프로세스 관련 코드에 관련 시그널 핸들러를 등록해서, 해당 시그널 처리를 실행하는 방식으로 공유

7. 소켓

네트워크 소켓 통신을 통해 데이터를 공유
많이 쓰이는 기법이자, 본래 목적이 IPC로 활용하기 위한 것은 아니지만 활용 가능
클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용

서버(bind, listen, accept), 클라이언트(connect)


참고
https://velog.io/@redgem92/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-IPC-%EA%B8%B0%EB%B2%95
https://gyoogle.dev/blog/computer-science/operating-system/IPC.html

profile
왼쪽 태그보다 시리즈 위주로 구분

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

너무 좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기