메시지 큐

메시지 큐는 단일 CPU 내의 독립적이지만 협력하는 태스크(즉, 활성 클래스)가 서로 통신할 수 있도록 하는 프로세스 간 통신(IPC) 메커니즘입니다.

활성 클래스는 IBM® Rational® Rhapsody®에서 태스크로 간주됩니다.

메시지 큐는 비공유 메모리 환경에서 사용되는 버퍼로, 태스크는 공유 변수에 액세스하는 것이 아니라 서로에 메시지를 전달하여 통신합니다. 태스크는 버퍼를 구현하는 OMOSMessageQueue와 공통 버퍼 풀을 공유합니다. 메시지 큐는 다른 스레드의 동시 액세스로부터 보호하는 경계가 없는 선입선출(FIFO) 큐입니다.

이벤트는 비동기식입니다. 클래스가 대상 반응 클래스로 직접 이벤트를 보내는 것이 아니라 다른 클래스로 이벤트를 보내는 경우, 클래스는 이벤트를 운영 체제 메시지 큐에 전달하고 대상 클래스는 처리할 준비가 되었을 때 메시지 큐의 헤더에서 이벤트를 검색합니다. 동기 이벤트는 대신 트리거된 오퍼레이션을 사용하여 전달될 수 있습니다.

많은 태스크가 큐에 메시지를 쓸 수 있지만 한 번에 하나만 큐에서 메시지를 읽을 수 있습니다. 리더는 처리할 메시지가 있을 때까지 메시지 큐에서 기다립니다. 메시지는 어떤 크기도 가능합니다.

서로 통신할 프로세스는 어떻게든 링크해야 합니다. 통신 링크는 오브젝트 모델 다이어그램에서 클래스 사이에 그려지는 연관 선 양식과 같이 관계로 구성됩니다. 링크는 단방향 또는 양방향(대칭적)이 될 수 있습니다. 클래스 A에서 클래스 B로의 단방향 링크의 경우, 클래스 A는 메시지를 클래스 B로 보낼 수 있지만 클래스 B는 클래스 A로 메시지를 보낼 수 없습니다. 양방향 링크에서는 두 클래스 모두 서로 메시지를 보낼 수 있습니다. 메시지 큐는 링크에 첨부되며 메시지의 송신자 및 수신자가 서로 독립적으로 자체의 고유 처리 활동을 계속할 수 있도록 합니다.

메모리가 보호되는 운영 체제에서 운영 체제 자체가 직접 호출을 지원하는 경우 하나의 활성 클래스가 다른 활성 클래스의 오퍼레이션을 호출할 수 있습니다(활성 클래스 사이에 연관 관계가 있는 경우). 공유 메모리가 있는 운영 체제의 경우 제품은 운영 체제 메시징을 사용하여 이벤트를 전달합니다. 메모리 보호에서 직접 함수 호출이 지원되는지 여부는 Rational Rhapsody 프레임워크가 아니라 운영 체제 자체에 달려 있습니다.

Rational Rhapsody 애플리케이션에서 BaseNumberOfInstances 특성(CG::Event 아래에 있는)은 이벤트에 대해 할당된 메모리 풀의 초기 크기를 지정합니다. 이 풀은 프로그램 초기화 시 동적으로 할당됩니다. AdditionalNumberOfInstances 특성(CG::Event 아래에 있는)은 초기 풀이 가득 차는 경우 런타임 중에 할당해야 하는 추가 메모리의 크기를 지정합니다. 추가 메모리 할당은 힙에서 수행되며 초기 메모리 풀의 재배열을 포함합니다.


피드백