examen concurrencia nov 2011 - ctr.unican.es · el código base sirve como interfaz a respetar...

35
Examen concurrencia Nov 2011 Miguel Telleria, Laura Barros, J.M. Drake telleriam AT unican.es Computadores y Tiempo Real http://www.ctr.unican.es Programación concurrente y Distribuída Curso 2011-12

Upload: dangcong

Post on 28-Sep-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

Examen concurrencia Nov 2011

Miguel Telleria, Laura Barros, J.M. Drake

telleriam AT unican.es

Computadores y Tiempo Real

http://www.ctr.unican.es

Programación concurrente y Distribuída

Curso 2011-12

Page 2: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Contenido

● Código base

● Examen del miércoles● Solución con 4 estados● Solución con 3 estados

● Examen del jueves● Solución sin basarse en estados● Solución basada en estados

Page 3: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

Código base

Page 4: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 4 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Los códigos del miércoles y jueves fueron distintos

● Pero la interfaz es la misma

● Se esperaba un diseño desde cero.● El código base sirve como interfaz a respetar desde el tren.

● También sirve como prueba de que la funcionalidad clásica es implementable.

Page 5: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 5 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Diagrama de clases

Page 6: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 6 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

API del Tunel que se ha de respetar● void entro(Tren elTren)

● La llama el tren una única vez en su recorrido esperando ser bloqueado (y aparcado) si no puede entrar.

● El tren no pide permiso antes, el permiso y el aparcamiento están incluidos dentro del entro() del túnel.

● Pasamos el objeto tren entero (y no sólo su color). Para obtener el color y la velocidad existen los métodos públicos de la clase tren:

– TramoFerroviario.Tramo tramo()

– int velocidad()

● void salgo(Tren elTren)● Lo llama el tren una única vez cuando sale del tunel.

● También se pasa el objeto tren.

Page 7: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

Examen del miércoles

Page 8: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 8 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Política del miércoles● En cuanto un tren rojo esté estacionado, los azules han de

dejar de entrar para dar prioridad a los rojos estacionados.● En todos los casos se ha de respetar que un sólo color esté en el túnel.● Los rojos estacionados han de esperar a que salgan los azules que

existen.

● Se pide:● La funcionalidad● Diagrama de estados

● Implementación basada en el diagrama de estados

● Justificar los bloques o métodos synchronized

Page 9: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 9 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

La funcionalidad se podía hacer fácilmente...

… aunque esperábamos otra cosa: diseño desde cero

/** * Lo invoca un tren para conocer si est autorizado a circular por el tunel en * ese instante. */private synchronized boolean autorizadoEntrar(TramoFerroviario.Tramo tramo){

if (numCirculando>0) {

return ((tramo==TramoFerroviario.Tramo.TRAMO_ROJO)&&autorizadosRojos) || ((tramo==TramoFerroviario.Tramo.TRAMO_AZUL)&&!autorizadosRojos && (rojosEstacionados==0) ) ;

}else{

return true;}

}

Page 10: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 10 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución 4 estados: diagrama

Page 11: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 11 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución máquina de 4 estados: estados, eventos, acciones

● EstadosLIBRE PASANDO_ROJOS

PASANDO_AZULES ROJOS_ESPERANDO

● EventosEntra ROJO Entra AZUL

Sale ROJO Sale AZUL

● Variables de guarda (y acciones)nT (numCirculando) nA (azulesEstacionados) nR (rojosEstacionados)

● AccionesnotifyAll() display() wait() (en el estado)

nT++ nT-- nA++ nA-- nR++ nR--

Page 12: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 12 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución de 4 estados: clases y atributos

Page 13: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 13 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

solución 4 estados: entro(AZUL)public synchronized void entro(Tren elTren){

if (elTren.tramo()==TramoFerroviario.Tramo.TRAMO_AZUL){

switch(estado){case LIBRE:

estado=EstadoTunel.PASANDO_AZULES;case PASANDO_AZULES:

nT=nT+1;break;

case PASANDO_ROJOS:case ESPERANDO_ROJOS:

nA=nA+1;laRed.muestraEstacionados(nR, nA);while(estado!=EstadoTunel.PASANDO_AZULES){

try{wait();}catch(InterruptedException e){}}nT=nT+1;nA=nA-1;laRed.muestraEstacionados(nR, nA);

}}

}

Page 14: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 14 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución 4 estados: entro(ROJO)else { //tramo=TramoFerroviario.Tramo.TRAMO_ROJO

switch(estado){case LIBRE:

estado=EstadoTunel.PASANDO_ROJOS;case PASANDO_ROJOS:

nT=nT+1;break;

case PASANDO_AZULES:estado=EstadoTunel.ESPERANDO_ROJOS;

case ESPERANDO_ROJOS:nR=nR+1;laRed.muestraEstacionados(nR, nA);while(estado!=EstadoTunel.PASANDO_ROJOS){

try{wait();}catch(InterruptedException e){}}nT=nT+1;nR=nR-1;laRed.muestraEstacionados(nR, nA);

}}

}

Page 15: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 15 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución 4 estados: salgo()public synchronized void salgo(Tren elTren){

nT=nT-1;switch (estado){case PASANDO_AZULES:

if (nT==0)estado=EstadoTunel.LIBRE;break;

case PASANDO_ROJOS:if (nT==0)

if (nA==0)estado=EstadoTunel.LIBRE;

else{estado=EstadoTunel.PASANDO_AZULES;notifyAll();

}break;

case ESPERANDO_ROJOS:if (nT==0){

estado=EstadoTunel.PASANDO_ROJOS;notifyAll();

}break;

}}

Page 16: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 16 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución con 3 estados: diagrama

