PDF de programación - PROGRAMACION CONCURRENTE Y DISTRIBUIDA - VI.2: Red Ferroviaria ConSocket

Imágen de pdf PROGRAMACION CONCURRENTE Y DISTRIBUIDA - VI.2: Red Ferroviaria ConSocket

PROGRAMACION CONCURRENTE Y DISTRIBUIDA - VI.2: Red Ferroviaria ConSocketgráfica de visualizaciones

Publicado el 14 de Enero del 2017
838 visualizaciones desde el 14 de Enero del 2017
330,0 KB
27 paginas
Creado hace 12a (03/11/2011)
PROGRAMACION CONCURRENTE Y

DISTRIBUIDA

VI.2: Red Ferroviaria ConSocket



Laura Barros

Objetivo

En esta versión del proyecto Red Ferroviaria se distribuye el código en varios
procesadores.

 El procesador NodoInfraestructura ejecuta el código relativo a los elementos situados

en tierra (infraestructura) (RedFerroviaria, Tunel, TramoFerroviario y
CentroRegulación).

 Hay un procesador NodoTren por cada uno de los trenes que circulan que ejecuta el

código relativo al control de su marcha (Tren). La interacción entre los trenes y la
infraestructura se realiza utilizando el paradigma Proxy-Servant, y la comunicación
entre estos se realiza utilizando sockets.



port [2000]

port [2040] Rojo

port [2050] Azul

n <<Internet>>1



port [2010]

port [2020] Rojo

port [2030] Azul



Procodis’11: VI- Sockets Laura Barros

2

Punto de partida I

Partimos de la aplicación RedFerroviariaLockJava, a la que
hemos cambiado su estructura para poder ser distribuida en
varios procesadores.

El código se ha separado en dos particiones (paquetes):
 El paquete infraestructura: contiene las clases que se instancian en el

procesador NodoInfraestructura.

 El paquete equipoMovil: contiene las clases que se embarcan en el

procesador NodoTren.



Procodis’11: VI- Sockets Laura Barros

3

Punto de partida II

Las modificaciones que se han hecho respecto de RedFerroviariaLockJava son:
 Finalización de la actividad de los trenes: El método entro() de la

clase CentroRegulación retorna un booleano. Lo obtiene el tren
cuando se accede al CentroRegulación para anunciar que entra en el
centro de regulación.

 si es true :actividad del tren debe finalizar definitivamente.
 si es false: el tren debe continuar.

 Proxys y Servants: La conexión de cada tren con las clases de la

infraestructura se ha realizado a través de parejas complementarias
Proxy-servant.

 La clase Tren tiene instancias de las clases: RedFerroviariaProxy,

TramoFerroviarioProxy, TunelProxy, CentroRegulacionProxy.

 Cada *Proxy ofrece localmente al tren, el conjunto de operaciones que

éste requiere del objeto que representa
(RedFerroviaria,TramoFerroviario, Tunel, CentroRegulacion).

Procodis’11: VI- Sockets Laura Barros

4

Punto de partida III

 ...y Servants:

 La clase RedFerroviaria tiene agregada una instancia de la clase

RedFerroviariaServant.

 La clase Tunel tiene agregado una instancia de la clase TunelServant.
 La clase CentroRegulacion tiene agregado una instancia de la clase

CentroRegulacionServant.

 La clase TramoFerroviario tiene agregado una instancia de la clase

TramoFerroviarioServant.

 Los *Servant ejecutan por delegación en el elemento al que pertenecen
los requerimientos que se reciben de los trenes (a través de los proxies).
 ¿Cómo interacciona un tren con un elemento de la infraestructura?

1.

Invoca un método del correspondiente *Proxy que es local.

2. El *Proxy , a través de un socket, se comunica con el

correspondiente *Servant.

3. El *Servant ejecuta la interacción con el elemento.

Procodis’11: VI- Sockets Laura Barros

5

Punto de partida III

Las interacciones que los trenes realizan sobre los elementos de la infraestructura
pueden ser de dos tipos:

 No bloqueantes: No implica ningún bloqueo prolongado del thread del tren. Ejemplos

de este tipo de interacción son:

 salgo():void de la clase Tunel
 esPosicionLibre(posición,tramo):boolean de la clase TramoFerroviario.

:Tren

:TramoFerroviarioProxy

:TramoFerroviarioServant

:RedFerroviaria

esPosicionLibre()



socket [2000]

sendMsj (esPosicionLibre)



sendMsj (return esPosicionLibre)



esPosicionLibre()

Procodis’11: VI- Sockets Laura Barros

6

Punto de partida IV

 Bloqueantes: El thread del tren se suspende hasta que en el elemento de la

infraestructura se alcanza el estado que responde. Estas son:

 entro():boolean de la clase Tunel.
 entro(tramo):void de la clase CentroRegulacion.



:Tren

:TunelProxy

:TunelServant

:Tunel



entro()

Toma el lock de
TunelProxy

Suspendido en
read() de socket



sockets [port 2010]

sendMsj (entro())



:Agente



Suspendidoen lock

de Tunel



entro()

notify()

sendMsj (return entro())



notify()



Procodis’11: VI- Sockets Laura Barros



salgo()

7

Arquitectura de la aplicación I

Clases incluidas en la partición infraestructura:
 Las clases RedFerroviaria, TramoFerroviario y Tunel son básicamente

