Topología en estrella Topología en estrella Diagrama de sucesos. Modelo Dinámico C2 Tllegadas 1 2 3 C1 Tservicio NodoInicio C1: M.libre() == true C2: Q.vacia() == false C2 4 5 6 C1 Tservicio SWITCH C2 7 Tservicio 9 10 8 NodoFin C1 Topología en estrella Diagrama de clases. Modelo Estático. Siguiente MachineShop Machine NodoInicio Queue NodoFin Arrivals Job Topología en estrella public class Main { public static void main (String[] args) { double tiempollegadas= Float.valueOf(args[1]).floatValue(); int semilla= Integer.valueOf(args[0]).intValue(); MachineShop m = new MachineShop(tiempollegadas,semilla); m.Await(); synchronized(m.cerrojo) { try { m.cerrojo.wait(); } catch (InterruptedException e) { System.out.println(e.getMessage()); System.exit(1); } } System.exit(0); } } Topología en estrella public class MachineShop extends SimulationProcess { public MachineShop (double tLlegadas, int sem ) { tiempoLlegadas=tLlegadas; semilla=sem; } public void run () { try { Arrivals A = new Arrivals(tiempoLlegadas,semilla); for (int id=0;id<NHOSTS;id++) // creo diez maquinas con el t de servicio e identinficador MachineShop.Hosts[id] = new Machine(SERVICETIME,id); A.Activate(); // Inicio el proceso que genera los paquetes de llegada Scheduler.startSimulation(); while (ErasedJobs < FINALSIMULACION) { Hold(1000); } Scheduler.stopSimulation(); A.terminate(); Topología en estrella public class Arrivals extends SimulationProcess { public Arrivals (double mean,int seed ) { InterArrivalTime = new ExponentialStream(mean,seed); NodoInicial = new UniformStream(0.0,10.0,seed); NodoFinal = new UniformStream(0.0,10.0,seed); } Topología en estrella Continuación Arrivals public void run () { for (;;) { try { int nodoIni,nodoFin; double d; d=InterArrivalTime.getNumber(); Hold(d); d=NodoInicial.getNumber(); nodoIni= (int) Math.floor(d); do { d=NodoFinal.getNumber(); nodoFin= (int) Math.floor(d); } while (nodoIni==nodoFin); Job work = new Job(nodoIni,nodoFin); MachineShop.Hosts[nodoIni].Request(work); } catch (...) {} Topología en estrella public class Job { public Job (int nodoIni,int nodoFin) { ResponseTime = 0.0; ArrivalTime = Scheduler.CurrentTime(); MachineShop.TotalJobs++; nodoInicial=nodoIni; nodoFinal=nodoFin; } public void finished () { MachineShop.ErasedJobs++; if ( MachineShop.TotalJobs > MachineShop.TRANSITORIO) { // al superar el transitorio guardo los datos ResponseTime = Scheduler.CurrentTime() ­ ArrivalTime; MachineShop.TotalResponseTime += ResponseTime; MachineShop.meanDelay.setValue( ResponseTime ); } } Topología en estrella public class Machine extends SimulationProcess { public Machine (double service_time, int id) { serviceTime=service_time; working = false; J = null; idHost=id; Q=new Queue(); processedJobs=0; } Topología en estrella public class Machine extends SimulationProcess { public void run () { for (;;) { working = true; while (!Q.IsEmpty()) { try { Hold(serviceTime); // esta en el servidor sirviendose J = Q.Dequeue(); // sale de la cola processedJobs++; if (J.HostInicial()== HostNum()) { MachineShop.Hosts[MachineShop.SWITCH].Request(J); } else if (HostNum()== MachineShop.SWITCH) MachineShop.Hosts[J.HostFinal()].Request(J); else J.finished(); catch (SimulationException e){} catch (RestartException e) {} } //end while Topología en estrella public class Machine extends SimulationProcess { working = false; try {Cancel();} catch (RestartException e) {} } } public void Request (Job trabajo) { Q.Enqueue(trabajo); if (! working) { try {Activate();} catch (SimulationException e) {} catch (RestartException e) {} } }