Me lo contaron y lo olvidé, lo leí y lo entendí, lo hice y lo aprendí.





jueves, 22 de septiembre de 2011

Política FCFS [Primero en entrar, primero en ser servido]

Esta política resulta ser la más sencilla, ya que consiste de 3 pasos:
1.- Ordenar los procesos por orden de llegada
2.- Resolver los instantes de finalización de los procesos
3.- Obtener los valores T,E,I con las fórmulas de esta política.

Ahora, debo aclarar que yo tengo mi clase de Procesos de esta manera:


class Proceso
    {
        public double instanteEntrada, tiempoEjecucion, t, e, i,instanteFinalizacion,tiempoEjecutado;
        int prioridad;
        public char[] nombre = new char[5];
        public Boolean dormido = true;


        public Proceso(char[] nombre, double instanteEntrada, double tiempoEjecucion,int prioridad)
        {
            this.nombre = nombre;
            this.instanteEntrada = instanteEntrada;
            this.tiempoEjecucion = tiempoEjecucion;
            this.t = 0;
            this.e = 0;
            this.i = 0;
            this.instanteFinalizacion=0;
            this.prioridad = prioridad;
        }
    }

Como ven, al crear un proceso recibe los valores: nombre, instanteEntrada, tiempoEjecucion y prioridad.
Ahora, tomando en cuenta que el instante de entrada es un número, resulta sencillo meter los procesos a un array y ordenarlos de menor a mayor de acuerdo a su instante de Entrada.

Proceso[] procesos = new Proceso(numero_de_procesos);
y voy agregando los procesos al arreglo:
procesos[0]= proceso;
procesos[1]= proceso2;
procesos[2]= proceso3;
..... //indefinidamente;
Luego se hace un ordenamiento con el método burbuja:
for(int i=0;i<procesos.Length-1;i++) //procesos.Lenght es la longitud del array en donde estan los procesos
{
  for(int j=i+1;j<procesos.Length;j++)
  {
    Proceso procesoTemp; //creo un objeto para guardar temporalmente los procesos
    if(procesos[j].instanteEntrada<procesos[i].instanteEntrada)
    {
      procesoTemp = procesos[j];
      procesos[j]=procesos[i];
      procesos[i]=procesoTemp;
    }
  }
}

Así tenemos en la posición 0 el primer proceso en entrar, y en la ultima posicion el ultimo proceso en entrar.
Falta calcular el instante de finalización:
Para la posición 0: instanteFinalizacion= instanteEntrada + tiempoEjecucion.
Para las siguientes posiciones
Si el instante de finalización del proceso anterior es igual o superior al instante de inicialización del proceso actual:

instanteFinalizacion = (instanteFinalización_procesoAnterior) + tiempoEjecución

Si no es así (si el proceso anterior acabó antes de que iniciara el actual)

instanteFinalización = (instanteEntrada + tiempoEjecución)


El resto de los valores (T,E,I) se calculan a partir de estos tres valores obtenidos.
Siento no ser más específico pero estoy con el tiempo encima

3 comentarios:

  1. vale gracias, se entiende y me parece que sera de ayuda y disculpa por molestar :):::zulma

    ResponderEliminar
  2. De nada.
    Acabamos de hacer terminar la segunda y tercera política. Mañana cualquier duda ya saben ;)

    ResponderEliminar
  3. no vayas a pensar k soy encajosa pro sera posible que puedas pegar las otras dos politicas que hiciste pra darme una idea de como lo hiciste esk la vdd la primera k dejast aki m ayudo mucho, claro que al inicio tuve mis errores pork lo estoy haciendo en java xfa :( y en caso de k no puedas te doy otraves 1000 gracias por el codigo anterior::::zulma

    ResponderEliminar