맨위로가기

프로세스 간 통신

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

프로세스 간 통신(IPC)은 운영 체제에서 서로 다른 프로세스들이 데이터를 교환하고 상호 작용하는 데 사용되는 다양한 메커니즘을 의미한다. 주요 IPC 방식에는 파일, 신호, 소켓, 메시지 큐, 파이프, 세마포어, 공유 메모리, 메시지 전달, 메모리 맵 파일, 바인더 등이 있으며, 각 방식은 다양한 운영 체제와 환경에서 지원된다. 또한 플랫폼 독립적인 API와 플랫폼 또는 프로그래밍 언어 종속적인 API가 존재하여 IPC를 구현하는 데 사용된다.

더 읽어볼만한 페이지

  • 프로세스 간 통신 - Ajax
    Ajax는 웹 페이지 전체를 새로고침하지 않고 비동기적으로 서버와 통신하여 웹 애플리케이션의 일부를 업데이트하는 웹 개발 기술로, XMLHttpRequest 객체의 등장으로 가능해졌으며 HTML, CSS, DOM, JavaScript, JSON 등의 기술을 통합하여 동적인 사용자 인터페이스를 구현한다.
  • 프로세스 간 통신 - D-Bus
    D-Bus는 2002년에 시작된 프로세스 간 통신 시스템으로, 시스템 버스와 세션 버스를 통해 정보 공유, 모듈성, 권한 격리를 제공하며, 일대일 요청-응답 및 발행/구독 통신 방식을 지원한다.
  • 운영체제 기술 - 프로세스
    프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로, 운영 체제가 시스템 자원을 효율적으로 관리하며 멀티태스킹 환경에서 독립적인 실행 흐름을 유지한다.
  • 운영체제 기술 - 커널 (컴퓨팅)
    커널은 운영 체제의 핵심으로, 하드웨어와 소프트웨어 간 상호 작용을 관리하며 시스템 보안, 자원 관리, 하드웨어 추상화, 프로세스 스케줄링, 프로세스 간 통신, 다중 작업 환경 지원 등의 기능을 제공하고, 모놀리식, 마이크로, 혼합형 커널 등으로 구현되며 가상화 및 클라우드 컴퓨팅 환경에서 중요성이 커지고 있다.
프로세스 간 통신

2. 주요 IPC 방식

다음은 다양한 운영 체제 및 환경에서 제공되는 주요 IPC 방식이다:[1]

방식설명지원 운영 체제
파일디스크 상의 파일 또는 파일 서버의 레코드를 공유대부분의 운영 체제
신호프로세스 간 메시지 전송 (주로 원격 명령에 사용)대부분의 운영 체제 (윈도에서는 제한적)
소켓네트워크 인터페이스를 통한 데이터 통신 (TCP, UDP 등)대부분의 운영 체제
유닉스 도메인 소켓커널 내에서 통신, 파일 시스템을 주소 공간으로 사용모든 POSIX 시스템, 윈도우 10
메시지 큐메시지 경계를 유지하는 데이터 스트림대부분의 운영 체제
파이프단방향 데이터 채널 (익명 파이프, 지명 파이프)모든 POSIX 시스템, 윈도
세마포어프로세스 간 동기화 기법모든 POSIX 시스템, 윈도
공유 메모리동일 메모리 블록에 대한 접근 권한 공유모든 POSIX 시스템, 윈도
메시지 전달비공유 메모리 환경에서 메시지 큐 등을 이용한 통신MPI, 자바 RMI, CORBA, MSMQ, 메일슬롯, QNX
메모리 맵 파일RAM에 매핑된 파일모든 POSIX 시스템, 윈도
바인더안드로이드에서 제공안드로이드



프로세스 간 통신(IPC)은 단일 스레드에서 데이터를 처리하는 것보다 훨씬 더 큰 비용이 발생할 수 있으며, 통신 및 동기화 오버헤드로 인해 100배 이상 비용이 증가할 수 있다. IPC 방식은 성능, 모듈성, 네트워크 대역폭, 지연 시간 등 다양한 시스템 상황과 소프트웨어 요구 사항에 맞춰 조정된다.[1]

2. 1. 파일

대부분의 운영 체제에서 지원하는 방식으로, 디스크에 저장된 파일이나 파일 서버에서 생성된 레코드를 여러 프로세스가 공유하여 통신한다.[1]

2. 2. 신호 (Signal)

신호는 대부분의 운영 체제에서 지원되며, 한 프로세스에서 다른 프로세스로 메시지를 보내 원격으로 명령하는 데 사용된다.[1] 신호는 일반적으로 데이터를 전송하는 데 사용되지 않고, 파트너 프로세스를 원격으로 명령하는 데 사용된다.[1] 윈도와 같은 일부 시스템에서는 C 런타임 라이브러리에서만 신호를 제공하며 IPC 방식으로 사용하는 것을 지원하지 않는다.[1]

2. 3. 소켓 (Socket)

대부분의 운영 체제에서 소켓을 지원하며, 네트워크 인터페이스를 통해 동일 컴퓨터 또는 네트워크 상의 다른 컴퓨터와 데이터를 주고받는다. 소켓은 스트림 지향형(TCP) 또는 메시지 지향형(UDP, SCTP)으로 사용할 수 있다. 소켓을 통해 기록된 데이터는 메시지 경계를 유지하기 위해 형식이 지정되어야 한다.[1]

유닉스 도메인 소켓은 인터넷 소켓과 유사하지만, 모든 통신이 커널 내에서 발생한다. 도메인 소켓은 파일 시스템을 주소 공간으로 사용하며, 프로세스는 아이노드로 도메인 소켓을 참조한다. 여러 프로세스가 하나의 소켓과 통신할 수 있다.[6]

2. 4. 유닉스 도메인 소켓 (Unix Domain Socket)

유닉스 도메인 소켓은 인터넷 소켓과 유사하지만, 모든 통신이 커널 내에서 발생한다.[6] 파일 시스템을 주소 공간으로 사용하며, 프로세스는 아이노드로 도메인 소켓을 참조하여 여러 프로세스가 하나의 소켓과 통신할 수 있다.[6]

이는 모든 POSIX 운영 체제 및 윈도우 10에서 지원된다.[6]

2. 5. 메시지 큐 (Message Queue)

메시지 큐는 대부분의 운영 체제에서 지원되며, 메시지 경계를 유지하는 데이터 스트림을 사용하여 프로세스 간 통신을 지원한다.[1] 일반적으로 운영 체제에서 구현되며 여러 프로세스가 서로 직접 연결되지 않고도 메시지 큐에 읽고 쓸 수 있다.[1] 소켓과 유사하지만 일반적으로 메시지 경계를 유지하는 데이터 스트림이라는 점에서 차이가 있다.

2. 6. 파이프 (Pipe)

파이프는 POSIX 시스템 및 Windows에서 지원하는 프로세스 간 통신(IPC) 방식 중 하나이다.[1] 파이프에는 익명 파이프와 지명 파이프 두 종류가 있다.

2. 6. 1. 익명 파이프 (Anonymous Pipe)

표준 입력을 사용하는 단방향 데이터 채널이다. 파이프의 쓰기 끝에 기록된 데이터는 파이프의 읽기 끝에서 읽을 때까지 운영 체제에서 버퍼링된다. 프로세스 간의 양방향 통신은 반대 "방향"으로 두 개의 파이프를 사용하여 달성할 수 있다.[1] 모든 POSIX 시스템, Windows에서 제공한다.

2. 6. 2. 지명 파이프 (Named Pipe)

지명 파이프는 파일처럼 취급되는 파이프로, 일반 파일처럼 읽고 쓸 수 있다. 익명 파이프와 같이 표준 입출력을 사용하는 대신, 프로세스는 일반 파일인 것처럼 지명 파이프에 쓰고 읽는다.[1] 모든 POSIX 시스템, Windows, AmigaOS 2.0+에서 제공된다.

2. 7. 세마포어 (Semaphore)

세마포어는 모든 POSIX 시스템 및 윈도에서 지원하는 프로세스 간 동기화 기법이다.[1]

2. 8. 공유 메모리 (Shared Memory)

여러 프로세스에 동일한 메모리 블록에 대한 접근 권한을 부여하여, 프로세스들이 서로 통신할 수 있는 공유 버퍼를 생성한다. 모든 POSIX 시스템 및 윈도에서 지원한다.[1]

2. 9. 메시지 전달 (Message Passing)

메시지 전달(Message Passing)은 메모리를 공유하지 않는 환경에서 사용되는 프로세스 간 통신(IPC) 방식이다.[1] 이 방식은 MPI 패러다임, 자바 RMI, CORBA, MSMQ, 메일슬롯, QNX 등에서 사용된다.[1] 여러 프로그램이 메시지 큐 및/또는 운영체제에서 관리하지 않는 채널을 사용하여 통신할 수 있으며, 동시성 모델에서 일반적으로 사용된다.

2. 10. 메모리 맵 파일 (Memory-mapped file)

RAM에 매핑된 파일로, 스트림으로 출력하는 대신 메모리 주소를 직접 변경하여 수정할 수 있다. 이는 표준 파일과 동일한 이점을 공유한다.[1] 모든 POSIX 시스템 및 윈도에서 이 방식을 지원한다.

2. 11. 바인더 (Binder)

안드로이드에서 제공한다.[1]

3. 플랫폼별 IPC 구현 예

플랫폼 독립적인 API와 플랫폼/프로그래밍 언어 종속적인 API로 크게 두 가지로 분류할 수 있다.

플랫폼 독립적인 주요 API는 다음과 같다.



플랫폼 또는 프로그래밍 언어에 종속적인 API는 다음과 같다.

3. 1. 플랫폼 독립적 API


  • CORBA
  • D-Bus
  • DCE
  • Mbus (메시지 버스, 3259에 명시됨)
  • MCAPI
  • ONC RPC
  • Thrift
  • TIPC
  • ZeroC의 ICE
  • gRPC
  • ØMQ
  • Enduro/X 미들웨어
  • [http://www.inspirel.com/yami4 YAMI4]
  • JSON-RPC
  • XML-RPC
  • SOAP

3. 2. 플랫폼/프로그래밍 언어 종속적 API

플랫폼 또는 프로그래밍 언어에 종속적인 API는 다음과 같다.

운영체제/프로그래밍 언어API 종류
ARexxARexx 포트
Mach 커널Mach 포트
System V메시지 큐, 세마포어, 공유 메모리
POSIXmmap, 메시지 큐, 세마포어[7], 공유 메모리
솔라리스Doors[7]
RISC OS메시지[10]
QNXPPS (Persistant Publish/Subscribe) 서비스[11]
OpenBinderOpenBinder - BeOS가 기원이며, 최근에는 안드로이드에서 사용[11]
일렉트론주 프로세스와 렌더러 프로세스 간 JSON 객체 공유를 통한 비동기 IPC[8]
PHP세션
분산 루비분산 루비



다음은 IPC를 사용하지만 자체적으로 구현하지 않는 플랫폼 또는 프로그래밍 언어별 API이다.

운영체제/프로그래밍 언어API 종류
PHP세션
분산 루비분산 루비


3. 2. 1. 애플 (Apple)

애플의 애플 이벤트(Apple events)는 이전에는 상호 응용 프로그램 통신(Interapplication Communications, IAC)으로 알려졌다.[7]

3. 2. 2. Enea

에네아의 LINX는 리눅스용 (오픈 소스)과 OSE에서 동작하는 다양한 DSP 및 범용 프로세서를 위한 버전이 있다.[10]

3. 2. 3. 카네기 멜론 대학교 (CMU)

CMU의 IPC 구현[10]

3. 2. 4. 자바 (Java)

자바는 원격 메서드 호출(RMI)을 지원한다.[10]

3. 2. 5. KDE

KDE의 데스크톱 통신 프로토콜(DCOP)은 D-Bus로 대체되었다.[10]

3. 2. 6. 리눅스 (Linux)


  • Libt2n - 리눅스 상에서 C++로만 동작하며, 복잡한 객체나 예외를 처리할 수 있다.[10]
  • SIMPL (Synchronous Interprocess Messaging Project for Linux) - QNX형 IPC를 리눅스에 구현한 프로젝트이다.
  • DIPC (Distributed Inter-Process Communication) - 리눅스에서 System V 계열 IPC를 네트워크로 확장한 구조이다.

3. 2. 7. 마이크로소프트 (Microsoft)


  • ActiveX
  • 구성 요소 개체 모델(COM)
  • Microsoft Transaction Server
  • 분산 구성 요소 개체 모델(DCOM)
  • 동적 데이터 교환(DDE)
  • 개체 연결 및 포함(OLE)
  • 익명 파이프
  • 명명된 파이프
  • 로컬 프로시저 호출
  • 메일슬롯(MailSlot)
  • 메시지 루프
  • MSRPC
  • .NET 리모팅
  • Windows Communication Foundation(WCF)[10]

3. 2. 8. 노벨 (Novell)

노벨SPX는 프로세스 간 통신(IPC)에 사용되는 API 가운데 하나이다.[7]

3. 2. 9. POSIX

POSIX는 mmap, 메시지 큐, 세마포어[7] 및 공유 메모리를 제공한다.

3. 2. 10. PHP

PHP의 세션은 IPC를 사용하지만 자체적으로 구현하지는 않는다.[8]

3. 2. 11. RISC OS

RISC OS는 메시지를 사용한다.[10]

3. 2. 12. 솔라리스 (Solaris)

솔라리스의 Doors[7]

3. 2. 13. System V

System V는 메시지 큐, 세마포어, 공유 메모리를 사용한다.[7]

3. 2. 14. 분산 루비 (Distributed Ruby)

분산 루비는 자체적으로 IPC를 구현하지는 않지만 IPC를 사용하는 프로그래밍 언어별 API이다.[8]

3. 2. 15. OpenBinder

BeOS가 기원이며, 최근에는 안드로이드에서 사용되고 있다.[11]

3. 2. 16. QNX

QNX의 PPS(영구 게시/구독) 서비스는 프로세스 간 통신(IPC)을 위한 한 가지 방법이다.[11]

3. 2. 17. 일렉트론 (Electron)

일렉트론은 주 프로세스와 렌더러 프로세스 간 JSON 객체 공유를 통한 비동기 IPC를 지원한다.[8]

참조

[1] 웹사이트 Interprocess Communications http://msdn.microsof[...] Microsoft
[2] 논문 Inter-process communications for system-level design 1993
[3] 서적 Operating System Concepts
[4] 서적 Computer Organization and Design MIPS Edition: The Hardware/Software Interface (The Morgan Kaufmann Series in Computer Architecture and Design) Morgan Kaufmann
[5] 서적 Parallel Programming: Techniques and Applications Using Networked Workstations and Parallel Computers Pearson
[6] 웹사이트 Windows/WSL Interop with AF_UNIX https://blogs.msdn.m[...] Microsoft 2018-02-07
[7] 문서 Concurrent programming - communication between processes http://www.tldp.org/[...]
[8] 웹사이트 IpcMain | Electron https://www.electron[...]
[9] 논문 On µ-Kernel Construction http://os.ibds.kit.e[...] 1995-12
[10] 웹사이트 Inter Process Communication (IPC) https://www.cs.cmu.e[...] カーネギーメロン大学 2012-10-04
[11] 문서 IPC Shared Memory Messaging http://www.solacesys[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com