1. Son un tipo de buffer a travez del cual las tareas y los ISR pueden mandar y recibir mensajes para comunicarse y sincronizarse con la información.
2. Cuando un mensaje es creado se le asigna un control de bloque de mensaje (QCB), un nombre, un ID unico, memoria en el buffer, un largo, un largo de máximo de mensaje y una o más lista de espera de tareas.
3. Estados de los mensajes de cola
3.1. Cuando una cola de mensajes es creada se encuentra vacía. Funciona como una FSM, cuando recibe un mensaje este se queda en la lista de espera, hasta que la tarea solicite el mensaje, haciendo que la cola de mensajes quede vacía de nuevo.
4. Contenido de los mensajes de cola
4.1. Cuando se necesita enviar un mensaje más que el máximo permitido se puede enviar un puntero a la información, en vez de la información en si, lo cual ayuda a mejorar la eficiencia y el uso de memoria.
4.2. Cuando una tarea envía un mensaje a otra, provoca que el mensaje se copie 2 veces. La primera cuando es enviado de la dirección de memoria de la tarea a la dirección de memoria de la cola de mensajes y la segunda cuando es enviado de la memoria de la cola de mensajes a la memoria de la tarea que recibe el mensaje.
5. Almacenamiento de los mensajes de cola
5.1. System Pools
5.1.1. Se utiliza cuando los mensajes a enviar no utilizan el largo máximo de capacidad del mensaje, lo cual ayuda a no usar tanta memoria. En caso de usar mensajes muy largo se pueden producir errores al enviar el mensaje.
5.2. Buffers Privados
5.2.1. Al usar buffers se requiere de más memoria para asegurar que la capacidad máxima de cada mensaje se enviara sin problemas, lo cual permite utilizar mensajes más largos que los del system pool.
6. Operaciones de los mensajes de cola
6.1. Crear y borrar colas de mensajes
6.1.1. Al crear colas de mensajes se define la longitad máxima de cada mensaje, el largo de la cola de mensajes y el orden de espera de las tareas una vez que estan en espera. El borrar una cola de mensajes desbloquea todas las tareas que esten en espera.
6.2. Enviar mensajes
6.2.1. Al enviar mensajes las colas de mensajes por lo general utilizan un orden de prioridad FIFO. En caso de ser urgen el envio del mensaje este se cola en la cabeza de la cola. Los mensajes pueden ser enviados con diferentes prioridades de bloqueo como lo son, no bloquearlo, bloque con un tiempo finito y bloque permanente.
6.3. Recibir mensajes
6.3.1. Al igual que enviar mensajes, al recibirlos estos puedn tener un prioridades de bloqueo como lo son, no bloquearlo, bloque con un tiempo finito y bloque permanente. Al momento de recibir un mensaje una tarea lo puede leer de 2 formas, destructiva y no destructiva. La destructiva borra del mensaje de la cola mientras que la no destructiva lo lee sin borrarlo.
6.4. Obtener la información de las colas de mensajes
6.4.1. Permite obtener diferente información de las colas de mensaje como por ejemplo: Id, el tipo de prioridad usado para bloquear mensajes y el número de mensajes en la cola.
7. Usos de los mensajes de cola
7.1. Non-interlocked
7.1.1. Es la forma más simple de enviar un mensaje. Una tarea envía un mensaje a una cola de mensajes y esta se lo envía a otra tarea. Las tareas no tienen que estar sincronizadas.
7.2. Interlocked, unilateral
7.2.1. Es cuando la tarea que envío el mensaje espera un mensaje de confirmación de que el mensaje se recibio correctamente, en caso de que no se recibiera, se puede reenviar el mensaje haciendo que la comunicación sea más confiable.
7.3. Interlocked, bilateral
7.3.1. Este tipo de comunicación se utiliza cuando se necesita que el flujo de información sea en ambas direcciones, como por ejemplo para diseñar un sistema cliente/servidor.
7.4. Broadcast
7.4.1. Este tipo de comunicación se utiliza cuando se desea enviar el mismo mensaje a más de una tarea.