|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Почтовые ящики
Почтовый ящик - это информационная структура, поддерживаемая операционной системой, которая используется для обмена сообщениями между взаимодействующими процессами. Почтовый ящик состоит из головного элемента, в котором находится информация о данном ящике, и из нескольких буферов (гнезд), в которые помещают сообщения. Размер каждого буфера и их количество обычно задаются при образовании почтового ящика. Почтовые ящики являются системными объектами, и для пользования таким объектом необходимо получить его у операционной системы, что осуществляется с помощью соответствующих запросов. Если объем передаваемых данных велик, то эффективнее отправлять в почтовый ящик адрес нахождения данных. Почтовый ящик может быть связан с парой процессов, только с отправителем, только с получателем, или его можно получить из множества почтовых ящиков, которые используют все или несколько процессов. Правила работы почтового ящика зависят от его сложности. В простейшем случае сообщения передаются только в одном направлении. Процесс Р 1 может посылать сообщения до тех пор, пока имеются свободные гнезда. Если все гнезда заполнены, то Р 1 может либо ждать, либо выполнять другую работу и попытаться послать сообщение позже. Аналогично процесс Р 2 может получать сообщения до тех пор, пока имеются заполненные гнезда. Если сообщений нет, то он может либо ждать сообщений, либо продолжать свою работу. Простую схему работы почтового ящика можно усложнять в нескольких направлениях и получать двунаправленные и многовходовые почтовые ящики. Двунаправленный почтовый ящик, связанный с парой процессов, позволяет подтверждать прием сообщений. Если используется множество гнезд, то каждое из них хранит либо сообщение, либо подтверждение. Чтобы гарантировать передачу подтверждений, когда все гнезда заняты, подтверждение на сообщение помещается в то же гнездо, которое было использовано для сообщения, и оно уже не используется для другого сообщения до тех пор, пока подтверждение не будет получено. Из-за того, что некоторые процессы не забрали свои сообщения, связь может быть приостановлена. Если каждое сообщение снабдить пометкой времени, то управляющая программа может периодически уничтожать старые сообщения. Процессы могут быть также остановлены в связи с тем, что другие процессы не смогли послать им сообщения. Если время поступления каждого остановленного процесса в очередь заблокированных процессов регистрируется, то управляющая программа может периодически посылать им пустые сообщения, чтобы они не ждали слишком долго. При работе с почтовыми ящиками используются следующие основные операции. 1 SEND _ MESSAGE (Получатель, Сообщение, Буфер) - переписывает сообщение в буфер, помещает его адрес в переменную Буфер и добавляет буфер к очереди Получатель. 2 WAIT _ MESSAGE (Отправитель, Сообщение, Буфер) - блокирует процесс, выдавший операцию до тех пор, пока в его очереди не появится какое-либо сообщение. Когда процесс устанавливается на процессор, он получает имя отправителя, текст сообщения и адрес буфера. Затем буфер удаляется из очереди, и процесс может записать в него ответ отправителю. 3 SEND _ ANSWER (Результат, Ответ, Буфер) - записывает Ответ в тот Буфер, из которого было получено сообщение, и добавляет буфер к очереди отправителя. Если отправитель ждет ответ, он деблокируется. 4 WAIT _ ANSWER (Результат, Ответ, Буфер) - блокирует процесс, выдавший операцию до тех пор, пока в Буфер не поступит ответ. После того как ответ поступил, и процесс установлен на процессор, Ответ переписывается в память процессу, а буфер освобождается. Результат указывает, является ли ответ пустым. Основные достоинства почтовых ящиков: - процессу не нужно знать о существовании других процессов до тех пор, пока он не получит сообщения от них; - два процесса могут обмениваться более чем одним сообщением за один раз; - операционная система может гарантировать, что никакой процесс не вмешается в «беседу» других процессов; - очереди буферов позволяют процессу-отправителю продолжать работу, не обращая внимания на получателя. Основным недостатком почтовых ящиков является их статический характер: количество буферов для передачи сообщений через почтовый ящик фиксировано.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.) |