Page 17: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 17 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución con 3 estados: estados, eventos, acciones

● Estados● TUNEL_VACIO

– entry: color_autorizado = cualquiera

● AUTORIZANDO_COLOR_QUE_CIRCULA

– entry: color_autorizado = el_que_circula

● ROJOS_ESTACIONADOS

– entry: color_autorizado = ninguno

● Eventos● LLEGA_EL_PRIMER_TREN

– condición de guarda: si es rojo o azul

● SALE_EL_ULTIMO_TREN

– condición de guarda: si hay aparcados o no

● SE_ESTACIONA_PRIMER_TREN_ROJO

● Acciones● notifica_a_los_estacionados

● color_cirulando = rojo | azul

● cambia_color_circulando

Page 18: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 18 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución con 3 estados: diagrama de clases

Page 19: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 19 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución de 3 estados: diagrama actividad

Page 20: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 20 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución de 3 estados: autorizadoEntrar● El autorizado entrar sale directamente del enum

color_autorizado (el cual está ligado al estado).

private boolean autorizadoEntrar(TramoFerroviario.Tramo tramo){

switch (color_autorizado){case AUTORIZO_CUALQUIERA:

return true;

case AUTORIZO_COLOR_CIRCULANDO:return tramo == color_circulando;

case AUTORIZO_NINGUNO:return false;

}

return false;}

Page 21: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 21 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Máquina de 5 estados

Page 22: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 22 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Diferencias entre esta última y la de clase

Page 23: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 23 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Diferencias entre esta última y la de clase

Semánticadel estado

Page 24: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

Examen del jueves

Page 25: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 25 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Política del jueves● Los trenes que están esperando en un extremo por estar el

túnel ocupado, al ser permitida su entrada, entran en el túnel ordenados según su velocidad. Los trenes con velocidad más alta entran primero en el túnel.

● Visualmente: Ningún tren que sale del estacionamiento “empuja” a otro.

● Se pide● La funcionalidad● Diagrama de actividad de entro()

● Que la implementación siga ese diagrama

● Justificar los bloques synchronized

Page 26: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 26 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución sin estados: Diagrama actividad

Page 27: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 27 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución sin estados: Diagrama actividad

Page 28: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 28 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución sin estados (diagrama de clases)

Page 29: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 29 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Implementación de entro() sin estadospublic synchronized void entro(Tren elTren) {

TramoFerroviario.Tramo tramo = elTren.color();int velocidad = elTren.velocidad();

if( !autorizadoEntrar(tramo) ){

estaciona(elTren);while( !autorizadoEntrar(tramo) ||

!gestorVelocidades.soy_el_mas_rapido(velocidad) ){

try { wait();} catch (InterruptedException e) {e.printStackTrace();}}desestaciona(elTren);

// Si quedan trenes estacionadosif (estacionados.get(tramo) > 0){

notifyAll(); // Puede que se hubieran dormido por no ser el mas rapido}

try { // Esperamos por si hay un rezagado que ha salido sin avanzarThread.sleep( (RENFEPrincipal.TIEMPO_ACTUALIZACION_MS * 2) / );

} catch (InterruptedException e) {e.printStackTrace();} }numCirculando=numCirculando+1;color_autorizado = tramo;

}

Page 30: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 30 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

estaciona() y desestaciona()

private void estaciona(Tren elTren){

int velocidad = elTren.velocidad();TramoFerroviario.Tramo tramo = elTren.color();

estacionados.put(tramo, estacionados.get(tramo) + 1);pinta_los_estacionados();gestorVelocidades.agnade_velocidad(velocidad);

}

private void desestaciona(Tren elTren){

int velocidad = elTren.velocidad();TramoFerroviario.Tramo tramo = elTren.color();

estacionados.put(tramo, estacionados.get(tramo) -1);pinta_los_estacionados();gestorVelocidades.quita_la_velocidad(velocidad);

}

Page 31: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 31 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Implementación del gestor velocidadespublic class GestorVelocidades{

private PriorityQueue<Integer> lasVelocidades =new PriorityQueue<Integer>(5,new GestorVelocidades.Comparador());

public class Comparador implements Comparator<Integer>{ public int compare(Integer v1, Integer v2){ return v2 - v1; }}

void agnade_velocidad(int velocidad){

lasVelocidades.add(velocidad);}

boolean soy_el_mas_rapido(int velocidad){

return velocidad == lasVelocidades.peek();}

void quita_la_velocidad(int velocidad){

lasVelocidades.remove(velocidad);}

}

Page 32: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 32 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución con estados: Diagrama de estados

Page 33: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 33 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución con estados: diagrama de clases

Page 34: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 34 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Solución con estados: diagrama de actividad

Page 35: Examen concurrencia Nov 2011 - ctr.unican.es · El código base sirve como interfaz a respetar desde el tren. También sirve como prueba de que la funcionalidad clásica es ... entran

25 Nov 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 35 de 35

Examen concurrencia Nov 2011Programación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria

Implementación de entro (con estados)public synchronized void entro(Tren elTren){

if (elTren.tramo()==TramoFerroviario.Tramo.TRAMO_AZUL){

switch(estado){case LIBRE:

estado=EstadoTunel.PASANDO_AZULES;case PASANDO_AZULES:

nT++;break;

case PASANDO_ROJOS:estaciono(elTren);while((estado==EstadoTunel.PASANDO_ROJOS)||

(elTren != trenesAparcados.peek() ) ){

try{wait();}catch(InterruptedException e){}}continuo(elTren);notifyAll();try {

Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();System.out.println(elTren.velocidad());

}}else{ // El tres es ROJO se trata de manera similar}

}