Cuando se emplea el portal como mecanismo para enviar un mensaje de un shuttle a otro, la invocación del portal causa la ejecución (de modo asíncrono) de un manejador en el contexto del servidor.
Para permitir este uso de los portales se ha incluido junto con el manejador (contador de programa e información para obtención de pila) un identificador de shuttle que identifica el shuttle en que deberá ejecutar dicho manejador. El núcleo salvará el estado de dicho shuttle e instalará el contexto necesario para la ejecución asíncrona del manejador. Si un portal no tiene instalado este identificador de shuttle no será factible su uso para envío asíncrono de mensajes.
El algoritmo de envío de mensajes en este caso es sencillo:
sys_portal_send.
(mediante un upcall) de
tal modo que se reenvíe la petición al nodo en que se encuentra el
portal. Si es local se continúa.
needs:
upcall (la
rutina que realiza upcalls) en la pila de kernel del shuttle destino
y se fija su estado de tal modo que cuando éste ejecute realice
inmediatamente un upcall. El kernel copia las palabras que
constituyen el mensaje de tal modo que la rutina upcall (en
el kernel del shuttle destino) pueda transferirlas hasta el
manejador del portal (empleando sus parámetros).
Los parámetros de upcall situados en el registro de
activación creado para ella están dispuestos de tal modo que
upcall realizará un upcall al manejador del portal tan pronto
como el shuttle destino ejecute.
La dirección de retorno del registro de activación preparado para
upcall está dispuesta de tal modo que se salte a una rutina
que restaurará el estado del shuttle destino a la situación en que
este se encontrase antes de quedar bloqueado (sea ésta la ejecución
dentro del kernel o fuera del mismo).
sys_portal_send. El resto del envío procede en el contexto
del shuttle destino, de tal modo que el origen puede continuar su
tarea.
instalado en el punto anterior, que ejecuta cuando el
manejador retorna devolverá el control al El shuttle que invoca el portal recupera el control en el punto 8 y puede proseguir su ejecución. La ejecución del manejador aguardará hasta el momento en que el shuttle destino disponga de un quantum para ejecutar.
Si el mensaje precisase de respuesta el remitente puede incluir un identificador de portal como parte del mensaje y bloquearse justo tras el envío. El destinatario empleará dicho identificar para enviar una respuesta al cliente; como efecto lateral de la recepción éste quedará desbloqueado.
Por último, conviene recordar que todas las operaciones efectuadas
sobre shuttles se efectúan empleando los servicios del servidor de
shuttles. Así por ejemplo, para bloquear al shuttle destino o cederle
el resto del quantum de procesador de que disponemos
empleamos las rutinas shtl_switch y shtl_setProp,
suministradas por el servidor de shuttles.