Implementation d'un ordonnanceur

Thème 3 - Partie A

Objectifs

  • Implémenter un ordonnanceur avec l'algorithme du tourniquet

1. Processus

Comment représenter en machine un processus ?

Les processus sont représentés par des dictionnaires avec des clés :
  • name : le nom du processus
  • submit : le tick de soumission du processus
  • duration : le temps d'exécution du processus

Exemple


    {"name": "zoom", "submit": 8, "duration": 6},
 

Ensemble de processus


Comment stocker l'ensemble des processus :
  • Un tableau nommé process_list

process_list = [
  {"name": "firefox", "submit": 3, "duration": 5},
  {"name": "vlc", "submit": 5, "duration": 4},
  {"name": "chrome", "submit": 0, "duration": 3},
  {"name": "discord", "submit": 2, "duration": 6},
  {"name": "spotify", "submit": 7, "duration": 2},
  {"name": "steam", "submit": 4, "duration": 5},
  {"name": "code", "submit": 6, "duration": 3},
  {"name": "gimp", "submit": 1, "duration": 4},
  {"name": "thunderbird", "submit": 0, "duration": 2},
  {"name": "zoom", "submit": 8, "duration": 6},
  {"name": "slack", "submit": 10, "duration": 1},
  {"name": "terminal", "submit": 0, "duration": 2}
]

Ordonnanceur

L'ordonnanceur se base sur 3 fontions :
  • add_process(t)
  • select_process()
  • run_process(p)

add_process(t)

La fonction add_process(t) prend un paramètre t un entier représentant le tick en cours.
On parcourt la liste process_list, pour chaque processus on compare son tick de soumission au paramètre t et s'ils sont égaux on ajoute le processus à la liste process_file

select_process()

La fonction select_process() ne prend pas de paramêtre.
On supprime et retourne le premier élément de la liste process_file.

run_process(p)

La fonction run_process(p) prend en paramêtre un processus, p.
  • On décrémente de 1 la valeur de la clé duration
  • Si cette clé duration reste supérieure strictement à 0, alors on le place à nouveau dans process_file

Algorithme

Initialisation :
  • Mettre le tick à 0
  • Ajouter les processus soumis au tick 0

Boucle
Tant que process_file n'est vide :
  • On selectionne le processus en tête de file
  • On execute le processus sélectionné
  • On incremente le tick de 1
  • On ajoute les processus soumis au tick en cours