Menu

Documentacion MPI

Juan
Attachments
DiagramaProcesos2.png (26003 bytes)
  • Lista de procesos:

  • Proceso MPIDispacher: Este proceso se encarga registrar los pedidos de mensajes que provengan del Modelo de Negocio. Para llevar al cabo esto utilizará una cola de mensajes por donde recibe las peticiones de registro por un determinado origen y un tipo de mensajes, en ella misma responde si pudo realizar la operacion o hubo algun problema.

  • Proceso MPISender: Este es el encargado de enviar los mensajes provenientes de los MPIEndPoints a traves de la API de comunicacion. Para comunicarse con este proceso habra una unica cola en donde cada MPIEndpoint colocara el mensaje a enviar y el proceso MPISender tomara cada uno de los mensajes y los intentará enviar, por la misma cola devolvera el resultado de la operacion.

  • Proceso MPIReceiver: Este es el proceso encargado de leer los mensajes que llegan a la API de comunicaciones, y en base a la tabla armada por el proceso MPIDispacher repartir los mensajes a las colas que corresponden para que el MPIEndPoint correspondiente lo lea.

  • Procesos extra:

Cada proceso del modelo de negocios que necesite utilizar el MPI deberá crear una instancia del MPI y luego operar obteniendo nuevos MPIEndPoints para enviar y recibir mensajes.

Diagrama de procesos

-------------------------------------------------------------------------------

  • Comunicacion entre procesos por cola administrativa:

La estructura que se transmitira sera la siguiente:

typedef struct MPIQueueAdminMessage{
    long mtype;
    long emisor;
    int pedido;
    int resultadoOperacion;
    int tipoDeMensaje;
    char emisor[MAX_NAME];
};

Los mensajes a enviar seran los siguientes:

  • Pedido de registracion: Se lo envia el MPIEndPoint al MPIDispatcher para que lo registre para recibir ciertos mensajes determinados.
    Los datos necesarios son:

    • PID del proceso que solicita para luego poder responder
    • El timo de pedido que hace (registrar o desregistrar)
    • La direccion de host de los mensajes que quiere recibir
    • El tipo de mensajes que quiere recibir
  • Respuesta de registracion: Se lo envia el MPIDispatcher al MPIEndPoint que realizao la peticion. La respuesta puede ser REGISTRATION_SUCCESSFUL en caso de que se pueda realizar la opreacion o REGISTRATION_FAIL en caso de que ya halla otro MPIEndPoint con esos datos registrado.
    Los datos necesarios son

    • El resultado de la operacion
    • La clave a utilizar para crear la cola
  • Pedido de des registracion: Se lo envia el MPIEndPoint al MPIDispatcher para que elimine la registracion del proceso con ese tipo particular de mensajes.
    Los datos necesarios son:

    • PID del proceso que solicita para luego poder responder
    • El timo de pedido que hace (registrar o desregistrar)
    • La direccion de host de los mensajes
    • El tipo de mensajes
  • Respuesta de des registracion: Se lo envia el MPIDispatcher al MPIEndPoint que realizao la peticion.
    Los datos necesarios son

    • El resultado de la operacion
  • Agregado de cola: Se lo envia el MPIDispatcher al MPIReceiver para que este abra la cola nueva que se agrega para colocar los mensajes, los datos necesarios son:

    • El timo de pedido que hace (registrar o desregistrar)
    • La direccion de host de los mensajes que quiere recibir
    • El tipo de mensajes que quiere recibir
    • La clave a utilizar para crear la cola
  • Quitado de cola: Se lo envia el MPIDispatcher al MPIReceiver para que este cierre una cola luego de que un MPIEndPoint :

    • El timo de pedido que hace (registrar o desregistrar)
    • La direccion de host de los mensajes que quiere recibir
    • El tipo de mensajes que quiere recibir

  • Comunicacion entre los procesos por cola de recepcion

Esta es la cola especializada para cada MPIEndPoint donde se colocaran los mensajes que lleguen desde la API de comunicacion

La estructura que se transmitira sera la siguiente:

typedef struct MPIQueueMessage{
    long mtype;
    int tipo;
    char emisor[MAX_NAME]; 
    char receptor[MAX_NAME]; 
    char mensaje;
};

Estos mensajes serán en un solo sentido, es el MPIReceiver el que los colocara en la cola para que el MPIEndPoint los quite.


  • Comunicacion por la cola de envio

Por esta cola viajan los mensajes desde los MPIEndPoint hacia el MPISender el cual los envia utilizando la API de comunicacion.

Los mensajes que viajan desde el MPIEndPoint hacia el MPISender tienen la misma estructura que los anteriores.
El MPISender envia una respuesta al EndPoint con el resultado de la operacion, estos mensajes utilizan la estructura de los mensajes administrativos.

-------------------------------------------------------------------------------

Memoria compartida:

Se utilizara memoria compartida para guardar los datos compartidos entre los procesos:

  • La tabla con las "reglas de ruteo" para los mensajes
  • El nombre obtenido desde la API de comunicacion
  • La cantidad de MPIs instanciados

Cada elemento de la tabla tendra:

  • El tipo de mensaje que recibe
  • El origen del mensaje que filtra
  • El FD de la cola de Destino (solo utilizado por el proceso MPIReceiver)
  • Si la cola fue inicializada (inicializado por el proceso MPIReceiver)

-------------------------------------------------------------------------------

Semaforos:

Se utilizara un semaforo para el acceso a la memoria compartida para garantizar la exclusion mutua entre los procesos

Habrá un semaforo que le servira al proceso de modelo de negocios como barrera para saber cuando fue inicializada toda la interfaz.

Un ultimo semaforo que tambien sirve como barrera para el dispatcher, este le permitira continuar cuando el MPISender y el MPIReceiver se hayan inicializado

-------------------------------------------------------------------------------

Seniales
Se utilizaran seniales para indicarle a los procesos MPIDispacher, MPISender y MPIReceiver que deben finalizar sus actividades.

El MPIDispacher le enviara seniales al MPIReceiver para indicarle que hay nuevos mensajes dirigidos para el en la cola administrativa ya que el primer proceso estara bloqueado leyendo los mensajes de la API de comunicacion.


Related

Wiki: Home