운영체제
[OS] Linux IPC 프로세스간 통신에 대해서 알아보자
3o14
2023. 4. 4. 13:40
728x90
반응형
[OS] Linux IPC 프로세스간 통신에 대해서 알아보자
오늘은 리눅스 IPC에 대해서 알아볼겁니당. 운영체제 수업 과제이기도 해서 겸사겸사 자세히 알아보겠습니다 🧐
IPC란?
IPC는 "Inter-Process Communication"의 약어로, 프로세스 간에 데이터를 주고받는 기술이나 방법을 말합니다. IPC는 동일한 컴퓨터 내에서 또는 네트워크 상에서 실행 중인 다른 프로세스와 데이터를 주고받을 수 있게 해줍니다.
IPC를 사용하면 프로세스 간에 데이터를 안전하고 효율적으로 공유하거나 서로 통신할 수 있습니다. 예를 들어, 운영 체제에서 실행 중인 여러 개의 프로세스가 있을 때, IPC를 사용하여 이러한 프로세스 간에 데이터를 전송하거나 공유할 수 있습니다.
IPC의 종류
1) PIPE (익명 PIPE)
2) Named PIPE (FIFO)
3) Message Queue
4) Shared Memory (공유 메모리)
5) Memory Map
6) socket
IPC 별 특징 한 눈에 보기
IPC 종류 | PIPE | Named PIPE | Message Queue |
Shared Memory |
Memory Map | Socket |
사용 시기 | 부모 자식간의 단방향 통신 |
다른 프로세스와의 단방향 통신 | 다른 프로세스와의 단방향 통신 | 다른 프로세스와의 양방향 통신 | 다른 프로세스와의 양방향 통신 | 다른 시스템과의 양방향 통신 |
공유 매개체 | 파일 | 파일 | 메모리 | 메모리 | 파일+메모리 | 소켓 |
통신 단위 | Stream | Stream | 구조체 | 구조체 | 페이지 | Stream |
통신 방향 | 단방향 | 양방향 | 단방향 | 양방향 | 양방향 | 양방향 |
통신 가능 범위 | 동일 시스템 | 동일 시스템 | 동일 시스템 | 동일 시스템 | 동일 시스템 | 동일+외부 시스템 |
각 IPC 자세히 알아보기
🍊 PIPE
- 익명의 PIPE를 통해서 동일한 PPID를 가진 프로세스들 간에 단방향 통신을 지원
- 선입선출(FIFO) 구조
- 생성된 PIPE에 대하여 Write 또는 Read만 가능
- 부모 자식 프로세스간 통신 할때 사용
- 유의사항
- 쌍방 통신을 위해서는 Write용 PIPE하나 Read PIPE하나 씩 만들어야 한다.
- read()와 write()가 기본적으로 block 모드로 작동하기 때문으로 프로세스가 read대기중이라면 read가 끝나기 전에는 write를 할수가 없게 된다.
🍊 Named PIPE
- 이름을 가진 PIPE를 통해 프로세스들 간 양 방향 통신을 지원
- 기본적으로는 단 반향을 많이 사용하지만, 양 방향 통신을 위해서는 O_RDWR mode로 열어야 함
- 서로 다른 프로세스들이 PIPE의 이름만 알면 통신이 가능함
- 선입선출(FIFO) 구조
- 생성된 PIPE에 대하여 Write 또는 Read만 가능
- 연관이 전혀 없는 프로세스간에 통신을 할때
- 유의사항
- 쌍방 통신을 위해서는 Write용 PIPE하나 Read PIPE하나 씩 만들어야 한다.
- read()와 write()가 기본적으로 block 모드로 작동하기 때문으로 프로세스가 read대기중이라면 read가 끝나기 전에는 write를 할수가 없게 된다.
🍊 Message Queue
- 메모리를 사용한 PIPE
- 구조체 기반으로 통신
- 선입선출(FIFO) 구조
- msgtype에 따라 다른 구조체를 가져올수 있음
- 프로세스간 다양한 통신을 할 때 사용 할수 있음
- 유의 사항
- 커널에서 제공하는 Message queue 이기 때문에 EnQueue 하는데 제한이 존재 한다.
🍊 Shared Memeory
- 시스템 상의 공유 메모리를 통해 통신한다.
- 일정한 크기의 메모리를 프로세스간에 공유하는 구조
- 공유 메모리는 커널에서 관리함
- 프로세스간 Read, Write를 모두 필요로 할때 사용됨
- 유의사항
- 프로세스간의 상요할려면 메모리 크키가 동일 해야 한다.
🍊 Memory Map
Memory Map은 공유 메모리 영역을 파일처럼 매핑하여 사용할 수 있습니다. 매핑된 메모리는 물리적인 공간과 매핑되어 있으며, 여러 프로세스가 동시에 접근할 수 있습니다.
- 파일로 대용량 데이터를 공유 할 때 사용
- 빠른 속도로 데이터 전송 가능
- 데이터 전송 과정에서 복사 비용이 발생하지 않음
- 유의 사항
- 메모리 맵 파일은 파일의 크기를 바꿀 수는 없으며 메모리 맵 파일을 사용하기 이전, 또는 이후에만 파일의 크기를 바꿀 수 있다.
- 공유 메모리를 사용할 때에는 주의가 필요하며, 메모리 공유 중 오류 발생시 다른 프로세스나 시스템 자체에 치명적인 영향을 미칠 수 있다.
🍊 Socket
- 네트워크 소켓통신을 시용한 데이터 공유
- 네트워크 소켓을 이용하여 Client - Server 모델 기반으로 데이터 통신
- 원격에서 프로세스간 데이터를 공유 할 때 사용
- 유의 사항
- 네크워크 프로그래밍이 가능해야 한다.
- 데이터 세그먼트 처리를 잘해야한다.
LIST