Topología en estrella

Anuncio
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) {} } }
Descargar