[OS] 프로세스 간 통신 방법 (Inter Process Communication
프로세스들 간 의사소통을 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 |
통신가능범위 | 동일 시스템 | 동일시스템 | 동일시스템 | 동일시스템 | 동일시스템 | 동일+외부시스템 |
참고블로그
[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.
공유된 자원에 여러 개의 프로세스가 동시에 접근했을 때 생기는 문제들을 방지하기 위한 기법들입니다.
데이터를 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 둡니다.
뮤텍스와 세마포어는 공유된 자원의 임계영역에 하나의 프로세스 혹은 스레드가 접근하는 것을 막아줍니다.
둘의 차이점은 동기화 대상의 개수에 있습니다.
뮤텍스는 동기화 대상이 하나이고 세마포어는 동기화 대상이 하나 이상입니다.