stringtranslate.com

Двери (вычислительная техника)

Doors — это средство межпроцессного взаимодействия для компьютерных систем Unix . Они предоставляют форму вызова процедур .

История

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

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

Обзор

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

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

$ ls  -l всего 9 Drw-r--r-- 1 jmorrison dev 876 8 дек 19:43 myfile

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

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

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

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

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

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

Ссылки

  1. ^ "dsvclockd(1M): Использование дверей для реализации межпроцессных блокировок чтения/записи". meem simplex . 14 июня 2005 г. Архивировано из оригинала 22.10.2012 . Получено 20.03.2012 .
  2. ^ «Namefs и двери Solaris для Linux».
  3. ^ [ мертвая ссылка ] http://developers.sun.com/solaris/articles/fastSockets.html

Внешние ссылки