El trabajo más corto de clarividente primero (SJF)

En este artículo, discutimos sobre Clarividente SJF. Es un concepto teórico en el que el algoritmo mira hacia el futuro y espera a que llegue el proceso más corto, esto da como resultado el menor tiempo de espera promedio.
Diferencia entre Clairvoyant SJF y Shortest Job First : 
ambos algoritmos funcionan con el mismo principio de asignar tiempo de CPU al proceso más corto. La diferencia radica en el hecho de que Clairvoyant puede mirar hacia el futuro y esperar el proceso más corto y asignar el recurso en consecuencia, mientras que SJF tiene que asignar los recursos al proceso que ya llegó (es decir, están esperando la cola lista). 
Ejemplos:
Entrada: Los procesos son, 
 

Process id    Arrival time    Burst time    
    p1            0             5        
    p2            1             2        
    p3            3             1        
    p4            4             3    

Salida: La programación de procesos según Clairvoyant SJF es, 
 

Process id    Arrival time    Burst time    
    p3           3              1        
    p2           1              2        
    p4           4              3        
    p1           0              5    

El tiempo medio de espera es: 2,5 
Salida: la programación del proceso según Shortest Job First es, 
 

Process id    Arrival time    Burst time    
    p1           0              5        
    p3           3              1        
    p2           1              2        
    p4           4              3    

El tiempo de espera promedio es: 2.75
Nota: 
Clairvoyant SJF y SJF darán el mismo resultado si todos los procesos llegan al mismo tiempo.
Entrada: Los procesos son, 
 

Process id      Arrival time    Burst time      
    p1               0               4
    p2               0               9
    p3               0               5
    p4               0               3    

Salida: La programación de procesos según Clairvoyant SJF es, 
 

Process id    Arrival time    Burst time    
    p4              0               3
    p1              0               4
    p3              0               5
    p2              0               9    

El tiempo medio de espera es: 5,5 
Salida: la programación del proceso según Shortest Job First es, 
 

Process id    Arrival time    Burst time    
    p4              0               3
    p1              0               4
    p3              0               5
    p2              0               9    

El tiempo medio de espera es: 5,5
Código: 
 

CPP

#include <bits/stdc++.h>
#define SIZE 4
using namespace std;
 
// Structure to store the information about the process
typedef struct proinfo {
    string pname; // Process name
    int atime; // Arrival time
    int btime; // Burst time
} proinfo;
 
// This function schedules the process
// according to the Clairvoyant SJF scheduling algorithm.
void clairvoyantSjf(proinfo* arr)
{
    // To sort the processes according to the burst time
    int index = 0;
    for (int i = 0; i < SIZE - 1; i++) {
        index = i;
        for (int j = i + 1; j < SIZE; j++) {
            if (arr[j].btime < arr[index].btime) {
 
                index = j;
            }
        }
        swap(arr[i], arr[index]);
    }
}
 
void display(proinfo* arr)
{
    cout << endl;
    cout << "Process id"
         << "\t";
    cout << "Arrival time"
         << "\t";
    cout << "Burst time"
         << "\t";
    cout << endl;
    for (int i = 0; i < SIZE; i++) {
        cout << arr[i].pname << "\t\t";
        cout << arr[i].atime << "\t\t";
        cout << arr[i].btime << "\t\t";
        cout << endl;
    }
}
 
// To calculate the average waiting time
void avgWait(proinfo* arr)
{
    int ctime = 0;
    int twait = 0;
    for (int i = 0; i < SIZE; i++) {
        twait += abs(arr[i].atime - ctime);
        ctime += arr[i].btime;
    }
    cout << "The average waiting time is: " << (float)twait / SIZE << endl;
}
 
int main()
{
    // Array of process info structures.
    proinfo arr[SIZE];
    arr[0] = { "p1", 0, 5 };
    arr[1] = { "p2", 1, 2 };
    arr[2] = { "p3", 3, 1 };
    arr[3] = { "p4", 4, 3 };
 
    cout << "Process scheduling according to Clairvoyant SJF is: " << endl;
 
    clairvoyantSjf(arr);
    // To display the schedule
    display(arr);
    // to calculate the Average waiting time
    avgWait(arr);
}

Java

// Java implementation of the approach
class GFG {
  static int SIZE = 4;
 
  // Class to store the information about the process
  static class proinfo {
    String pname; // Process name
    int atime; // Arrival time
    int btime; // Burst time
 
    proinfo(String pname, int atime, int btime)
    {
      this.pname = pname;
      this.atime = atime;
      this.btime = btime;
    }
  }
 
  // This function schedules the process
  // according to the Clairvoyant SJF scheduling
  // algorithm.
  static void clairvoyantSjf(proinfo[] arr)
  {
     
    // To sort the processes according to the burst time
    int index = 0;
    for (int i = 0; i < SIZE - 1; i++) {
      index = i;
      for (int j = i + 1; j < SIZE; j++) {
        if (arr[j].btime < arr[index].btime) {
 
          index = j;
        }
      }
      swap(arr, i, index);
    }
  }
 
  static void swap(proinfo[] arr, int i, int index)
  {
    proinfo tmp = arr[i];
    arr[i] = arr[index];
    arr[index] = tmp;
  }
 
  static void display(proinfo[] arr)
  {
    System.out.println();
    System.out.print("Process id\t");
    System.out.print("Arrival time\t");
    System.out.println("Burst time\t");
    for (int i = 0; i < SIZE; i++) {
      System.out.print(arr[i].pname + "\t\t");
      System.out.print(arr[i].atime + "\t\t");
      System.out.println(arr[i].btime + "\t\t");
    }
  }
 
  // To calculate the average waiting time
  static void avgWait(proinfo[] arr)
  {
    int ctime = 0;
    int twait = 0;
    for (int i = 0; i < SIZE; i++) {
      twait += Math.abs(arr[i].atime - ctime);
      ctime += arr[i].btime;
    }
    System.out.println("The average waiting time is: "
                       + (float)twait / SIZE);
  }
 
  public static void main(String[] args)
  {
    proinfo[] arr = new proinfo[SIZE];
 
    arr[0] = new proinfo("p1", 0, 5);
    arr[1] = new proinfo("p2", 1, 2);
    arr[2] = new proinfo("p3", 3, 1);
    arr[3] = new proinfo("p4", 4, 3);
 
    clairvoyantSjf(arr);
 
    // To display the schedule
    display(arr);
 
    // to calculate the Average waiting time
    avgWait(arr);
  }
}
 
// This code is contributed by Karandeep Singh
Producción: 

Process scheduling according to Clairvoyant SJF is: 

Process id    Arrival time    Burst time    
p3        3        1        
p2        1        2        
p4        4        3        
p1        0        5        
The average waiting time is: 2.5

 

Publicación traducida automáticamente

Artículo escrito por DeveshRattan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *