일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 데이터베이스
- 문제풀이
- ps
- Transport layer
- baekjoon
- dp
- 자료구조
- Embedded
- leetcode
- swea
- 프로그래머스
- Network
- BHS
- 전송 계층
- 릿코드
- 부트시퀀스
- DB
- 백준
- C++
- 응용 계층
- 네트워크
- Djikstra
- BST
- 다익스트라
- STL
- 관계형 모델
- Database
- boot sequence
- 임베디드
- Application Layer
- Today
- Total
BOBO's Note
IPC 본문
IPC
IPC는 Inter-Process Communication의 약자로, 프로세스간 통신하는 방법을 의미한다. 프로세스간 통신이란, 프로세스간 데이터를 주고받는 행위이다. 다양한 IPC 방법이 존재하는데, 대표적인 IPC는 다음과 같다.
-
PIPE
-
Named PIPE
-
Message Queue
-
Shared Memory
-
Memory Map
-
Socket
PIPE
Half-duplex 통신이다. 다시 말해서 한 프로세스는 write만 다른 프로세스는 read만 가능하다. 한 프로세스가 read, write를 모두 하고 싶으면 파이프를 2개 생성해야 한다.
통신할 프로세스를 명확히 알 때 사용할 수 있다. 같은 PPID를 갖는 프로세스들, 즉 부모 프로세스가 동일한 프로세스끼리만 통신할 수 있다.
Named PIPE
파이프의 이름을 알면 부모 프로세스와 무관하게 모든 프로세스들끼리 통신할 수 있다. PIPE 방식과 마찬가지로 half-duplex 통신이다.
Message Passing
PIPE, Named PIPE가 데이터 스트림으로 통신한다면, 이 방법은 메모리 공간을 통해 통신한다.
커널 영역에 메세지 큐가 존재하여, 메세지 큐에 데이터를 enqueue/dequeue 하여 프로세스끼리 데이터를 주고받는다. 즉 user-mode와 kernel-mode의 전환과 데이터 복사로 인한 오버헤드가 존재한다.
메세지에 번호를 붙임으로써 여러 프로세스가 동시에 데이터를 다룰 수 있다.
Shared Memory
프로세스간 공유하는 메모리 영역을 각 프로세스가 자신의 메모리 공간처럼 사용하는 방법이다(shmat() 시스템 콜을 통해 data 세그먼트에 attach된다).
프로세스가 공유 메모리 할당을 커널에 요청하면, 커널에서 user-space에 메모리를 할당한다. 이 공간은 커널이 관리(=할당 및 해제)하며, 어떤 프로세스든지 포인터를 얻어와 이 공간에 접근할 수 있다. 공유 메모리에 대해 race condition이 발생하지 않도록 동기화 매커니즘을 사용해야 한다.
곧바로 메모리에 접근하기 때문에 가장 빠른 IPC 방식이다.
Memory Map
열린 파일을 메모리에 매핑하여 공유한다. 주로 대용량 데이터를 공유할 때 사용하는 방법이다.
Socket
프로세스와 네트워크 사이의 인터페이스이다.
위에서 살펴본 IPC 방법들은 한 host 내의 프로세스끼리 통신하는 방법이라면, 소켓은 주로 다른 host에 존재하는 프로세스끼리 사용하는 방식이다.