next up previous
Next: Liberación de un punto Up: Bloque de control y Previous: Solicitud de punto de

Paquetes de datos para un servidor

Con este esquema el servidor consigue reservar un punto de acceso. Sin embargo hemos visto que no podemos emplear la cola de mensajes principal para enviar los datos al servidor dado. Una posible solución es emplear la cola auxiliar que se crea en el proceso de reserva para enviar los datos desde la entidad al programa. Sin embargo destruiremos esta cola al recibir el mensaje de aceptación y adoptaremos una solución diferente. Para la comunicación desde la entidad de comunicación al servidor vamos a emplear una zona de memoria compartida entre el proceso que implementa las funciones del bloque $A$ y el proceso servidor (figura 11).

Figura 11: Comunicación a través de memoria compartida
\begin{figure}\begin{center}
\epsfig{file=./figuras/fig12.eps,width=14cm}\end{center}\end{figure}

En esta zona de memoria podremos almacenar varios paquetes simultáneamente y emplearemos una estrategia de buffer circular para ir colocando y extrayendo los paquetes. Englobaremos esta zona de memoria compartida en una sección crítica mediante el empleo de semáforos. Este implementación nos ahorrará las copias de datos que se realizarían en el caso de emplear una cola de mensajes, donde el mensaje ha de pasar al kernel (una copia) y del espacio del kernel al del otro proceso (segunda copia), por lo que obtendremos mejores prestaciones.

Figura 12: Empleo de un buffer circular
\begin{figure}\begin{center}
\epsfig{file=./figuras/fig11.eps,width=14cm}\end{center}\end{figure}

Para el control de esta zona de memoria (en realidad para cada zona de memoria por separado, una por cada punto de acceso) se emplearán dos semáforos multivaluados. Uno marcará el número de paquetes sin procesar (sem1_paquetes) que existen en el buffer y el otro (sem2_huecos) el número de huecos libres en el mismo. Así, para colocar un nuevo paquete, el bloque $A$ deberá realizar los siguientes pasos:

Puede suceder que la aplicación no atienda a la llegada de nuevos paquetes por un punto de acceso y se llene el buffer circular del mismo. En tal caso la operación $P$ ejecutada en el paso $1$ podría bloquear al proceso que implementa el bloque $A$ de forma indefinida. Para evitar esto se realizará la operación $P$ sobre sem1 de forma no bloqueante. Esto quiere decir que si no puede decrementar en 1 el valor del semáforo, en vez de detener al proceso a la espera de poder devolverá un error en la operación. Ante este error, debido al llenado del buffer, el bloque $A$ procederá a descartar silenciosamente el paquete de datos que intentaba entregar a la aplicación.

Como vemos, al reservar un nuevo punto de acceso hace falta crear una zona de memoria compartida y 2 semáforos. Esta tarea la realiza el bloque $A$ al comprobar que el valor de punto de acceso no está siendo utilizado por otra aplicación. Para que el proceso servidor sepa qué zona de memoria y semáforos se empleará en la comunicación se envían sus claves dentro del mensaje de respuesta de aceptación de reserva del punto de acceso.


next up previous
Next: Liberación de un punto Up: Bloque de control y Previous: Solicitud de punto de
Daniel Morato 2000-11-06