J'ai 6 processus comme suit:
-- P0 --
arrival time = 0
burst time = 10
-- P1 --
arrival time = 110
burst time = 210
-- P2 --
arrival time = 130
burst time = 70
-- P3 --
arrival time = 130
burst time = 70
-- P4 --
arrival time = 130
burst time = 90
-- P5 --
arrival time = 130
burst time = 50
Comment puis-je calculer le temps d'attente et le délai d'exécution pour chaque processus? Le système doit être non préemptif (le processus obtient le CPU jusqu'à ce qu'il soit fait). Aussi: il y a 4 processeurs logiques dans ce système.
Supposons que systemTime est le temps de disponibilité actuel des systèmes, et ArrivalTime est relatif. c'est-à-dire: un ArrivalTime de 0 signifie que le processus démarre lorsque le système le fait; une heure d'arrivée de 130 signifie que le processus est démarré 130 unités après le démarrage du système.
Est-ce correct: waitingTime = (systemTime - arrivalTime)
?
Mon raisonnement pour penser ceci est que systemTime - arrivalTime
Est le temps pendant lequel le processus a attendu dans la file d'attente fcfs pour utiliser le CPU (ou est-ce faux?)
Et pour le temps d'exécution, je pensais à quelque chose comme: turnaroundTime = burstTime + waitingTime
, Car le temps d'attente et le temps de rafale devraient être le temps total pour terminer le processus. Encore une fois, je ne sais pas si mon intuition est correcte.
Toutes les lectures seraient grandement appréciées!
Pour un système non préemptif,
waitingTime = startTime - arrivalTime
turnaroundTime = burstTime + waitingTime = finishTime- arrivalTime
startTime = Heure à laquelle le processus a commencé à s'exécuter
finishTime = Heure à laquelle le processus a terminé son exécution
Vous pouvez garder une trace du temps actuel écoulé dans le système (timeElapsed
). Affectez tous les processeurs à un processus au début et exécutez jusqu'à ce que le processus le plus court soit terminé. Attribuez ensuite ce processeur qui est libre au prochain processus dans la file d'attente. Faites-le jusqu'à ce que la file d'attente soit vide et tous les processus sont exécutés. De plus, chaque fois qu'un processus commence à s'exécuter, il enregistre son startTime
, une fois terminé, enregistre son finishTime
(tous deux identiques à timeElapsed
). De cette façon, vous pouvez calculer ce dont vous avez besoin.