Skip to content

Une librairie de parallélisation maximale des taches en système d'exploitation.

Notifications You must be signed in to change notification settings

kelyedoe/par-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projet Système

🔭 Projet: Librairie python de parallélisation maximale des tâches.

lib size files files files files

⏫ Description du projet:

Développer une libraire en Python pour automatiser la parallélisation maximale de systèmes de tâches. L’utilisateur doit pouvoir spécifier des tâches quelconques, interagissant à travers un ensemble arbitraire de variables, et pouvoir :

  1. obtenir le système de tâches de parallélisme maximal réunissant les tâches en entrées.
  2. exécuter le système de tâches de façon séquentielle, tout en respectant les contraintes de précédence.
  3. exécuter le système de tâches en parallèle, tout en respectant les contraintes de précédence.

⏫ Fichiers (files)

File Description
01 TaskClass.py La class Task permet la création de tâches.
02 TaskSystemClass.py Le fichier TaskSystemClass.py regroupe l'ensemble des méthodes qui vont être exécutés pour réaliser le parallélisme maximal.
03 Test.py Le fichier test.py permet de tester les différentes fonctionnalitées que propose la librairie de parallélisation maximale.
04 Bonus.py contient le code python pour réaliser la partie bonus du projet.

⏫ Installation et Exécution du projet

Dépendances

🔄 La librairie GraphViz: https://graphviz.org/

🔄 La librairie NetworkX

$ pip install networkx

🔄 La librairie Matplotlib

python -m pip install -U pip

python -m pip install -U matplotlib

🔄 Exécution du projet

Méthodes Description Paramètres
getDependencies('TaskName') Nom d'une tâche Elle permet de retourner la liste des tâches précédentes à la tâche en paramètre.
runSeq() None Elle permet de faire une exécution séquentielle des tâches à partir d'une tâche définie. Elle utilise la méthode topological_sort() pour gérer l'ordonancement des tâches.
run_par() None permet l'exécution parallèle des tâches en tenant compte du parallélisme maximal des tâches.
verifier_entrees() None Elle prend en paramètre la liste des tâches et les contraintes de précédence sur le système de tâches. Cette méthode sera utilisée pour vérifier:l'unicité des noms des tâches dans le système,vérifier si toutes les tâches citées dans les contraintes sont bien existentes,vérifier si toutes les tâches ont une tâche précédente,Vérifier si le système des tâches est déterminé c-à-d: pour toute tâche t1, t2 du système il n'y a pas d'interférence.
draw() None Cette méthode permet de tracer le graphe d'éxécution des tâches. Nous utilisons la librairie graphviz et aussi la librairie matplotlib qui fourni un certain nombre de fonctions pour faire les représentations graphiques de notre système de tâches.
detTestRnd() None Cette méthode permet de montrer si le système est déterminimé.

⏫ Exemple d'exécution du projet

L'exécution et les tests de la librairie se font dans le fichier test.py.

⚡1. Création de 5 tâches t1, t2, t3, t4, t5: Projet Système

⚡2. Créer un système de tâches: système des tâches

⚡3. Vérification des contraintes sur le système des tâches Projet Système

😄Output

  • Les tâches sont uniques
  • Tous les noms des tâches existent
  • Le système des tâches est déterminé

⚡4. Application de la fonction getDependencies(): Projet Système

😄Output

  • ['T2', 'T3']

⚡5. Exécution de runSeq(): Projet Système

😄Output:

  • Finished task T1
  • Starting task T2
  • Finished task T2
  • Starting task T3
  • Finished task T3 Starting task T4
  • Finished task T4
  • Starting task T5
  • Finished task T5

⚡6. Exécution de la méthode run_par() Projet Système

😄 Output:

  • Starting task T1
  • Finished task T1
  • Starting task T2
  • Finished task T2
  • Starting task T3
  • Finished task T3
  • Starting task T4
  • Finished task T4
  • Starting task T5
  • Finished task T5

⚡7. Exécution de la fonction de draw_no() Projet Système

⚡8. Exécution de la fonction de draw_no() Projet Système

⚡9. Test Randomisé de déterminisme Projet Système

⚡10. Coût du parallélisme Projet Système

😄 Output

  • Finished task T4
  • Starting task T5
  • Finished task T5
  • Starting task T1
  • Starting task T2
  • Starting task T3
  • Starting task T4
  • Starting task T5
  • Finished task T5
  • Finished task T3
  • Finished task T4
  • Starting task T3
  • Finished task T3
  • Starting task T4
  • Finished task T4
  • Starting task T5
  • Finished task T5
  • Starting task T1
  • Starting task T2
  • Starting task T3
  • Starting task T4
  • Starting task T5
  • Finished task T3
  • Finished task T5
  • Finished task T4
  • Finished task T1
  • Finished task T2
  • Temps d'exécution moyen en séquentiel : 9.04371 secondes
  • Temps d'exécution moyen en parallèle : 9.04117 secondes
  • La différence de temps d'exécution est de : 0.00253 secondes

⚡11. Bonus

NB: Une exécution du graphe 3 du TD. Après avoir appliqué les différentes méthodes de la librairie sur les systèmes S2 et S3 créés grâce aux graphes du TD, on peut déduire que le programme a bien pris en compte les nouveaux systèmes.

Les tests des méthodes runSeq() et run() génèrent des erreurs ce qui prouvent que les graphes 2 et 3 ne sont pas exprimables en terme d'opérations de composition parallèle et séquentielle.

Bonus

⏫ Crédits:

About

Une librairie de parallélisation maximale des taches en système d'exploitation.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages