TP #4 : Files

Ordonnancement par files de priorités

Tout processus a besoin d’accéder au CPU pour pouvoir s’exécuter. L’ordonnanceur est l’élément du Système d’Exploitation responsable du choix de l’ordre d’exécution des processus sur le (ou les) CPU. Dans cette section, on s’intéresse à une structure de données permettant d’implémenter une politique d’ordonnancement basée sur les priorités sous Unix. La politique que nous considérons combine deux mécanismes:

  1. Priorité: l’ordonnanceur choisit toujours d’exécuter le (un des) processus de priorité maximale qui est en attente. Les processus de même priorité sont exécutés dans leur ordre d’arrivée ;
  2. Tourniquet (round robin) : lorsqu’un processus s’exécute, il s’exécute au maximum pour un quantum de temps fixé, disons 5ms. A l’issue du quantum alloué, si le processus n’est pas terminé il est préempté, remis en attente en fin de la file, et l’ordonnanceur passe au processus suivant.

Un processus est caractérisé par :

  • Son identifiant entier dit process id (pid) ;
  • Son nom ;
  • Une durée d’exécution (en secondes) ;
  • Une priorité d’exécution allant de 0 (plus prioritaire) à 4 (moins prioritaire).

Questions

  1. Écrire la structure processus qui représente un processus Unix ;
  2. Proposer une structure de données file_prio pour gérer la file de priorité de l’ordonnanceur.
  3. Écrire une fonction ajouter paramétrée par une file_prio et un processus, qui ajoute le processus dans la file de priorité ;
  4. Écrire une fonction suivant, paramétrée par une file_prio, qui renvoie (par valeur de retour ou paramètre) le processus suivant à exécuter.
  5. Écrire une fonction lire qui permet, à partir d’une chaîne de caractères, de renvoyer une variable de type processus. Un exemple de chaîne serait 5 firefox 600 0 (processus d’identifiant 5 qui s’appelle firefox de priorité maximale et qui va durer 5 minutes)
  6. Écrire une fonction charger qui à partir d’un fichier charge les processus correspondants. Exemple de fichier:
     001 /sbin/launchd 70 1
     314 /usr/libexec/logd 40 4
     316 /usr/libexec/UserEventAgent 50 3
     318 /System/Library/uninstalld 25 2
     319 /System/Library//fseventsd 60 3
     320 /System/Library/mediaremoted 60 4
     322 /usr/sbin/systemstats 15 3
     324 /usr/libexec/configd 55 2
     326 /System/powerd 50 3
     332 /usr/libexec/remoted 65 1
     337 /usr/libexec/watchdogd 70 2
     341 /System/Library/mds 50 3
     343 /usr/libexec/kernelmanagerd 55 0
     344 /usr/libexec/diskarbitrationd 55 1
     348 /usr/sbin/syslogd 5 0
     351 /usr/libexec/thermalmonitord 45 1
     352 /usr/libexec/opendirectoryd 50 3
     353 /System/Library/apsd 5 0
     354 /System/Library/launchservicesd 75 3
     355 /usr/libexec/timed 55 3
     356 /System/Library/usbmuxd 70 1
     357 /usr/sbin/securityd 35 3
     358 auditd 35 2
     360 /usr/libexec/locationd 60 1
     362 autofsd 55 1
     363 /usr/libexec/dasd 45 1
     365 /usr/sbin/distnoted daemon 5 0
     369 /System/Library/CoreServices/logind 50 1
    
  7. Écrire une fonction executer qui affiche l’ordonnancement des processus qui seront exécutés.

Déliverable

Pour l’évaluation de ce TP vous enverrez votre TP (votre fichier C) le plus tard le 04/02/2023 23:59 CET à l’adresse suivante. Tout retard entrainera des pénalités.