Двери (вычислительные) - Doors (computing)

Двери является межпроцессного взаимодействия возможность для Unix Компьютерные системы. Они обеспечивают форму вызов процедуры.

История

Двери были разработаны Sun Microsystems в качестве основной части Операционная система Spring, затем добавлен в Солярис в версии 2.5 как недокументированный внутренний интерфейс.[1] Они стали документированной функцией в Solaris 2.6. Последние версии Solaris используют Doors во многих местах, в том числе NSCDименная служба демон кеширования) и системный журнал.

А Linux Порт Doors был выпущен в 2003 году, но доступен только для версии 2.4.18.[2]

Обзор

Подсистема Doors реализована как пользовательское пространство библиотека с некоторыми ядро поддержку и в значительной степени полагается на потоки. Он рассчитан на низкие накладные расходы, а реализация Solaris использует некоторый ассемблерный код для максимальной эффективности.

Двери создаются серверными процессами (которые должны использовать потоки) и вызываются клиентскими процессами. Один процесс может как создать, так и вызвать дверь. При создании двери сервер должен указать процедуру сервера, которая будет вызываться библиотекой Doors от имени клиентов. В отличие от большинства удаленный вызов процедур систем, каждая дверь имеет только одну серверную процедуру. Сервер может «прикрепить» дверь к файлу, позволяя клиентам подключаться к этой двери, просто открыв этот файл. В ls -l затем команда покажет файл с 'типом' "D" (не путать с "d" для каталога), например:

Drw-r - r-- 1 jmorrison dev 876 8 дек, 19:43 myfile

Клиенты используют door_call () для вызова процедуры сервера двери, передавая непрерывную область памяти и список файловые дескрипторы в качестве аргументов и получение другой непрерывной области и списка файловых дескрипторов. Любой регион может быть пустым, как и любой список. Обычно два C структураs будет определен, один для входных данных и один для выходных данных. (В качестве альтернативы, отмеченные союзы может использоваться, позволяя дверной процедуре выполнять несколько действий почти так же, как ioctl системный вызов.) Каждый файловый дескриптор сопровождается словом флагов. Флаг DOOR_RELEASE требует, чтобы дескриптор файла был закрыт в отправляющем процессе после его дублирования в принимающем процессе. Если отправляется дескриптор файла, который ссылается на дверь, система записывает свойства этой двери в слово флагов.

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

Система Doors также позволяет клиентам и серверам получать информацию друг о друге. Например, сервер может проверить учетные данные клиента или идентификатор процесса, чтобы решить, разрешено ли клиенту что-либо делать.

Библиотека Doors обычно создает и управляет пулом потоков в серверном процессе для обработки вызовов, но это поведение можно изменить. Система Doors не обеспечивает никакой формы синхронизации, но серверы могут использовать обычные примитивы синхронизации на уровне потоков. Двери можно использовать для синхронизации доступа к Общая память сегменты, позволяющие передавать данные по одной копии.[3]

Концепция Doors очень похожа на X / Открыть XATMI Спецификация API, в которой клиентские процессы вызывают открытые функции серверных процессов. В клиентах tpcall () является аналогом door_call (), а в серверных процессах tpreturn () является аналогом door_return ().

Смотрите также

Рекомендации

  1. ^ «dsvclockd (1M): Использование дверей для реализации межпроцессных блокировок чтения / записи». мем симплекс. 14 июня 2005 г. Архивировано с оригинал на 2012-10-22. Получено 2012-03-20.
  2. ^ http://www.rampant.org/doors/index.html
  3. ^ [мертвая ссылка ]http://developers.sun.com/solaris/articles/fastSockets.html

внешняя ссылка