Doors es una función de comunicación entre procesos para sistemas informáticos Unix. Proporcionan una forma de llamada a procedimiento .
Historia
Las puertas fueron desarrolladas por Sun Microsystems como parte central del sistema operativo Spring y luego se agregaron a Solaris en la versión 2.5 como una interfaz interna no documentada. [1] Se convirtieron en una función documentada en Solaris 2.6. Las versiones recientes de Solaris usan Doors en muchos lugares, incluido nscd (el demonio de caché del servicio de nombres) y syslog .
En 2003 se lanzó un puerto Linux de Doors, pero solo está disponible para la versión 2.4.18. [2]
Descripción general
El subsistema Doors se implementa como una biblioteca de espacio de usuario con cierto soporte del kernel y se basa en gran medida en subprocesos . Está diseñado para una sobrecarga baja y la implementación de Solaris utiliza algún código ensamblador para una máxima eficiencia.
Las puertas son creadas por procesos de servidor (que deben usar subprocesos) y llamadas por procesos de cliente. Es posible que un proceso cree y llame a una puerta. Al crear una puerta, el servidor debe especificar un procedimiento de servidor, que será llamado por la biblioteca de Doors en nombre de los clientes. A diferencia de la mayoría de los sistemas de llamada a procedimientos remotos , cada puerta tiene un solo procedimiento de servidor. Un servidor puede "adjuntar" una puerta a un archivo, lo que permite a los clientes conectarse a esa puerta simplemente abriendo ese archivo. El comando ls -l mostrará el archivo con un 'tipo' de "D" (no debe confundirse con "d" para un directorio), por ejemplo:
Drw-r--r-- 1 jmorrison dev 876 Dec 8 19:43 myfile
Los clientes usan door_call () para invocar el procedimiento del servidor de la puerta, pasando una región contigua de memoria y una lista de descriptores de archivos como argumentos, y recuperando otra región contigua y una lista de descriptores de archivos. Cualquiera de las regiones puede estar vacía, al igual que cualquier lista. Por lo general, se definirán dos estructuras C , una para los datos de entrada y otra para los datos de salida. (Alternativamente, se pueden usar uniones etiquetadas , lo que permite que un procedimiento de puerta proporcione múltiples acciones de la misma manera que la llamada al sistema ioctl ). Cada descriptor de archivo está acompañado por una palabra distintiva. La bandera DOOR_RELEASE solicita que se cierre un descriptor de archivo en el proceso de envío después de ser duplicado en el proceso de recepción. Si se envía un descriptor de archivo que hace referencia a una puerta, el sistema registra las propiedades de esa puerta en la palabra de banderas.
Además de representar un procedimiento, o un grupo de procedimientos, una puerta puede representar un objeto de datos con estado , lo que permite pasar referencias a dichos objetos entre procesos. Una puerta de este tipo normalmente tomaría una unión etiquetada como datos de entrada y cada valor de etiqueta indicaría un método diferente .
El sistema Doors también proporciona una forma para que los clientes y los servidores obtengan información entre ellos. Por ejemplo, un servidor puede verificar el usuario del cliente o la identificación del proceso para implementar el control de acceso .
La biblioteca de Doors normalmente crea y administra un grupo de subprocesos en el proceso del servidor para manejar llamadas, pero es posible anular este comportamiento. El sistema Doors no proporciona ninguna forma de sincronización, pero los servidores pueden utilizar las primitivas de sincronización normales a nivel de subprocesos. Las puertas se pueden utilizar para sincronizar el acceso a los segmentos de memoria compartida , lo que permite la transferencia de datos de una sola copia. [3]
El concepto de Doors es muy similar a la especificación de la API X / Open XATMI , donde los procesos del cliente invocan las funciones expuestas de los procesos del servidor. En los clientes, tpcall () es un análogo de door_call () y, en los procesos del servidor, tpreturn () es un análogo de door_return ().
Ver también
Referencias
- ^ "dsvclockd (1M): uso de puertas para implementar bloqueos de lectores / escritores entre procesos" . meem simplex . 14 de junio de 2005. Archivado desde el original el 22 de octubre de 2012 . Consultado el 20 de marzo de 2012 .
- ^ http://www.rampant.org/doors/index.html
- ^ [ enlace muerto ] http://developers.sun.com/solaris/articles/fastSockets.html
enlaces externos
- Páginas de manual de Solaris 10, sección 3: Funciones de biblioteca en tiempo real ( páginas de manual para las funciones relacionadas con puertas)