프로세스 간 통신 방법(Inter Process Communication, IPC)

김수혁·2023년 12월 12일
0

CS

목록 보기
3/3

독립적 프로세스

  • 프로세스가 시스템에서 실행 중인 다른 프로세스들과 데이터를 공유하지 않는 프로세스

협력적 프로세스

  • 프로세스가 시스템에서 실행 중인 다른 프로세스들에 영향을 주거나 받는다면 이는 협력적인 프로세스

프로세스 협력을 허용하는 환경을 제공하는 이유

  • 정보 공유 (information sharing) : 여러 응용 프로그램이 동일한 정보에 병행적으로 접근할 수 있는 환경 제공
  • 계산 가속화 (computation speedup) : 특정 태스크를 빨리 실행하기 위해 서브 테스크로 나누어 병렬로 실행하게 하는것
    단, 멀티 코어를 가진 경우에만 달성 가능
  • 모듈성 (modularity) : 시스템 기능을 별도의 프로세스들 또는 스레드들로 나누어, 모듈식 형태로 시스템을 구성

IPC

개념

  • 프로세스들이 데이터를 서로 교환할 수 있는 통신 기법

스레드 간 통신보다 프로세스 간 통신이 어려운 이유

프로세스는 생성되면서 PC를 포함하여 메모리 공간 등을 복사하여 별도의 자원을 할당하지만, 스레드는 메모리 공간과 자원을 공유하기 때문이다

  • 따라서 프로세스는 통신할 수 있는 공간이 없어 통신을 위한 별도의 공간을 만들어주어야 한다.

IPC의 종류

1. 공유 메모리 (Shared Memory)


  • 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 지원하는 설비
  • 프로세스가 공유 메모리 할당을 커널에 요청 시 커널은 해당 프로세스에 메모리 공간을 할당
    	> 공유 메모리가 각 프로세스에게 첨부하는 방식으로 작동
    	> 각 프로세스가 메모리 영역에 첨부됨
  • 프로세스 간 Read, Write를 모두 필요로 할 때 사용
  • 대량의 정보를 다수의 프로세스에게 배포 가능
  • 중계자 없이 곧바로 메모리에 접근
  • 따라서 IPC 중에서 가장 빠르다

2. 파이프 (Pipe)


  • 메모리 공간(버퍼)를 생성하여 프로세스 통신
  • 파이프는 두개의 프로세스를 연결

    하나의 프로세스는 데이터를 Write만, 다른 하나의 프로세스는 데이터를 Read만 가능
    => 이러한 특징으로 반이중 통신이라 부른다.

  • 송/수신을 하기 위해서는 두 개의 파이프로 구성
  • 간단하게 사용 가능

1. 익명 파이프

  • 일반적인 파이프
  • 통신할 프로세스가 명확하게 알 수 있는 경우 사용
    	> 부모-자식 or 형제 프로세스 간 통신에 사용
    	> 외부 프로세스에서 사용 불가
  • pipe 함수로 생성

단점

  • 프로세스가 읽기 쓰기 통신 모두 해야할 시, pipe를 2개를 만들어야 해 구현 복잡해짐
  • 전이중 통신을 고려해야한다면 낭비가 심해짐

2. 네임드 파이프

  • 전혀 모르는 상태의 프로세스들 간의 통신에 사용
  • 익명 파이프의 확장된 상태
  • 프로세스 통신을 위해 이름이 있는 파일을 사용
  • FIFO라 불리는 특수 파일을 이용해 서로 관련 없는 프로세스 간 통신에 사용
  • mkfifo 함수로 생성

3. 소켓 (Socket)

소켓

  • 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점

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

  • 전이중(양방향) 통신 가능

  • 서버/클라이언트 환경 구축 시 용이

소켓통신 과정

서버

  1. socket 함수를 사용하여 서버의 소켓을 연다.
  2. 열어놓은 소켓에 서버의 IP, PORT를 바인딩한다.
  3. listen 함수를 사용하여 메시지를 받을 수 있는 상태로 전환한다.
  4. 클라이언트가 보낸 connect request를 받고 클라이언트와 통신하기 위한 파일 디스크립터를 생성한다.
  5. send 함수를 통해서 메시지를 주거나 recv 함수를 통해 메시지를 받는다.
  6. 열어놓은 소켓을 닫는다.

클라이언트

  1. socket 함수를 사용하여 클라이언트의 소켓을 연다.
  2. 서버에 connect request를 전송한다.
  3. 메시지를 보내거나 받는다.
  4. 소켓을 닫는다.

4. 메시지 큐 (Message Queue)

  • 메시지 지향 미들웨어 (Message Oriented Middleware: MOM)을 구현한 시스템

    MOM은 비동기 메시지를 사용하는 응용 프로그램 간의 데이터 송수신

  • 대용량 데이터를 처리하기 위한 배치 작업이나 채팅서비스, 비동기 데이터 처리 시 사용

  • 기존에 분산되어 있던 데이터 처리를 한 곳에 집중하면서, 메시지 브로커를 두어서 필요한 프로그램에 작업을 분산시키는 방법을 하는 것이 목적

  • 다른 프로세스와 메시지를 교환할 때 AMQP (Advanced Message Queuing Protocol)을 이용

AMQP란?

메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜
AMQP의 정의 기능들은 메시지 지향, 큐잉, 라우팅, 신뢰성, 보안

장점

  • 비동기 : 큐네 넣기 때문에 나중에 처리 가능
  • 비동조 : 어플리케이션과 분리 가능
  • 탄력성 : 일부가 실패 시 전체에 영향 X
  • 과잉 : 실패할 경우 재실행 가능
  • 보증 : 작업이 처리된걸 확인 가능
  • 확장성 : 다수의 프로세스들이 큐에 메시지를 보내기 가능

5. 메모리 맵 (Memory Map)

  • 열린 파일을 메모리에 맵핑시켜 공유하는 방식
  • 파일로 대용량 데이터를 공유해야 할 때 사용
  • 메모리 맵 파일은 파일의 크기를 바꿀 수 없음
    	> 메모리 맵 파일 사용 이전 혹은 이후에만 파일의 크기 바꾸기 가능

6. RPC (Remote Procedure Call)

  • 분산 네트워크 망에서 많이 사용되는 방식

  • 다른 주소 공간의 procedure를 실행할 때, 원격 세부사항에 관한 명시적인 코딩없이 마치 local 컴퓨터의 procedure를 호출하는 것처럼 사용하는 방식

  • stub을 통해서 마치 자신의 디스크에 존재하는 것처럼 착각을 일으켜 사용하는 방식
    스텁

    리눅스에서 공유 라이브러리의 일부분 중 하나

  • 프로시저 : 루틴, 서브루틴, 함수와 같은 뜻으로 사용되며 하나의 프로시저는 특정 작업을 수행하기 위한 프로그램의 일부 => 어떤 행동을 수행하기 위한 일련의 작업 순서

IPC 통신에서 프로세스 간 데이터를 동기화하고 보호하기 위해 세마포어뮤텍스 사용

세마포어

공유된 자원의 데이터 혹은 임계영역등에 여러 프로세스 혹은 스레드가 접근하는 것을 막아줌

뮤텍스

공유된 자원의 데이터 혹은 임계영역 등에 하나의 프로세스 혹은 스레드가 접근하는 것을 막아줌

정리 표

참고
profile
안녕

0개의 댓글