next up previous contents
Next: Gestión de Memoria Virtual Up: Implementación en el Intel Previous: Eventos: traps e interrupciones

Upcalls, mensajes y PCTs

Dado que no se emplea ninguna peculiaridad de la arquitectura Intel x86, la implementación de upcalls, envío de mensajes y PCTs se describió casi por completo en los apartados que exponían el funcionamiento detallado de las mismas de forma genérica. Quedan no obstante algunos detalles curiosos que precisan de código para su exposición. Hemos preferido aplazarlos para este apartado, dado que el lector que esté leyéndola estará seguramente interesado en ellos--aunque no sean precisos para la comprensión de la implementación.

En primer lugar, tenemos la instalación de registros de activación en el shuttle destino durante el envío de mensajes. Esto se hace consultando el ultimo juego de registros de kernel de dicho shuttle (mediante shtl_kregref). Empleándolo podemos salvarlo y alterarlo. El fragmento de código que realiza tal operación es como podemos ver en la figura 3.23.

  figure1874
Figure 3.23: Salvando el kernel de otro shuttle

En realidad no estamos haciendo otra cosa que lo que hace la rutina ksetjmp durante un upcall para salvar el estado del kernel. La diferencia, es que no estamos salvando nuestro estado, por lo que no nos sirve de nada la mencionada rutina.

Prosiguiendo con el envío de mensajes, otro punto delicado es la instalación del registro de activación para upcall (la rutina que implementa un upcall) en la pila de kernel del shuttle destino una vez que hemos salvado su estado. De nuevo, lo construimos a mano tal y como se ve en la figura 3.24. Puede verse como éste es el punto en que el mensaje se transfiere del remitente al destinatario. Una vez construido, se altera el estado del shuttle destino para que ejecute el manejador.

  figure1882
Figure: Construcción del registro de activación para upcall.

La parte crítica de la realización de un upcall es la llamada a área de usuario. Ésta se realiza como puede verse en la figura 3.25, la realiza la rutina prtl_upcall_up una vez que upcall ha salvado el estado mediante ksetjmp.

  figure1889
Figure 3.25: Llamada de kernel a usuario.


next up previous contents
Next: Gestión de Memoria Virtual Up: Implementación en el Intel Previous: Eventos: traps e interrupciones

Francisco J. Ballesteros
Fri Dec 19 17:18:03 MET 1997