Doors es un sistema de comunicación entre procesos para sistemas informáticos Unix . Proporciona una forma de llamada a procedimiento .
Historia
Las puertas fueron desarrolladas por Sun Microsystems como parte fundamental del sistema operativo Spring , y luego se añadieron a Solaris en la versión 2.5 como una interfaz interna no documentada. [ 1 ] Se convirtieron en una característica documentada en Solaris 2.6. Las versiones recientes de Solaris utilizan puertas en muchos lugares, incluyendo nscd(el demonio de caché del servicio de nombres ) y syslog .
En 2003 se lanzó una versión de Doors para Linux , 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 depende en gran medida de los hilos . Está diseñado para un bajo consumo de recursos, y la implementación en Solaris utiliza código ensamblador para lograr la 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 mismo 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 Doors en nombre de los clientes. A diferencia de la mayoría de los sistemas de llamada a procedimientos remotos , cada puerta tiene un único procedimiento de servidor. Un servidor puede "adjuntar" una puerta a un archivo, lo que permite a los clientes conectarse a esa puerta simplemente abriendo dicho archivo. El ls -lcomando mostrará entonces el archivo con un "tipo" de "D" (que no debe confundirse con "d" para un directorio); por ejemplo:
$ ls -l total 9 Drw-r--r-- 1 jmorrison dev 876 8 de diciembre 19:43 myfileLos clientes door_call()invocan el procedimiento del servidor de la puerta, pasando como argumentos una región contigua de memoria y una lista de descriptores de archivo , y reciben como respuesta otra región contigua y una lista de descriptores de archivo. Cualquiera de las regiones puede estar vacía, al igual que cualquiera de las listas. Normalmente, se definen dos C , uno para los datos de entrada y otro para los datos de salida. (Alternativamente, se pueden usar uniones etiquetadas , lo que permite que un procedimiento de puerta proporcione múltiples acciones de forma muy similar a la llamada al sistema ioctl ). Cada descriptor de archivo va acompañado de una palabra de indicadores. El indicador solicita que un descriptor de archivo se cierre en el proceso emisor después de ser duplicado en el proceso receptor. 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 indicadores.structDOOR_RELEASE
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. Normalmente, una puerta de este tipo tomaría como datos de entrada una unión etiquetada , donde cada valor de etiqueta indica un método diferente .
El sistema Doors también proporciona una forma para que los clientes y los servidores obtengan información unos de otros. Por ejemplo, un servidor puede verificar el ID de usuario o de proceso del cliente para implementar el control de acceso .
La biblioteca Doors normalmente crea y gestiona un grupo de subprocesos en el proceso del servidor para manejar las llamadas, pero es posible anular este comportamiento. El sistema Doors no proporciona ningún tipo de sincronización, pero los servidores pueden usar las primitivas de sincronización habituales a nivel de subprocesos. Doors se puede usar para sincronizar el acceso a segmentos de memoria compartida , lo que permite la transferencia de datos de copia única. [ 3 ]
El concepto de Puertas es muy similar a la especificación de la API X/Open XATMI , donde los procesos cliente invocan las funciones expuestas de los procesos servidor: door_call()es análogo a tpcall()en los clientes XATMI, mientras que door_return()es análogo a tpreturn()en los servidores XATMI.
Véase también
Referencias
- ↑ "dsvclockd(1M): Uso de puertas para implementar bloqueos de lectura/escritura entre procesos" . meem simplex . 14 de junio de 2005. Archivado del original el 22 de octubre de 2012. Consultado el 20 de marzo de 2012 .
- ↑ "Namefs y Solaris Doors para Linux" .
- ↑ Nagarajayya, Nagendra; Venkataramanan, SR (febrero de 2001). "Fast Sockets, una biblioteca de comunicación entre procesos" . Sun Developer Network (SDN) [developers.sun.com] . Archivado del original el 3 de agosto de 2008. Consultado el 25 de abril de 2025 .
Enlaces externos
- Páginas de manual de Solaris 10, sección 3: Funciones de la biblioteca en tiempo real ( páginas de manual para las funciones relacionadas con las puertas)
- Software de Sun Microsystems
- Llamada a procedimiento remoto