IPC란?
모듈 간 통신 방식을 구현하기 위해 사용되는
대표적인 프로그래밍 인터페이스 집합이다.
복수의 프로세스를 수행 및 프로세스 간 통신 구현 가능
1. Pipe (익명 PIpe)
- 두개의 프로세스를 연결하며 하나는 데이터를 쓰기만 할 수 있고 하나는 데이터를 읽기만 할 수 있다(반이중 통신)
- 한쪽 방향으로만 통신이 가능하다. 따라서 송수신을 서로 하기 위해선 파이프를 2개 생성해야 한다 하지만 이렇게 파이
프를 두개로 구성할 경우엔 구현이 복잡해진다는 단점이 있다.
- 익명 pipe는 통신할 프로세스가 누구인지 명확하게 알때 사용 하는 것
2. Pipe(Named Pipe)
- 부모 프로세스와 무관하게 전혀 다른 모든 프로세스들 사이에서 통신 가능하다는 점이 익명 Pipe와의 차이다
- fifo 파일을 생성해야 하며 , 성공시 Named Pipe가 생성이 된다
- Named Pipe 또한 읽기 쓰기가 동시에 불가능하며 전이중 통신을 위해선 2개의 FIFO가 필요하다
3. Message Queue
- 큐는 선입선출의 자료구조를 가지는 통신설비로 커널에서 관리한다. 입출력 방식으로 보자면 위의 Named Pipe와 비슷
하다.
- 하지만 Named Pipe는 데이터의 흐름을 관리한다면 큐는 메모리 공간을 관리한다. 즉 파이프가 아니라 어디에서나 물건
을 꺼내 쓸 수 있는 컨테이너 벨트와 같은 개념이다.
- 메시지 큐에 쓸 데이터에 번호를 붙임으로써 여러개의 프로세스를 통해 동시에 데이터를 쉽게 다룰 수 있다.
4. Shared Memory(공유 메모리)
* 데이터 공유 방식에는 크게 두가지가 있다.
첫번째는 통신을 이용해서 데이터를 주고 받는 것이고, 두번째는 데이터를 아예 공유하는것 즉 함께 사용하는 방식이 있 다.
- Pipe/Named Pipe/ Message queue가 통신을 이용한 설비이며 Shared Memory는 공유 메모리를 통헤 데이터를 자체 공유 하는 것이다.
- 다수의 프로세스가 동시에 작동하는 리눅스의 특성상 각각의 프로세스 메모리는 당연히 보호 받아야 한다. 하지만 메모
리 영역에 있는 데이터에 다른 프로세스가 접근하는게 쉽기도 해야한다.
- 프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해다 ㅇ프로세스에 메모리 공간을 할당해준다. 이후 어떤 프로
세스건 해당 메모리 영역에 접근이 가능해진다
- 중개자가 없기 때문에 IPC 중 가장 빠르게 작동한다
5. Semaphore
- 다른 IPC 설비들이 대부분 프로세스간 메시지 전송을 목적으로 하는데 반해, semaphore는 프로세스간 데이터를 동기화
하고 보호하는것이 목적이다.
- 한번에 하나의 프로세스만 접근 가능하도록 만들어 주어야 한다.
6. socket
- 프로세스가 데이터를 내보내거나 혹은 데이터를 받기 위한 창구 역할을 하는 것. 즉 프로세스가 데이터를 보내거나 받기
위해서는 반드시 소켓을 열어 소켓에 데이터를 써보내거나 데이터를 읽어들여야 한다.
- 즉 떨어져 있는 두 호스트를 연결해주는 도구로써 인터페이스의 역할을 한다. 따라서 실시간 채팅과 같은 곳에 많이 사용
되는 방식이다.
* 프로토콜, ip주소, 포트넘버가 중요하다.
각각의 IPC의 개념과 특징에 대해 알아보았고,
각 IPC를 리눅스에서 프로그래밍한 연습 예제를 보기 위해선 다음 포스팅을 참고 할 것
[Linux] IPC 예제 ① Shared Memory & Message Queue (tistory.com)
[Linux] IPC 예제 ① Shared Memory & Message Queue
본 포스팅에서는 Shared Memory와 Message Queue 와 관련된 기본 예제를 프로그래밍 한다. IPC 통신과 각각의 방법의 개념에 대해 공부하고 싶다면 아래 포스팅을 참조하자 [Linux] IPC (Inter-Process Communicat..
tjqud531531.tistory.com
[Linux] IPC 예제 ② Semaphore (tistory.com)
[Linux] IPC 예제 ② Semaphore
본 포스팅에서는 Semaphore 와 관련된 기본 예제를 프로그래밍 한다. IPC 통신과 각각의 방법의 개념에 대해 공부하고 싶다면 아래 포스팅을 참조하자 [Linux] IPC (Inter-Process Communication) 기본 개념 (tist
tjqud531531.tistory.com
'LINUX > ABOUT LINUX' 카테고리의 다른 글
[Linux] IPC 예제 ② Semaphore (0) | 2022.10.28 |
---|---|
[Linux] IPC 예제 ① Shared Memory & Message Queue (0) | 2022.10.28 |
[Linux] OCI (Oracle Call Interface) (2) | 2022.10.28 |
[Linux] 내가 이해하기 위한 Pro*c 개념 (0) | 2022.10.27 |
[Linux] Pro*c 환경설정 (0) | 2022.10.27 |