#include "pro.h" //Variables Globales float lambdapoisson; //Promedio de llegada de paquetes float lambdaexponencial; //Promedio de tiempo atencion de paquetes char unidad; //Unidad de tiempo de tiemposervicio del servidor int resolucion=0; float tiemposervicio; //Tiempo de tiemposervicio del servidor char exper; //Cantidad de experimentos int experimentos; //Cantidad de experimentos int cantidad=1; //Cantidad de datos que llegan en el intervalo de tiempo float *tiempo_entre_llegadas; float *instante_llegada;//Instantes de llegada de paquetes float *instante_reduce_cola;//Instantes en que se reduce la cola float *tiempo_ocupado;//Tiempo ocupado para cada paquete float *tiempo_entre_reduce;//Tiempo transcurrido entre el termino de atencion de paquetes float tiempo_espera;//Tiempos de espera de cada paquete hasta ser atendido float *tiempo_sistema;//Tiempos de permanencia de un paquete en el sistema float tasa_de_ocupacion;//Tasa ocupacion de sistema float m; int cola; float aux; char c;//Para evitar eco en getchar float horadisp; //Variables para calculo de Leyes de Little float datos; float largo_cola; //Variables de control de loops int d; int i; int j; int k; int u; int check; char continuar; //----------------PARA PROCESOS------------------// pid_t pid; int pfd[2]; int status; FILE *sd; //----------------PARA HEBRAS------------------// int rc , detachstate; pthread_t tid; pthread_attr_t attr; //--------------FUNCIONES PARA MANEJO DE DATOS DE LLEGADAS Y ATENCIONES--------// //Ingreso de datos void ingreso_datos(void){ do{ printf("Ingrese el promedio de llegada de paquetes por segundo:"); do{ check=scanf("%f",&lambdapoisson); c=getchar(); if(!check) printf("Ingrese un numero:"); }while(!check); printf("1 paquete cada %.4f segundos\n",1/lambdapoisson); }while(continuar=='N'); do{ printf("\nIngrese el promedio de tiempo de atencion de paquetes en segundos\n"); printf("El sistema se desbordara si es mayor que %.4f segundos:",1/lambdapoisson); do{ check=scanf("%f",&lambdaexponencial); c=getchar(); if(!check) printf("Ingrese un numero:"); }while(!check); if(ocup_little()>=0.8){ printf("\nTASA DE OCUPACION %f ALTA , las leyes de Little se veran distorsionadas\n",ocup_little()); printf("Desea continuar?[s/N]:"); do{ continuar=getchar(); c=getchar(); if(continuar!='s'&&continuar!='N') printf("Ingrese s o N:"); }while(continuar!='s'&&continuar!='N'); } else if(ocup_little()<=0.2){ printf("\nTASA DE OCUPACION %f BAJA , las leyes de Little se podrian ver distorsionadas\n",ocup_little()); printf("Desea continuar?[s/N]:"); do{ continuar=getchar(); c=getchar(); if(continuar!='s'&&continuar!='N') printf("Ingrese s o N:"); }while(continuar!='s'&&continuar!='N'); } else { continuar='s'; } }while(continuar=='N'); printf("\nDetermine la unidad de tiempo del servidor\n"); printf("Ingrese s para segundos, m para minutos, h para horas:"); do{ unidad=getchar(); if(unidad!='s'&&unidad!='m'&&unidad!='h'){ printf("Ingrese s, h o m:"); } }while(unidad!='s'&&unidad!='m'&&unidad!='h'); switch(unidad){ case 'm': check=60; break; case 'h': check=3600; break; default: check=1; } printf("\n"); printf("Determine el tiempo en que el servidor recibira paquetes\n"); printf("Debe llegar como minimo 1 paquete , elija un numero mayor a %f:",1/(lambdapoisson*check)); do{ scanf("%f",&tiemposervicio); c=getchar(); if(tiemposervicio<1/(lambdapoisson*check)){ printf("Debe llegar como minimo 1 paquete , elija un numero mayor a %f:",1/(lambdapoisson*check)); } }while(tiemposervicio<1/(lambdapoisson*check)); printf("\n"); if(unidad=='s'){ cantidad=lambdapoisson*tiemposervicio; } if(unidad=='m'){ tiemposervicio=tiemposervicio*60; cantidad=lambdapoisson*tiemposervicio; } if(unidad=='h'){ tiemposervicio=tiemposervicio*3600; cantidad=lambdapoisson*tiemposervicio; } if(cantidad>20){ printf("El sistema recibira %d paquetes \nIngrese la cantidad de paquetes a mostrar:",cantidad); do{ scanf("%d",&resolucion); if(resolucion>cantidad){ printf("No puede elegir mas de %d paquetes:",cantidad); } }while(resolucion>cantidad); c=getchar(); } else if (cantidad<5){ printf("\nCantidad muy baja de paquetes, puede no alcanzarse el estadio estacionario\n\n"); } else{ resolucion=cantidad; } } //Generadora de instante de paquete float *instante_llegadas_paquetes(float instante_llegadas[]){ if(POISSON){ float data[cantidad]; srand(time(NULL)); for(i=0;ihora_disp[i-1]){ hora_disp[i]=instante[i]+tiempo_busy[i]; } } return(hora_disp); } //Generadora de tiempo entre instantes de reduccion de cola float *entre_reduce_cola(float tiempo_dormido[],float *instante_reduce_cola){ for(i=0;i=instante_llegada[i]){ cola++; if(!d)printf(" %f\t\t%f\t%f\t cola++\t\t%d\n",instante_llegada[i],tiempo_ocupado[i],instante_reduce_cola[i],cola); } else{ cola++; if(!cola){ if(!d){ printf(" %f\t\t%f\t%f\t -\t\t%d\n",instante_llegada[i],tiempo_ocupado[i],instante_reduce_cola[i],cola); } } else{ if(!d){ printf(" %f\t\t%f\t%f\t cola++\t\t%d\n",instante_llegada[i],tiempo_ocupado[i],instante_reduce_cola[i],cola); } } } if((cola)>0){ largo_cola+=cola; datos++; } } for(;j0){ largo_cola+=cola; datos++; } } //~ if(!d)printf("largo cola %f\ndatos %f\n",largo_cola,datos); } //Tiempo medio de espera float average_wait_time(float tiempo_espera[],float *instante_reduce_cola,float *instante_llegada,float *tiempo_ocupado){ int cant=0; float total_espera=0; for(i=0;i=1){ float mu=1/lambdaexponencial; return(1+(pow(lambdapoisson,1)/(mu*(mu-lambdapoisson)))); } else{ return(ocup_little()/(1-ocup_little())); } } //--------------GRAFICOS Y DATOS EN OCTAVE-----------// //Envio de datos de llegada a Octave void posicion(float data[],FILE *sdA){ for(i=0;i