본문 바로가기

Computer Science

[OS] IPC

프로세스 간 통신 IPC

IPC (Interprocess Communication)

  • 리눅스 커널의 구조를 보면 process는 완전히 독립된 실행 객체이다.
  • 서로 독립되어있다는 것은 다른 프로세스의 영향을 받지 않는다는 장점이 있다.
  • 그러나 서로 간의 통신이 어렵다는 문제가 존재한다.
  • 이를 위해서 커널 영역에서 IPC라는 내부 프로세스 간 통신을 제공하고,
  • 프로세스는 커널이 제공하는 IPC 설비를 이용해서 프로세스 간 통신을 한다.

IPC설비들

PIPE(익명 PIPE)

  • 파이프로 두 개의 프로세스를 연결하고
  • 하나의 프로세스는 데이터를 Write
  • 다른 하나는 데이터를 Read만 한다.
  • 한쪽 방향으로만 통신이 가능하기 때문에 Half-Duplex(반 이중 통신)이라고 부른다.
  • 송/수신을 모두 하길 원한다면 두 개의 파이프를 만들어야 한다.
  • 같은 PPID를 가지는 프로세스들 사이에서만 통신이 가능하다.

Named PIPE(FIFO)

  • 익명 파이프는 통신을 할 프로세스를 명확하게 알 경우에 사용하고,
  • Named PIPE는 전혀 모르는 상태의 프로세스들 간의 통신에 이용한다.
  • Named PIPE는 부모 프로세스와 무관하게 전혀 다른 모든 프로세스들 사이에서 통신이 가능하다.
  • 프로세스 통신을 위해 이름이 있는 파일을 사용하기에 가능한 일이다.
  • 하지만, PIPE와 동일하게 읽기/쓰기가 동시에 불가능하다.

Message Queue

  • Queue는 선입 선출의 자료구조로 커널에서 관리한다.
  • 입출력 방식은 Named PIPE와 동일하지만, Named PIPE는 데이터의 흐름이라면
  • 메시지 큐는 메모리 공간이라는 점이 다르다.
  • 장점은 메시지큐에 쓸 데이터에 번호를 붙여서 여러 개의 프로세스가 동시에 데이터를 다룰 수 있다.

Shared Memory

  • 데이터를 공유하는 방법은 두 가지가 있다.
    • 통신을 이용해서 데이터를 주고 받는 것
    • 데이터 자체를 공유하는 것
  • 위의 세 가지는 통신을 이용한 설비라면, 공유메모리는 데이터 자체를 공유하도록 지원하는 설비이다.
  • 프로세스는 자신의 메모리 영역이 있고, 커널에 의해서 보호된다.
  • 공유 메모리는 프로세스 간 메모리 영역을 공유해서 사용할 수 있도록 허용한다.
  • 중개자 없이(통신 등..) 바로 메모리에 접근하기 때문에 다른 IPC보다 빠르게 작동한다.

Memory Map

  • 공유 메모리와 마찬가지로 메모리를 공유하지만, 열린 파일을 메모리에 맵핑시켜서 공유한다는 점이 다르다.

Socket

  • 프로세스들 사이의 통신을 가능하게 한다.
  • 서버 - 클라이언트 통신에 주로 사용한다.

    Semaphore

  • 다른 IPC 설비들이 대부분 프로세스간 메시지 전송을 목적으로 하는 데 반해,
  • 세마포어는 프로세스 간 데이터를 동기화하고 보호하는 목적으로 사용한다.
  • 프소세스 간 통신을 할 때 데이터를 공유함으로써 발생하는 문제를 해결한다.
  • 공유 자원에 동시 접근을 막는다.

출처 : https://jwprogramming.tistory.com/54

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

[Network] UDP  (0) 2020.06.08
[OS] 스케줄링 종류  (0) 2020.05.27
[OS] 스케줄러  (0) 2020.05.27
[OS] 멀티 스레드  (0) 2020.05.26
[OS] 프로세스와 스레드  (0) 2020.05.26