stringtranslate.com

Двери (компьютерные)

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

История

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

Порт 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 .) Каждый файловый дескриптор сопровождается словом flags. Флаг DOOR_RELEASEтребует закрытия дескриптора файла в процессе отправки после его дублирования в процессе приема. Если отправляется файловый дескриптор, ссылающийся на дверь, система записывает свойства этой двери в слово флагов.

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

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

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

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

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

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

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

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