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: