CS/Operating System

[Operating System] IPC(Inter Process Communication)

hanseongbugi 2024. 4. 8. 17:11

IPC?

  • 프로세스는 독립적으로 실행된다.
    • 독립되어있다는 것은 다른 프로세스에게 영향을 받지 않는다는 의미
    • 스레드는 프로세스 안에서 자원을 공유하므로 영향을 받는다.
  • 독립적 구조를 가진 프로세스 간의 통신을 해야하는 경우 IPC 통신을 사용
  • 프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간 통신을 진행할 수 있음
  • 공유된 자원을 프로세스간에 동기화하고 보호하기 위해 세마포어와 뮤텍스를 사용함
    • 공유된 자원에 한번에 하나의 프로세스만 접근시킬 때 사용

IPC 종류

익명 PIPE

  • 파이프는 두 개의 프로세스를 연결하는데 하나의 프로세스는 쓰기만, 다른 프로세스는 읽기만 할 수 있다.
  • 한쪽 방향으로만 통신이 가능한 반이중(Half-Duplex) 통신이라고 한다.
  • 양쪽 모두 송/수신을 하고 싶으면 2개의 파이프를 만들어야 한다.
  • 매우 간단하게 사용할 수 있다는 장점이 있고, 단순히 데이터 흐름만 가질 때 파이프를 사용하는 것이 효과적
  • 단점으로 전이중(Full-Duplex) 통신을 위해 2개의 파이프를 만들어야할 때 구현이 복잡해진다.

Named PIPE(FIFO)

  • 익명 파이프는 통신할 프로세스를 명확히 알 수 있는 경우 사용
  • Named 파이프는 전혀 모르는 상태의 프로세스들 사이 통신에 사용
  • 익명 파이프의 확장 형태로 부모 프로세스와 무관한 다른 프로세스와도 통신이 가능한 것
    • 통신을 위해 이름있는 파일을 사용
  • Named 파이프 역시 읽기/쓰기를 동시에 진행할 수 없음
  • 전이중 통신을 위해 파이프 2개를 만들어야 함

Message Queue

  • 입출력 방식은 Named 파이프와 동일함
  • 다른점은 메시지 큐는 파이프처럼 데이터 흐름이 아닌 메모리 공간
  • 사용할 데이터에 번호를 붙여 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.

공유 메모리

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

메모리 맵

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

소켓

  • 네트워크 소켓 통신을 통해 데이터를 공유
  • 클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스간 데이터를 공유할 때 사용

 

 

출처

https://github.com/gyoogle/tech-interview-for-developer

 

GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com