![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Почтовые ящики относятся к высокоуровневым средствам организации взаимодействий между параллельными процессами. Почтовые ящики предназначены для хранения и передачи сообщений между взаимодействующими процессами. Для хранения посланного, но ещ¨ не полученного сообщения необходимо выделить некоторый буфер в памяти, он будет исполнять роль почтового ящика.
Если процесс Р1 хочет общаться с процессом Р2, то Р1 просит ОС образовать почтовый ящик, который свяжет эти два процесса так, чтобы они могли передавать друг другу сообщения. Для того чтобы послать процессу Р2 какое-то сообщение, процесс Р1 просто помещает это сообщение в почтовый ящик, откуда процесс Р2 может его взять в любое время. При использовании почтового ящика процесс Р2 в конце концов обязательно получит сообщение, когда обратится за ним.
Если объем передаваемых данных велик, то эффективнее не передавать их непосредственно, а отправлять в почтовый ящик сообщение, информирующее процесс получатель о том, где их можно найти (адресная ссылка).
Почтовый ящик может быть связан только с парой процессов (отправитель и получатель), а может быть связан и с большим числом процессов. Почтовый ящик, связанный только с процессом получателем, облегчает посылку сообщений от нескольких процессов в фиксированный пункт назначения. Если почтовый ящик не связан с конкретными процессами, то сообщение должно содержать идентификаторы отправителя и получателя.
Почтовый ящик – это информационная структура, поддерживаемая ОС. Она состоит из головного элемента (заголовка), в котором находится информация о характеристиках почтового ящика, и из нескольких буферов (гн¨зд), в которые помещаются сообщения. Размер каждого гнезда и количество гн¨зд обычно задаются при образовании почтового ящика.
Правила работы почтовых ящиков могут разные в зависимости от их сложности. В простейшем случае сообщения передаются только в одном направлении. Процесс Р1 может посылать сообщения до тех пор, пока имеются свободные гн¨зда. Если все гн¨зда заполнены, то процесс Р1 вынужден ждать когда хотя бы одно из гн¨зд освободится. Аналогично, процесс Р2 может получать сообщения до тех пор, пока имеются заполненные гн¨зда. Если сообщений нет в почтовом ящике, Р2 будет ждать их появлений. Такие почтовые ящики называются однонаправленными. Реализацией однонаправленного почтового ящика является решение задачи “Поставщик-Потребитель”.
Двунаправленный почтовый ящик, связанный с парой процессов, используется для подтверждения сообщений. Если используется множество гн¨зд, то каждое из них может хранить либо сообщение, либо подтверждение (ответ). Чтобы гарантировать передачу подтверждений, когда все гн¨зда заняты, подтверждение на сообщение помещается в то же гнездо, которое использовалось для хранения сообщения, и оно уже не используется для хранения другого сообщения до тех пор, пока подтверждение не будет получено. Из-за того, что некоторые процессы не забрали свои сообщения, связь может быть приостановлена. Если каждое сообщение снабдить пометкой времени появления в почтовом ящике, то системная управляющая процедура может уничтожать старые сообщения и освобождать гн¨зда. Процессы могут быть также остановлены в связи с тем, что другие процессы не смогли послать им сообщения или подтверждения. Если время поступления сообщений в почтовый ящик регистрируется, то управляющая процедура может им периодически посылать процессам пустые сообщения или подтверждения, чтобы они не ждали слишком долго.
При реализации почтовых ящиков используются низкоуровневые средства, например - семафорные примитивы и т. п.
Рассмотрим интерфейс операций с двунаправленным почтовым ящиком, которые могут использовать процессы при сво¨м взаимодействии:
Совокупность представленных операций с двунаправленным почтовым ящиком позволяет организовать различные варианты взаимодействия двух или более процессов. Почтовые ящики удобны для обмена сообщениями, но их затруднительно использовать для решения задачи взаимоисключения при доступе к критическим ресурсам.
Дата публикования: 2014-12-08; Прочитано: 340 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!