Message Queues
6-22
Since there are three processors in the system, there must be an array of
three transports on each processor.
This example uses MSGQ_NOTRANSPORT for the array locations that
correspond to the current processor. In addition, if two separate processors
do not communicate in your system, you must use the
MSGQ_NOTRANSPORT in the appropriate locations in the transport arrays.
The MSGQ module describes the standard interface functions that transports
must provide. The transport interface functions are called by the MSGQ
functions and not by user applications.
Note: This document does not discuss how to write a transport. Information
about designing allocators and transports will be provided in a future
document.
The protocol between transports is transport-specific, but must have the
ability to locate message queues and send messages across the physical
boundary. The following figure shows an example of sending a message to a
message queue on another processor.
Figure 6-7. Remote Transport
Processor Transport Array
Processor 0 [0]: MSGQ_NOTRANSPORT transport
[1]: transport to processor 1 based on shared memory
[2]: transport to processor 2 based on HPI
Processor 1 [0]: transport to processor 0 based on shared memory
[1]: MSGQ_NOTRANSPORT transport
[2]: transport to processor 2 based on DMA
Processor 2 [0]: transport to processor 0 based on HPI
[1]: transport to processor 1 based on DMA
[2]: MSGQ_NOTRANSPORT transport
MSGQ APIs
Msg Repositories
MSGQ APIs
Msg Repositories
Processor 1
MSGQ_get()
Processor 0
physical link
Transport
Allocator
. . .
Allocator
Transport
Allocator
. . .
Allocator
MSGQ_put()