next up previous
Next: Requisitos Up: Programas y librerías Previous: Encapsulado

Bloque de multiplexación o bloque B (práctica 2: 2 ptos)

En esta práctica se va a crear el programa muxin, cuyo interfaz con el usuario ya ha sido descrito.

muxin debe leer de 3 descriptores. Al recibir un paquete por uno cualquiera de ellos decrementa el campo maxsaltos del mismo. Si el nuevo valor de maxsaltos es mayor que cero transfiere el paquete al bloque $A$ de su entidad. Esta transferencia se realiza a través de una cola de mensajes, la cual transportará el tráfico multiplexado de los tres descriptores entrantes. Si el valor resultante de maxsaltos es menor o igual que cero descarta silenciosamente el paquete.

La cola de mensajes para la comunicación entre los bloques $A$ y $B$ de una entidad viene determinada por la clave entregada como primer parámetro del programa muxin y como último parámetro de nucleo. Esta cola es creada por el programa nucleo.

La lectura simultánea por los 3 enlaces entrantes se hará bloqueante mediante la llamada al sistema select.

Así pues el programa muxin debe:

El formato que se sugiere para el mensaje con el paquete de datos es el siguiente:

typedef struct msg_data
{
     int	tipo; // Tipo de mensaje MSG_DATA
     union
     {
     	char	buf[sizeof(paquete)]; // El paquete en si
     	paquete paq;
     } data;
} msg_data;

Donde la estructura del paquete es la misma que se transfiere por las pipes y como se ve en la figura 8 es:

typedef struct paquete
{
     unsigned int	id_serv_origen;
     unsigned int	id_serv_destino;
     unsigned int	maxsaltos;
     unsigned int	numbytesdatos;
     unsigned int	id_proc_origen;
     unsigned int	id_proc_destino;
     char	buf[TAM_MDU];
} paquete;



Subsecciones
next up previous
Next: Requisitos Up: Programas y librerías Previous: Encapsulado
Daniel Morato 2000-11-06