Páginas

NIMADRES

Simulacion de procesos (Round Robin) en C++


Round robin es un método para seleccionar todos los elementos en un grupo de manera equitativa y en un orden racional, normalmente comenzando por el primer elemento de la lista hasta llegar al último y empezando de nuevo desde el primer elemento. El nombre del algoritmo viene del principio de Round-Roubin conocido de otros campos, donde cada persona toma una parte de un algo compartido en cantidades parejas.

Una forma sencilla de entender el round robin es imaginar una secuencia para "tomar turnos". Es un método para ejecutar diferentes procesos de manera concurrente, para la utilización equitativa de los recursos del equipo, es limitando cada proceso a un pequeño período (quantum), y luego suspendiendo este proceso para dar oportunidad a otro proceso y así sucesivamente. A esto se le denomina comúnmente como Planificación Round-Robin.

Eh aquí un sencillo algoritmo en C++ que nos ayudara a comprender un poco mejor como funciona este proceso.


#include <iostream>
#define limite 5
using namespace std;

void insertar(char datos[], int tiempo[], int numero){
     for(int i = 0; i < (numero); i++){
         cout<<"inserte el tiempo en el proceso ["<<datos[i]<<"]: ";
         cin>>tiempo[i];
     }
}

int quantum(int tiempo[],int numero){
    int resultado = 0;
    for(int i = 0; i < numero;++i)
      resultado += tiempo[i];
    resultado /= numero;
    return resultado;
}

void RoundRobin(char datos[], int tiempo[], int numero){
    insertar(datos,tiempo, numero);
    int Quantum = quantum(tiempo,numero);
    cout<<"El quantum es: "<< Quantum <<endl;
    int tiempoFinal = 0;
    float sumatoria = 0.0f;
    int metalera = 0;
    int i = 0;
    do{ 
      tiempo[i] != 0 ? tiempo[i] -= Quantum : ++i;
      if(tiempo[i] > 0)
          tiempoFinal += Quantum;
      else{
          tiempoFinal += Quantum+tiempo[i];
          sumatoria += tiempoFinal;
          cout << "el tiempo de proceso de " << datos[i] << ": " 
          << tiempoFinal << endl;
          metalera++;
      }
      i < (numero - 1) ? i++ : i = 0;
    }while(metalera < numero);
    sumatoria /= numero;
    cout << "Tiempo promedio de los procesos es: " 
    << sumatoria << endl;
}


int main(){
    char datos[limite] = {'a','b','c','d','e'};
    int tiempo[limite];
    RoundRobin(datos,tiempo,limite);
    cin.get();
    cin.get();
    return 0;
}


8 comentarios:

  1. ke tal amigo oye disculpa no tendras la simulacion de procesos round robin, SJF, FIFO y el de prioridad pero con listas y punteros que lo he intentado hacer pero no mas no em sale agradeceria mucho tu ayuda por favor

    ResponderEliminar
  2. buenas amigo necesito ayuda urgente, como determino si un proceso no ha finalizado en el algoritmo de round robin, si solo me dan el quantum, y el tamaño del proceso , es para implementarlo en C++?

    ResponderEliminar
    Respuestas
    1. Perdona, no entendí tu pregunta!, este proceso de Round Robin,el quantum se calcula despues de determinar cuantos procesos son, lo puse con solo 5 procesos, pero como vez solo es el ejemplo, tu puedes hacer que el usuario inserte todos los que necesites. No se a que te refieres

      Eliminar
  3. hola amigo no tendras el agoritmos del tiempo mas corto y el de prioridad te lo agradeceria mi correo es cmpunk_01@hotmail.com

    ResponderEliminar
    Respuestas
    1. el de prioridad no lo tengo, aun no lo eh subido, pero si tengo el primero mas corto...
      http://programacionparacoccidio.blogspot.mx/2012/05/otra-forma-de-reducir-el-sesgo.html

      Eliminar
  4. Hola! En using namespace std; me marca un error en namespace, uso borland ya que es el que me piden usar en la escuela, sabes como podria corregirlo

    ResponderEliminar
    Respuestas
    1. jamas eh utilizado borland, este programa esta hecho en base a Dev-cpp, igual es el compilador de g++, lomas probable es que el error este en que el archivo lo estas guardando como C y no como C++, ya que en ese caso using namespace std; no es nativo de C. fijate en la extencion ;)

      Eliminar
  5. hola si lo quiero para n numero, como deberia de ser el codigo? me podrias ayudar!

    ResponderEliminar