This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void *gestionarCola1(void* threadid) { | |
struct Planificador &value = *((struct Planificador *)threadid); | |
Proceso n = value.getPopCola1(); //El proceso pasa al procesador | |
cout<<" ATENDIENDO NUEVO PROCESO EN CPU. ID: "<<value.getPopCola1().getId() <<endl; | |
n.setEstado("Ejecutandose"); //Cambia su estado | |
n.imprimirDatos(); //Imprimimis datos del proceso en CPU | |
cout<<endl; | |
value.cola1.pop(); //Ya no esta en cola | |
value.setProceso(n); | |
pthread_exit(NULL); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Cambios de cola | |
for(int i = 0; i < NUM_QUEUES ; i++){ | |
//Si el tiempo de Quantum de la cola es igual al tiempo en ejecucion por el proceso en cpu | |
//Y si el T que ha estado ejecutandose es distinto al tiempo de ejecución asignado en un inicio | |
if ( AdministradorColas.getProcesador().getCola() == (i+1) && | |
tiempoEjecucion == queues[i] && AdministradorColas.getProcesador().getTEjecucion() != tiempoEjecucion){ | |
tiempoEjecucion=0; | |
AdministradorColas.gestionarEvento(); //Pasara a la cola inferior | |
AdministradorColas.setIdProcesador(); | |
continue; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Si el procesador se ha desocupado | |
if (AdministradorColas.getProcesador().getEstado() == "Terminado" || AdministradorColas.getProcesador().getId() == LIBRE){ | |
//Cola 1 es la de mayor prioridad. Si hay procesos se atendera primero esta | |
if ( ! AdministradorColas.cola1.empty()) | |
pthread_create(&threads[i], NULL, gestionarCola1, (void*)&AdministradorColas); | |
else{ | |
//Si la cola 1 esta vacia, procedemos a tomar procesos de la cola 2 | |
if (! AdministradorColas.cola2.empty()) | |
pthread_create(&threads[i], NULL, gestionarCola2, (void*)&AdministradorColas); | |
else{ //Si cola 1 y 2 están vacias |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Si hay un proceso en CPU | |
if (AdministradorColas.getProcesador().getId() != LIBRE){ | |
//Obtenemos la cola a la que pertenece, esta refleja su prioridad. | |
//Control del tiempo del proceso en el cpu | |
switch (AdministradorColas.getProcesador().getCola() ){ | |
case 1: case 2: case 3: case 4: | |
//Si el tiempo que ha estado ejecutandose es igual al t asignado en un inicio | |
if (AdministradorColas.getProcesador().getTEjecucion() == tiempoEjecucion){ | |
tiempoEjecucion=0; | |
//Ese proceso saldra del procesador |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Nodo *proceso; | |
int i=0, tiempoEjecucion=0,tiempo=0; | |
//Mientras las colas no esten vacias. | |
//Si hay al menos un proceso en alguna cola el ciclo continuara | |
while(AdministradorColas.getVacio != 0){ | |
if (AdministradorColas.getProcesador){ //Si hay un proceso en el cpu | |
switch (AdministradorColas.getProcesador.getPrioridad()){ //Obtenemos su prioridad | |
case 1: //Si ya estuvo en cpu el t asignado. ALGORITMO FIFS | |
if (AdministradorColas.getCola1.getTEjecutado== tiempoEjecucion){ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//SUMA ENTRE PILAS | |
cantOperandos = PrimeraOperacion.size() + SegundaOperacion.size(); | |
// Si la suma de las dos pilas es 3, hay dos elementos en la 1eraprila y uno en la 2da pila | |
if (cantOperandos > 1 && cantOperandos < 4 && validaEntrada(operacion,cantOperandos)) { | |
Permutacion auxiliar1,auxiliar2; | |
if(cantOperandos == 3){ // si (R0 * R1) | |
auxiliar1 = miTriangulo.buscaPermutacion(PrimeraOperacion.pop()); //Este es R1 | |
auxiliar2 = miTriangulo.buscaPermutacion(PrimeraOperacion.pop()); //Este es R0 | |
resultado = miTriangulo.operarPermutaciones(auxiliar2,auxiliar1); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Método empleado para los generadores cíclicos | |
public Permutacion powT(Permutacion perm, int x){ | |
Permutacion result = new Permutacion(); | |
TrianguloEquilatero aux = new TrianguloEquilatero(); | |
if(x==0) //Si la potencia es 0 | |
result =aux.getPi0(); //El resultado es el elemento neutro (PI0) | |
else if(x==1){ // Si la potencia es 1 | |
result = perm;} // El resultado sera el mismo elemento | |
else if (x>1){ // Si es mayor a 1, alli multiplicaremos | |
result = perm; // primero le asignamos el valor del elemento |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Para buscar los subgrupos cíclicos | |
public void generadorCiclico (Permutacion perm){ | |
int i=0; | |
boolean bandera = true; | |
if(perm != null){ | |
ArrayList<Permutacion> aux = new ArrayList<Permutacion>(); | |
Permutacion auxPerm =perm; | |
do{ | |
auxPerm = powT(perm,i); //Usamos la potencia. i: Cantidad de veces a componer |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
else if(cantOperandos==2){ | |
//Si 1era pila es 2. La operación fue ingresada como (Pi0*R0) | |
if ( primeraOperacion.size() == 2){ | |
auxiliar1=miTriangulo.buscaPermutacion(primeraOperacion.pop()); | |
auxiliar2=miTriangulo.buscaPermutacion(primeraOperacion.pop()); | |
resultado=miTriangulo.operarPermutaciones(auxiliar2, auxiliar1); | |
} | |
else{ //Sino Pi0*R0 | |
auxiliar1=miTriangulo.buscaPermutacion(segundaOperacion.pop()); | |
auxiliar2=miTriangulo.buscaPermutacion(segundaOperacion.pop()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//SUMA ENTRE PILAS | |
cantOperandos = primeraOperacion.size() + segundaOperacion.size(); | |
// Si la suma de las dos pilas es 3, hay dos elementos en la 1eraprila y uno en la 2da pila | |
if (cantOperandos > 1 && cantOperandos < 4 && validaEntrada(operacion,cantOperandos)) { | |
Permutacion auxiliar1,auxiliar2; | |
if(cantOperandos == 3){ // si es de la forma (R0 * R1) | |
auxiliar1 = miTriangulo.buscaPermutacion(primeraOperacion.pop()); //Este es R1 | |
auxiliar2 = miTriangulo.buscaPermutacion(primeraOperacion.pop()); //Este es R0 | |
resultado = miTriangulo.operarPermutaciones(auxiliar2,auxiliar1); |