iguales a las utilizadas en la aplicación RedFerroviariaLockJava.

 La clase CentroRegulación es también la misma, salvo que incorpora el

mecanismo de finalización de los trenes. Los cambios son:



Atributo nuevo:

terminado:boolean=false => Vale True si la actividad de los trenes
debe finalizar.

Métodos nuevos:

termina() => Establece que la actividad de los trenes del tramo
ferroviario debe finalizar.

entro():boolean =>

 Bloquea el thread entrante hasta que llegue la hora de salida de tren.
 Retorna true si la actividad del tren que invoca debe terminar.

Procodis’11: VI- Sockets Laura Barros

8

Centro de Regulacion

/*Un tren informa de que entra en el centro de regulación. */
public synchronized boolean entro(){



numTrenes=numTrenes+1;
laRed.muestraCentroRegulacion(tramo, numTrenes);
while(proximaPartida>System.currentTimeMillis()){



}
proximaPartida=System.currentTimeMillis()+100*laRed.LAST_POSITION/

return terminado;

try{

}catch(InterruptedException e){};

wait(100);



(laRed.numMaxTrenesPorTramo()-2);


}
/**
* Se establece que la actividad de los trenes del tramo debe concluir.
*/
public void termina(){

}

terminado=true;

Procodis’11: VI- Sockets Laura Barros

9

Arquitectura de la aplicación II

Procodis’11: VI- Sockets Laura Barros

10

Nuevas Clases I

Clase RedFerroviariaServant:
 Servant que ejecuta los metodos de la RedFerroviaria que requiere cualquier
tren a través del *Proxy complementario utilizando el socket que se establece
entre ellos.

 Recibe por el socket de puerto 2000 como mensajes los métodos que los trenes

realizan sobre la RedFerroviaria.

 Invoca el método requerido en RedFerroviaria.
 Retorna el resultado.

Constructor:



RedFerroviariaServant(laRed:RedFerroviaria)=> Recibe como
parámetro la referencia a la RedFerroviaria de la que es servant.

Atributos:



laRed:RedFerroviaria => Referencia a la RedFerroviaria sobre el


que opera. Se establece en su constructor



<<final>>PORT:int=2000 => Puerto del socket por el que el
*Servant queda a la espera de recibir mensajes de los *Proxies
complementarios. Es constante [2000]
ServerSocket serv => Server que atiende los requerimientos que
recibe de los *Proxies complementarios por su puerto.

Procodis’11: VI- Sockets Laura Barros

11

Nuevas Clases II

Clase TunelServant:
 Servant que ejecuta los métodos del Tunel que requiere cualquier tren a través

del *Proxy complementario utilizando el socket que se establece entre ellos.

 Recibe por el socket de puerto 2010 como mensajes las invocaciones de los

métodos que los trenes realizan sobre el Tunel.

 Invoca por el método requerido en Tunel.
 Retorna el resultado.

TunelServant(elTunel:Tunel)=> Recibe como parámetro la referencia
al Tunel del que es servant.

elTunel:Tunel => Referencia el Tunel sobre el que opera. Se
establece en su constructor.
<<final>>PORT:int=2010 => Puerto del socket por el que el
*Servant queda a la espera de recibir mensajes de los *Proxies
complementarios. Es constante [2010]
ServerSocket serv => Server que atiende los requerimientos que
recibe de los *Proxies complementarios por su puerto.

Constructor:


Atributos:



Procodis’11: VI- Sockets Laura Barros

12

Nuevas Clases III

Clase CentroRegulacionServant:

 Servant que ejecuta los métodos del CentroRegulacion que requiere cualquier tren a
través del *Proxy complementario utilizando el socket que se establece entre ellos.

 Recibe por el socket de puertos 2020 (tramo Rojo) y 2030 (tramo Azul) como mensajes

los métodos que los trenes realizan sobre el correspondiente CentroRegulacion.

 Invoca el método requerido en CentroRegulacion.
 Retorna el resultado.

Constructor:


CentroRegulacionServant(elCentroRegulacion:CentroRegulacion,
port:int)=> Recibe como parámetro la referencia al CentroRegulación del
que es servant, y el puerto (2020 - tramo Rojo ,2030 - tramo Azul).



Atributos:



elCentroRegulacion:CentroRegulacion => Referencia el
CentroRegulacion sobre el que opera. Se establece en su constructor.
<<final>>PORT:int => Puerto del socket por el que el *Servant queda a la
espera de recibir mensajes de los *Proxies complementarios. Se establece
en el constructor. Puede tomar los valores [2020] tramo rojo y [2030] tramo
azul.
ServerSocket serv => Server que atiende los requerimientos que recibe de
los *Proxies complementarios por su puerto.

Procodis’11: VI- Sockets Laura Barros

13

Nuevas Clases IV

Clase TramoFerroviarioServant:

 Servant que ejecuta los métodos del TramoFerroviario que requiere cualquier tren a
través del *Proxy complementario utilizando el socket que se establece entre ellos.

 Recibe por el socket de puertos 2040 (tramo Rojo) y 2050 (tramo Azul) como mensajes

los métodos que los trenes realizan sobre e
  • Links de descarga
http://lwp-l.com/pdf1046

Comentarios de: PROGRAMACION CONCURRENTE Y DISTRIBUIDA - VI.2: Red Ferroviaria ConSocket (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad