lunes, 20 de junio de 2016

Sistema de Administración de Procesos Método SJF (Shortest-Job-First) en Java

El método SJF o Trabajo mas  Corto ese tipo de administración de procesos se basa en ejecutar los procesos mas cortos sin importar cuantos llegues o cuales procesos lleguen primero, el principal objetivo es la reducción del tiempo de espera ya que al ejecutarse primero los procesos con menos pero se hará de la manera mas rápida, aunque también tiene sus contra partes ya que al ejecutarse siempre los procesos mas pequeños siempre será así eso conlleva a  que si hay un proceso tal vez mas grande pero existen demasiados procesos pequeños se atenderán esto siendo que tal vez el procesos "grande" sea mas rápido de atender ya que es solo uno. 

Un ejemplo de lo que se describe en el texto anterior:

Sean los Procesos A = 10, B = 3, C = 1, D = 12, E = 2, F = 3.

Primero Proceso en Entrar C = 1 el tiempo de espera es 0.

C = 0
Segundo Proceso es E = 2  el tiempo de espera es 1.

E = 0

Tercer Proceso es F = 3 el tiempo de espera es 3.

F = 0

Cuarto Proceso es B = 3 el tiempo de espera es 6.

B = 0

Quinto Proceso es A = 10 el tiempo de espera es 9.

A = 0

Sexto Proceso es D = 12 el  tiempo de espera es 18.

D = 12

Con ese pequeño ejemplo se muestra como funciona el este algoritmo. Pasamos a la parte del condigo en Java:





// Creación del Método
public void sjf(){
    // Se Define el número de Porcesos a ejecutar
         tamar=Integer.parseInt(nprocesos.getText());
    // Inicialización de Variables
      int p[] = new int[tamar];
        int co[] = new int[tamar];
        int es[] = new int[tamar];
        int vuelta[] = new int[tamar];
        int procesos_originales[] = new int[tamar];
    // Recibe el Tamaño de los procesos
        for (int i = 0; i < tamar; i++) {
            procesos_originales[i] = co[i] = p[i] = Integer.parseInt(JOptionPane.showInputDialog("introduza el tamanio "
                    + "del proceso [" + (i + 1) + "]"));
        }
    //  Se hace el proceso para elegir el proceso con menos peso
        for (int i = 0; i < tamar - 1; i++) {
            for (int j = i + 1; j < tamar; j++) {
                if (p[i] > p[j]) {
                    temp = p[i];
                    p[i] = p[j];
                    p[j] = temp;
                }
            }
        }
        
        for (int i = 0; i < p.length; i++) {
                       txtoriginales.append("\nP[" + (i + 1) + "] : " + p[i] + "\t");
        }

        for (int i = 0; i < tamar - 1; i++) {
            for (int j = i + 1; j < tamar; j++) {
                if (co[i] > co[j]) {
                    temp = co[i];
                    co[i] = co[j];
                    co[j] = temp;
                }
            }
        }
        vuelta[0] = 0;
    // Se calcula la espera de los Procesos
        for (int i = 1; i < tamar; i++) {
            vuelta[i] = vuelta[i - 1] + co[i - 1];
            total = total + vuelta[i];
            
        }
    // Se calculan las estadisticas de los procesos
        for (int i = 0; i < p.length; i++) {
            es[i] = vuelta[i] + co[i];
            tiempo_espera += vuelta[i];
            tiempo_ida += es[i];
            txtordenados.append("\nP[" + (i + 1) + "] : " + procesos_originales[i] + "\t");

        }
    // Se muestran los resultados
        txtesta.append("\nProceso\ttamanio\tespera\tida");
        for (int i = 0; i < p.length; i++) {
            txtesta.append("\np[" + (i + 1) + "] \t   " + co[i] + "\t   " + vuelta[i] + "\t" + es[i]);
        }
        promedioespera.setText(""+(tiempo_espera / tamar));
        promedioida.setText("" + (tiempo_ida / tamar));
     }

Espero le haya servido la Información Gracias por Visitarme les dejo el Código.

Aquí esta el Código el Un proyecto de NetBeans:


Algoritmo SJF

2 comentarios: