2015-04-24 4 views
0

J'ai une file d'attente de travaux avec 500 travaux qui a un jobName String, int arrivalTime, int cpuTime, et String pageFaults (qui pour les pageFaults il ressemble à ceci dans le fichier ... "" 12 , 25, 100, 120 "" et il est lu comme une chaîne). Et je dois calculer ce qui suit ...Calculs d'algorithmes de processeur FCFS et SRT

1) Débit =?

2) Moyenne = Temps d'attente startTime - arrivalTime

3) Moyenne = Délai d'exécution CPUTIME + waitingTime + FinishTime - arrivalTime

4) CPU Temps d'inactivité =?

-startTime =?

-finishTime =?

Quel est le calcul pour le débit, le temps d'inactivité du processeur, startTime et finishTime?

Est-ce que mon temps d'attente moyen et mes calculs de temps d'exécution moyens sont corrects?

En outre, comment puis-je coder ces calculs?

Et ceci est fait en utilisant les algorithmes du premier arrivé premier servi et du temps restant le plus court.

Voici ce que j'ai jusqu'à présent,

Première classe:

J'ai commencé à itérer le ArrayList et le codage d'une partie des calculs, mais qui est aussi loin que je peux obtenir.

import java.io.File; 
import java.util.ArrayList; 
import java.util.Scanner; 
import java.io.IOException; 

public class TextFile 
{ 
    public static void main(String[] args) throws IOException 
    { 
    double startTime = (0.0); 
    double finishTime = (0.0); 

    //double throughput = (0.0); 
    double waitingTime = (0.0); 
    double turnaroundTime = (0.0); 
    //double cpuIdleTime = (0.0); 

    String jobName = " "; 
    int arrivalTime = (0); 
    int cpuTime = (0); 
    String pageFault = " "; 

    //DataObject object = new DataObject(jobName, arrivalTime, cpuTime, pageFault); 

    Scanner input = new Scanner(new File("JobQueue.txt")); 

    ArrayList<DataObject> list = new ArrayList<DataObject>(); 

    while(input.hasNext()) 
    { 
    jobName = input.next(); 
    arrivalTime = input.nextInt(); 
    cpuTime = input.nextInt(); 
    pageFault = input.next(); 

    DataObject data = new DataObject(jobName, arrivalTime, cpuTime, pageFault); 
    list.add(data); 
    } 

    //Calculations for FCFS 

    for (DataObject data : list) 
    { 
    startTime = 

    finishTime = 

    waitingTime = startTime - arrivalTime; 

    turnaroundTime = cpuTime + waitingTime + finishTime - arrivalTime; 


    }// compute throughput, average waiting time, etc 

    System.out.print(list);//Test output to ensure array list is working 

    System.out.printf("%.2f\n", turnaroundTime); 

    // compute throughput, average waiting time, etc... 
    input.close(); 
    } 
    } 

Deuxième classe:

public class DataObject 
{ 
private String jobName; 
private int arrivalTime; 
private int cpuTime; 
private String pageFault; 

public DataObject(String job, int arrival, int cpu, String interrupt) 
{ 
    jobName = job; 
    arrivalTime = arrival; 
    cpuTime = cpu; 
    pageFault = interrupt; 
} 

public void setjobName(String job) 
{ 
    jobName = job; 
} 

public String getJobName() 
{ 
    return jobName; 
} 

public void setArrivalTime(int arrival) 
{ 
    arrivalTime = arrival; 
} 

public int getArrivalTime() 
{ 
    return arrivalTime; 
} 

public void setcpuTime(int cpu) 
{ 
    cpuTime = cpu; 
} 

public int getcpuTime() 
{ 
    return cpuTime; 
} 

public void setPageFault(String interrupt) 
{ 
    pageFault = interrupt; 
} 

public String getPageFault() 
{ 
    return pageFault; 
} 

public String toString() 
{ 
    return String.format("\n%s %d %d %s\n", getJobName(), getArrivalTime(), getcpuTime(), getPageFault()); 
} 
} 

Répondre

0

Le débit du système est:

Throughput = Nombre de processus terminés/(unité de temps). Ce que je veux dire par unité de temps est le temps nécessaire pour compléter le nombre de processus dans le numérateur.

Le temps d'inactivité du processeur est facile à comprendre et, comme il est dit, c'est le temps pendant lequel le processeur reste inactif, c'est-à-dire qu'il n'exécute aucune tâche. Ex. Un processus s'est terminé à l'instant t et un nouveau processus est arrivé à t + 4, ainsi le CPU est resté inactif pendant le temps intermédiaire.

Heure de début est l'heure à laquelle l'exécution du processus commence dans la CPU et n'est pas l'heure d'arrivée du processus.

Heure de fin L'exécution du processus complet est terminée.

Temps d'attente - Temps moyen passé par un processus dans la file d'attente d'exécution. Pour le Temps d'attente vous avez considéré le waiting time as the start time - arrival time.
Parfois, le découpage temporel est utilisé et les processus sont traités en mode round robin, ce qui donne à chaque processeur une tranche de temps fixe. . Donc, en utilisant la formule Waiting time = Finish time - Arrival time - CPU time semble plus preuve complète, et est également applicable à votre méthode.

Time Redressement - Temps moyen écoulé depuis lorsque le processus est soumis au moment où il a terminé. Vous pouvez calculer cela en utilisant facilement Turnaround time = finish time - start time

Si vous avez besoin des valeurs moyennes, il est aussi simple que le calcul pour chacun des processus, puis en divisant la somme par le nombre de processus (moyenne simple)

Voici un lien où les algorithmes à toutes les méthodes sont donnés. Vérifiez http://www.read.seas.harvard.edu/~kohler/class/05s-osp/notes/notes5.html pour commencer votre codage :-)