операции: создание, открытие, запись/чтение сообщения, закрытие, удаление.
В некоторых системах поддерживаются дополнительные служебные
функции, например счетчик сообщений в почтовом ящике или чтение
сообщения без удаления его из ящика.
Почтовые ящики размещаются в оперативной памяти или на диске и
существуют лишь до выключения питания или перезагрузки. Если они физи-
чески расположены на диске, то считаются временными файлами, уничто-
жаемыми после выключения системы. Почтовые ящики не имеют имен по-
добно реальным файлам - при создании им присваиваются логические иден-
тификаторы, которые используются процессами при обращении.
Для создания почтового ящика операционная система определяет ука-
затели на область памяти для операций чтения/записи и соответствующие
переменные для защиты доступа. Основными методами реализации являются
либо буфер, размер которого задается при создании ящика, либо связанный
список, который, в принципе, не накладывает никаких ограничений на число
сообщений в почтовом ящике.
В наиболее распространенных реализациях процесс, посылающий со-
общение, записывает его в почтовый ящик с помощью оператора, похожего
на оператор записи в файл
put_mailbox ( # 1, message)
Аналогично, для получения сообщения процесс считывает его из поч-
тового ящика с помощью оператора вида
get _mailbox (# 1, message)
Запись сообщения в почтовый ящик означает, что оно просто копиру-
ется в указанный почтовый ящик. Может случиться, что в почтовом ящике не
хватает места для хранения нового сообщения, то есть почтовый ящик либо
слишком мал, либо хранящиеся в нем сообщения еще не прочитаны.
При чтении из почтового ящика самое старое сообщение
пересылается в принимающую структуру данных и удаляется из ящика.
Почтовый ящик -это пример классической очереди, организованной по
принципу FIFO. Операция чтения из пустого ящика приводит к различным
результатам в зависимости от способа реализации — либо возвращается
пустая строка (нулевой длины), либо операция чтения блокируется до
получения сообщения. В последнем случае, чтобы избежать нежелательной
остановки процесса, необходимо предварительно проверить число
сообщений, имеющихся в данный момент в ящике.
3. Каналы
Канал (pipe) представляет собой средство обмена данными между дву-
мя процессами, из которых один записывает, а другой считывает символы.
Этот механизм был первоначально разработан для среды UNIX как средство
перенаправления входа и выхода процесса. В ОС UNIX физические устрой-
ства ввода/вывода рассматривают как файлы, а каждая программа имеет
стандартное устройство ввода (вход) и стандартное устройство вывода
(выход), клавиатуру и экран монитора - можно переопределить, например, с
помощью файлов. Когда выход одной программы перенаправляется на вход