CS/면접준비

[OS] - IPC

Dortmoot 2022. 9. 29. 17:22

IPC(Inter-Process-Communication)


독립적 구조를 가진 Process들 끼리 통신해야할 상황을 처리하여 준다.

 

  • Process는 독립적으로 실행되기 때문에 다른 Process에게 영향을 받지 않는다.
  • Kernel을 이용하여 IPC 설비를 이용해 통신 할 수 있다.

Process간의 Data를 동기화 및 보호를 위하여 Semaphore와 mutex를 이용한다. ( 공유된 Resource에 하나의 프로세스만 접근 하는 경우 )

 

IPC 종류

1. 익명 Pipe

  • Pipe는 2개의 Process를 연결하는데, 하나의 Process에서만 Write가 가능하고 하나의 Process에서는 Read만 가능하다
  • 통신할 Process를 명확히 알 때 사용한다. ( Parent- Child )
  • 한쪽 방향으로만 통신이 가능한 반이중 통신이라고 부른다.
  • 양쪽다 송수신하기 위해서는 Pipe를 2개 사용해야 한다.

2. Named Pipe(FIFO)

  • 전혀 모르는 상태의 Process 통신에 사용한다.
  • 익명 Pipe가 확장된 상태로 부모 프로세스와 무관한 다른 프로세스도 통신이 가능하다. ( 통신을 위해 이름있는 파일 사용)
  • Named Pipe 또한 Write/read가 동시에 불가능하다.

3. Message Queue

  • I/O 방식은 Named Pipe와 동일하다.
  • Pipe와 달리 메모리 공간이다. ( 파이프가 아닌 어디에서나 물건을 꺼낼 수 있는 컨테이너 벨트 )
  • 사용할 Data에 번호를 붙임으로써, 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.

 

4. Shared Memory

  • Pipe,Message Q가 통신을 위한 설비라면, 데이터 자체를 공유하도록 만들어진 설비이다.
  • Process는 Memory 영역은 독립적인 영역으로 다른 Process의 접근이 제한된다. 하지만, Process가 Data를 공유하고 싶은 상황도 발생한다. 이를 위해 Thread처러 Data 값을 공유하도록 만든 것이다.
  • Shared Memory는 Process간의 메모리 영역을 공유하여 사용 할 수 있도록 한다.
  • Process가 Kernel에 Shared Memory 할당 Request -> Kernel이 메로리 공간을 할당 -> 다른 Process들이 메모리 영역에 접근이 가능하다.

 

중개자가 없고 메모리를 바라 봄으로 제일 빠르게 동작한다.

 

5. Memory map

  • Shared Memory와 동일하게 메모리를 공유하여 준다.
  • Memory map은 열린 파일은 메모리에 맵핑 시켜주어 공유한다. ( 매개체 = 파일 + 메모리 )
  • 주로 파일과 같은 대용량 데이터를 공유 할 때 사용한다.

6. Socket

  • 네트워크 Socket을 이용하여 공유한다.
  • Clinet-Server 구조로 원격에서 Process를 공유할 때 사용
  • Server( bind, listen, accept ) / Client (connect)