Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

IPC(Inter Process Communication) 본문

IT/Computer Science

IPC(Inter Process Communication)

빌드이너프 2023. 2. 6. 10:06

IPC(Inter Process Communication)

  • 프로세스 간에 통신하여 상호 커뮤니케이션을 하는 기법
  • 프로세스끼리 직접적으로 '대화'하는 방법은 없음
    • 왜 그렇냐면 프로세스들이 서로 공간을 쉽게 접근하면 프로세스의 데이터나 코드가 다른 프로세스에 의해 쉽게 바뀔 수 있기 때문
  • 프로세스는 통신을 직접적으로 할 수가 없고, 서로의 공간을 접근할 수가 없음
    • IPC는 프로세스 간의 커뮤니케이션은 필요하기 때문에 나온 기법이라 할 수 있다
  • 프로세스는 독립적으로 실행됨
    • -> 독립 되어있다는 것은 다른 프로세스에게 영향을 받지 않는다고 말할 수 있다
    • (스레드는 프로세스 안에서 자원을 공유하므로 영향을 받음)
    • 이런 독립적 구조를 가진 프로세스 간의 통신을 해야 하는 상황이 있을 것임, 이를 가능하도록 해주는 것이 바로 IPC 통신
  • 프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간 통신을 할 수 있게 됨
커널: 운영체제의 핵심적인 부분으로, 다른 모든 부분에 여러 기본적인 서비스를 제공해줌

통신(커뮤니케이션)이 필요한 이유

  • 성능을 높이기 위해 존재함
  • 어떤 로직을 하나의 프로세스로만 수행하는 대신, 여러 프로세스가 수행해서 보다 빠른 성능을 기대할 수 있음
    • 해당 로직을 수행하는 과정에서 필요한 데이터들을 서로 공유할 수 있어야 하기 때문에 IPC가 필요함

IPC 종류

1. 익명 PIPE

  • 파이프는 두 개의 프로세스를 연결함(하나의 프로세스는 데이터를 쓰기만 하고, 다른 하나는 데이터를 읽기만 할 수 있음)
  • 한쪽 방향으로만 통신이 가능한 반이중 통신이라고도 부름
  • -> 양쪽으로 모두 송/수신을 하고 싶으면 2개의 파이프를 만들어야함
  • 매우 간단하게 사용할 수 있는 장점
  • 단순한 데이터 흐름을 가질 땐 파이프를 사용하는 것이 효율적임
  • 단점: 전이중 통신을 위해 2개를 만들어야 할 때는 구현이 복잡해지게 됨
파이프(pipe): 한 프로세스의 출력이 다른 프로세스의 입력으로 사용되는 단방향 통신 방식

 

2. Named PIPE(FIFO)

  • 익명 파이프는 통신할 프로세스를 명확히 알 수 있는 경우에 사용함(부모-자식 프로세스 간 통신처럼)
  • Named 파이프는 전혀 모르는 상태의 프로세스들 사이 통신에 사용
    • -> 익명 파이프의 확장된 상태로 부모 프로세스와 무관한 다른 프로세스도 통신 가능(통신을 위해 이름있는 파일을 사용)
  • Named 파이프 역시 읽기/쓰기 동시에 불가능
    • 전이중 통신을 위해서는 익명 파이프처럼 2개를 만들어야 가능

 

3. Message Queue

  • 입출력 방식은 Named 파이프와 동일함
    • 다른점: Message Queue는 파이프처럼 데이터의 흐름이 아니라 메모리 공간
  • 사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있음

 

4. 공유 메모리

  • 파이프, 메시지 큐가 통신을 이용한 설비
  • 공유 메모리는 데이터 자체를 공유하도록 지원하는 설비
  • 프로세스의 메모리 영역은 독립적으로 가지며 다른 프로세스가 접근하지 못하도록 반드시 보호되어야 함
  • 하지만 다른 프로세스가 데이터를 사용하도록 해야하는 상황도 필요할 것
    • 파이프를 이용해 통신을 통해 데이터 전달도 가능하지만, 스레드처럼 메모리를 공유하도록 해준다면 더욱 편할 것임
  • 공유 메모리는 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용해줌
  • 프로세스가 공유 메모리 할당을 커널에 요청 -> 커널은 해당 프로세스에 메모리 공간을 할당해줌 -> 이후 모든 프로세스는 해당 메모리 영역에 접근할 수 있게 됨
  • 중개자 없이 곧바로 메모리에 접근할 수 있어서 IPC 중에 가장 빠르게 작동함

 

5. 메모리 맵

  • 공유 메모리처럼 메모리를 공유해줌
  • 메모리 맵은 열린 파일을 메모리에 맵핑시켜서 공유하는 방식이다.(공유 매개체가 파일 + 메모리)
  • 주로 파일로 대용량 데이터를 공유해야 할 때 사용함

 

6. 소켓

  • 네트워크 소켓 통신을 통해 데이터를 공유함
  • 클라이언트와 서버가 소켓을 통해서 통신하는 구조
  • 원격에서 프로세스 간 데이터를 공유할 때 사용함
  • 서버(bind, listen, accept), 클라이언트(connect)
소켓(socket): 프로세스 사이의 대화를 가능하게 하는 쌍방향 통신 방식 

 

 

 


참고자료

널널한 개발자 TV, 프로세스간 통신 개요

gyoogle/tech-interview-for-developer, IPC(Inter Process Communication).md

'IT > Computer Science' 카테고리의 다른 글

cookie / session / token / cache / CDN  (1) 2023.02.08
함수형 프로그래밍  (0) 2023.02.07
GET방식 / POST 방식  (0) 2023.02.03
Normalization 정규화  (0) 2023.02.02
Agile 애자일  (0) 2023.02.01