КаталогИндекс раздела
НазадОглавлениеВперед


      

Лабораторная работа N7

Цель работы: освоение очередей сообщений как способа коммуникаций между процессами.

Общие области памяти

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

Системные вызовы Unix/Linux

В ОС Unix/Linux механизм очередей сообщений обеспечивается четырьмя системными вызовами: msgget, msgctl, msgsnd, msgrcv.

Системный вызов msgget создает новую очередь или возвращает идентификатор уже существующей очереди. Как и другие средства взаимодействия между процессами, очереди в Unix/Linux (как и семафоры) не имеют внешних имен. При получении идентификатора очереди процесс пользуется числовым ключом. Гарантированно уникальную очередь можно создать с использованием ключа IPC_PRIVATE. При работе с очередью один из процессов создает очередь и получает ее идентификатор. Этот идентификатор затем передается используется процессом-создателем другим (возможно, дочерним) процессам и используется процессами для выполнения операций с очередью.

Системный вызов msgctl позволяет выполнять управляющие операции над очередью: получать информацию о ее состоянии, изменять права доступа к ней, уничтожать очередь.

Системные вызовы msgsnd и msgrcv выполняют посылку и прием сообщения соответственно. При посылке и приеме сообщений процессы оперируют числовым типом сообщения и текстом сообщения. Тип сообщения может выполнять роль приоритета: процесс может выбирать из очереди сообщения заданного типа или сообщения, имеющие наименьшее число типа. Если выборка по типу не применяется, сообщения выбираются по принципу FIFO.

Внимание!
В процессе отладки программы у Вас могут возникать ситуации, когда программа будет аварийно заканчиваться или прерываться Вами прежде, чем она уничтожит созданные ею очереди. Такие очереди не удаляются в системе автоматически и могут накапливаться в течение многих дней. Накопление таких "забытых" очередей может привести к тому, что будет исчерпан системный лимит на количество очередей, и очередной вызов msgget закончится с ошибкой. Для того, чтобы этого не происходило, регулярно выполняйте процедуру очистки IPC: /home/metod/rmipc. Выполняйте эту процедуру также перед каждым выходом из сеанса.

Список созданных Вами очередей Вы можете увидеть, выполнив команду: ipcs -q.

Постановка задачи

Для заданной в Вашем варианте индивидуального задания предметной области разработайте программную модель ситуации, включающей в себя следующее:

Отчет по лабораторной работе

Отчет по лабораторной работе должен содержать:

Пример выполнения работы N7 приведен здесь.


Назад ОглавлениеВперед
КаталогИндекс раздела