Двери (компьютерные)
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Doors — это средство межпроцессного взаимодействия для Unix компьютерных систем . Они предоставляют форму вызова процедуры .
История
[ редактировать ]Двери были разработаны 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
total 9
Drw-r--r-- 1 jmorrison dev 876 Dec 8 19:43 myfile
Клиенты используют door_call()
для вызова процедуры сервера двери, передавая в качестве аргументов непрерывную область памяти и список дескрипторов файлов и получая обратно другую непрерывную область и список дескрипторов файлов. Любой регион может быть пустым, как и любой список. Обычно два С. struct
будут определены: один для входных данных и один для выходных данных. (В качестве альтернативы можно использовать теговые объединения , позволяющие дверной процедуре выполнять несколько действий почти так же, как системный вызов ioctl .) Каждый файловый дескриптор сопровождается словом флагов. DOOR_RELEASE
флаг запрашивает закрытие дескриптора файла в процессе отправки после его дублирования в процессе приема. Если отправляется файловый дескриптор, ссылающийся на дверь, система записывает свойства этой двери в слово флагов.
Помимо представления процедуры или группы процедур, дверь может представлять объект данных с состоянием , что позволяет передавать ссылки на такие объекты между процессами. Такая дверь обычно принимает объединение тегов в качестве входных данных, где каждое значение тега обозначает отдельный метод .
Система Doors также предоставляет клиентам и серверам возможность получать информацию друг о друге. Например, сервер может проверить идентификатор пользователя или процесса клиента, чтобы реализовать контроль доступа .
Библиотека Doors обычно создает и управляет пулом потоков в серверном процессе для обработки вызовов, но это поведение можно переопределить. Система Doors не обеспечивает никакой формы синхронизации, но серверы могут использовать обычные примитивы синхронизации на уровне потоков. Двери можно использовать для синхронизации доступа к сегментам общей памяти , что позволяет передавать данные в одном экземпляре. [3]
Концепция Doors очень похожа на спецификацию X/Open XATMI API, где клиентские процессы вызывают открытые функции серверных процессов: door_call()
аналогичен tpcall()
в клиентах XATMI, в то время как door_return()
аналогичен tpreturn()
на серверах Хатми.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «dsvclockd(1M): использование дверей для реализации межпроцессных блокировок чтения/записи» . мне симплекс . 14 июня 2005 г. Архивировано из оригинала 22 октября 2012 г. Проверено 20 марта 2012 г.
- ^ «Namefs и Solaris Doors для Linux» .
- ^ [ мертвая ссылка ] http://developers.sun.com/solaris/articles/fastSockets.html
Внешние ссылки
[ редактировать ]- Страницы руководства Solaris 10, раздел 3: Функции библиотеки реального времени ( страницы руководства по функциям, связанным с дверями)