IT정보/운영체제

[OS] 프로세스 간 통신 방법 (Inter Process Communication

narang111 2022. 10. 13. 18:35

프로세스들 간 의사소통을 IPC라고 한다.

서로 다른 프로세스가 데이터를 주고 받을 수 있다는 것을 의미하며

동시에 접근 가능한 메모리 즉, 프로세스들이 공유하는 메모리가 필요하다.

 

 

프로세스간 통신에는 약 6가지 가지 방법이 있다

  • 공유 메모리(Shared Memory)
  • 파이프(Pipe)
  • 소켓(Socket)
  • 메시지 큐(Message Queue)
  • 메모리 맵(Memory Map)
  • RPC(Remote Produce Call)

 

공유 메모리 (Shared Memory)
  • 시스템 상의 공유 메모리를 통해 통신
  • 프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당
     -> 공유 메모리가 각 프로세스에게 첨부하는 방식으로 작동 ( 각 프로세스가 메모리 영역에 첨부)
  • 프로세스 간 Read, Write를 모두 필요로 할 때 사용
  • 대량의 정보를 다수의 프로세스에게 배포 가능
  • 중개자 없이 곧바로 메모리에 접근할 수 있어 파이프보다 작동이 빠름

 

파이프 (Pipe)
  • 통신을 위한 메모리 공간(버퍼)을 생성하여 프로세스가 데이터를 주고 받게끔 함
  • 파이프 종류
    - 익명파이프
    - 네임드 파이프

 

소켓 (Socket)
  •  프로세스 간 데이터 교환을 위한 데이터 통신 엔드 포인트
  • 네트워크 소켓 통신을 통해 데이터를 공유
  • 클라이언트와 서버가 소켓을 통해서 통신하는 구조로 원격에서 프로세스 간 데이터를 공유할 때 사용
  • 전이중 통신 가능
  • 서버-클라이언트 환경을 구축하는데 용이
  • 서버: bind, listen, accept
  • 클라이언트: connect 

 

메시지 큐
  • 입출력 방식은 Named 파이프와 동일
  • 메시지 큐는 파이프처럼 데이터의 흐름이 아니라 메모리 공간이다. 즉 메모리를 사용한 PIPE
  • 다수의 프로세스간 메시지를 전달할 수 있다.
  • 사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.
  • 메시지의 접근을 위해서는 키가 필요하다.

 

메모리 맵
  • 공유 메모리처럼 메모리 공유
  • 열린 파일을 메모리에 맵핑시켜서 공유
  • 파일로 대용량 데이터를 공유해야할 때 사용
  • 메모리 맵 파일은 파일의 크기를 바꿀 수는 없으며 메모리 맵 파일을 사용하기 이전 또는 이후에만 파일 크기 변경 가능

 

RPC
  • 분산 네트워크 망에서 많이 사용
  • 별도의 원격제어 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스 간 통신 기술
  • 원격 프로시저 호출을 이용하면 프로그래머는 함수가 실행 프로그램에 로컬 위치에 있든 원격 위치에 있든 동일한 코드 이용
  • 해당 방법은 분리된 PC에 저장된 데이터를 내 PC에 존재하는 것처럼 데이터를 가져와 사용

 

IPC 종류 파이프 Named 파이프 메시지 큐 공유 메모리 메모리 맵 소켓
사용시기 부모-자식
단방향
다른프로세스
단방향
다른프로세스
단방향
다른프로세스
양방향
다른프로세스
양방향
다른시스템
양방향
공유 매개체 파일 파일 메모리 메모리 파일+메모리 소켓
통신단위 stream stream 구조체 구조체 페이지 stream
통신가능범위 동일 시스템 동일시스템 동일시스템 동일시스템 동일시스템 동일+외부시스템

 

 

참고블로그

https://dar0m.tistory.com/233

 

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

개념 프로세스들 간의 의사소통하는 것을 IPC라고 한다. 프로세스가 통신 가능하다는 것은 서로 다른 프로세스가 데이터를 주고 받을 수 있다는 것이며, 동시에 접근 가능한 메모리 즉, 프로세스

dar0m.tistory.com


 

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

 

세마포어

공유된 자원에 여러개의 프로세스가 동시에 접근하면 안되며, 한번에 하나의 프로세스만 접근 가능하도록 할 때 사용

현재 공유자원에 접근할 수 있는 스레드, 프로세스의 수를 나타내는 값을 두어 상호배제를 달성하는 기법

 

뮤텍스

'임계 영역' 이라고도 한다. 서로 다른 두 프로세스, 혹은 스레드 등의 처리 단위가 같이 접근해서는 안되는 공유 영역을 뜻한다. 

한 스레드, 프로세스에 의해 소유될 수 있는 Key를 기반으로 한 상호배제 기법

 

 

한번에 이해되는 참고블로그

https://worthpreading.tistory.com/90

 

뮤텍스(Mutex)와 세마포어(Semaphore)의 차이

이 글은 Medium에 개시된 글입니다. Medium에서 보시면 좀 더 유쾌한 환경에서 글을 보실 수 있습니다. 뮤텍스(Mutex)와 세마포어(Semaphore)의 차이 Toilet problem 동시성 프로그래밍의 가장 큰 숙제는 ‘공

worthpreading.tistory.com

 

 


Q.

IPC에 대해서 아는대로 설명해보세요

A.

IPC는 Inter-process Communication의 약자로 프로세스 간 통신하여 상호 커뮤니케이션을 하기 위한 기법입니다.

대표적으로 공유메모리, 파이프, 소켓을 이용한 기법들이 있습니다.

 

Q.

세마포어와 뮤텍스는 무엇인가요?

A.

공유된 자원에 여러 개의 프로세스가 동시에 접근했을 때 생기는 문제들을 방지하기 위한 기법들입니다.

데이터를 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 둡니다.

뮤텍스와 세마포어는 공유된 자원의 임계영역에 하나의 프로세스 혹은 스레드가 접근하는 것을 막아줍니다.

둘의 차이점은 동기화 대상의 개수에 있습니다.

뮤텍스는 동기화 대상이 하나이고 세마포어는 동기화 대상이 하나 이상입니다.