메시지 큐(Message Queue)
프로세스 간 통신(IPC)의 메시지 큐(Message Queue)는 프로세스 간에 데이터를 교환하는 메커니즘이다.
메시지 큐는 커널 내에 저장된 메시지의 연결 리스트로, 고유한 식별자로 구분된다.
이는 프로세스들이 비동기적으로 통신할 수 있게 해주는 IPC 메커니즘이다.
메시지 크기 제한과 시스템 리소스 사용 등의 단점도 고려해야 한다.
적절한 사용 시나리오를 파악하고 효과적으로 활용하는 것이 중요하다.
메시지 큐의 특징
- 커널 관리: 메시지 큐는 커널에 의해 관리되어 안정성이 높고 동기화가 용이하다.
- FIFO 순서: 메시지는 일반적으로 선입선출(FIFO) 순서로 처리된다.
- 비동기 통신: 송신 프로세스와 수신 프로세스가 동시에 활성화될 필요가 없다.
- 메시지 구조: 각 메시지는 타입 필드, 길이, 실제 데이터로 구성된다.
- 프로세스 분리: 메시지 큐를 사용하면 프로세스들이 서로 직접 연결되지 않아도 된다.
메시지 큐의 주요 시스템 호출
- ftok(): 고유한 키를 생성한다.
- msgget(): 메시지 큐를 생성하거나 기존 큐의 식별자를 반환한다.
- msgsnd(): 메시지를 큐에 추가한다.
- msgrcv(): 큐에서 메시지를 검색한다.
- msgctl(): 큐에 대한 다양한 작업을 수행한다.
메시지 큐 사용 방법
메시지 큐 생성:
- msgget() 시스템 콜을 사용하여 새로운 메시지 큐를 생성하거나 기존 큐에 접근한다.
- 큐 생성 시 접근 권한을 지정할 수 있어 보안을 관리할 수 있다.
메시지 송신:
- msgsnd() 시스템 콜을 사용하여 메시지를 큐에 추가한다.
- 메시지는 타입과 데이터로 구성된다.
- 큐가 가득 찬 경우, 송신자는 대기하거나 에러를 반환받을 수 있다.
메시지 수신:
- msgrcv() 시스템 콜을 사용하여 메시지를 큐에서 가져온다.
- 특정 타입의 메시지만 선택적으로 수신할 수 있다.
- 큐가 비어있는 경우, 수신자는 대기하거나 에러를 반환받을 수 있다.
메시지 큐의 장단점
장점
- 커널 관리로 인한 높은 안정성
- 비동기 통신 가능
- 프로세스 간 느슨한 결합 제공
단점
- 메시지 크기 제한
- 시스템 리소스 사용
- 복잡한 에러 처리 필요