Правильное использование очереди сообщений в POSIX - PullRequest
3 голосов
/ 13 мая 2011

Я совершенно сбит с толку использованием очередей сообщений в ОС реального времени.Кажется, что в приведенном коде очереди сообщений используются до конца: даже передача переменных другому объекту класса выполняется через MQ.У меня всегда есть концепция MQ, используемая в IPC.Вопрос: что такое правильное использование очереди сообщений?

Ответы [ 2 ]

7 голосов
/ 13 мая 2011

В средах ОС реального времени вы часто сталкиваетесь с проблемой, заключающейся в том, что вы должны гарантировать выполнение кода по фиксированному графику. Например. у вас может быть функция, которая вызывается точно каждые 10 миллисекунд. Не раньше, не позже.

Чтобы гарантировать такие жесткие временные ограничения, вы должны написать код, который не должен блокировать критичный по времени код ни при каких обстоятельствах.

Здесь нельзя использовать примитивы синхронизации потоков posix из. Вы никогда не должны блокировать мьютекс или создавать семафор из кода, критичного ко времени, потому что другой процесс / поток уже может заблокировать его. Однако часто вам разрешается разблокировать какой-либо другой поток из кода, критичного по времени (например, выпустить семафор нормально).

В таких средах очереди сообщений являются хорошим выбором для обмена данными, поскольку они предлагают чистый способ передачи данных из одного потока в другой без какой-либо блокировки.

Использование очередей для установки переменных может показаться излишним, но это очень хороший дизайн программного обеспечения. Если вы делаете это таким образом, у вас есть четко определенный интерфейс с вашим критичным по времени кодом.

Также это помогает писать детерминированный код, потому что вы никогда не столкнетесь с проблемой условий гонки. Если вы устанавливаете переменные через очереди сообщений, вы можете быть уверены, что критичный по времени код видит сообщения в том же порядке, в котором они были отправлены. При смешивании прямого доступа к памяти и сообщениям вы не можете гарантировать это.

0 голосов
/ 13 мая 2011

Очереди сообщений преимущественно используются как Механизм IPC , когда требуется обмен данными между двумя различными процессами.Однако иногда очереди сообщений также используются для переключения контекста потока.Например:
Вы регистрируете некоторый обратный вызов на программном уровне, который находится поверх драйвера.Обратный вызов возвращается вам в контексте драйвера.Это нить, созданная водителем.Теперь вы не можете захватить эту нить драйвера, выполнив большую обработку в ней.Таким образом, можно добавить данные, возвращенные при обратном вызове, в очередь сообщений, в которой заблокированы потоки приложений для выполнения обработки данных.

Я не понимаю, почему следует использовать очереди сообщений для замены обычных вызовов функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...