IMA4 2017/2018 EC4 : Différence entre versions
(→Description du projet) |
(→Documents) |
||
(3 révisions intermédiaires par un autre utilisateur non affichées) | |||
Ligne 26 : | Ligne 26 : | ||
struct event p1_events[]={ {30,OP_CLAIM,R1}, {70,OP_RELEASE,R1}, {100,OP_STOP} }; | struct event p1_events[]={ {30,OP_CLAIM,R1}, {70,OP_RELEASE,R1}, {100,OP_STOP} }; | ||
struct event p2_events[]={ {80,OP_CLAIM,R1}, {180,OP_RELEASE,R1}, {200,OP_STOP} }; | struct event p2_events[]={ {80,OP_CLAIM,R1}, {180,OP_RELEASE,R1}, {200,OP_STOP} }; | ||
− | struct event p3_events[]={ {40,OP_CLAIM,R1}, {160,OP_RELEASE,R1}, {300,OP_STOP}} ; | + | struct event p3_events[]={ {40,OP_CLAIM,R1}, {160,OP_RELEASE,R1}, {300,OP_STOP} }; |
struct event p4_events[]={ {400,OP_STOP} }; | struct event p4_events[]={ {400,OP_STOP} }; | ||
struct process procs[]={ | struct process procs[]={ | ||
Ligne 39 : | Ligne 39 : | ||
* le nombre d'occurrences de la ressource disponibles. | * le nombre d'occurrences de la ressource disponibles. | ||
− | Pour simuler les divers algorithmes d'ordonnancement vous utiliserez un algorithme "bourrin" : | + | Pour simuler les divers algorithmes d'ordonnancement, vous utiliserez un algorithme "bourrin" : |
* faites partir le temps de zéro puis rentrez dans une boucle infinie où le temps est incrémenté d'une milliseconde par itération ; | * faites partir le temps de zéro puis rentrez dans une boucle infinie où le temps est incrémenté d'une milliseconde par itération ; | ||
* pour chaque itération vérifiez si un événement se produit (arrivé d'un processus, événement pour le processus courant, fin du quantum de temps, etc) ; | * pour chaque itération vérifiez si un événement se produit (arrivé d'un processus, événement pour le processus courant, fin du quantum de temps, etc) ; | ||
Ligne 47 : | Ligne 47 : | ||
A chaque événement imprimez un code permettant de suivre l'exécution : | A chaque événement imprimez un code permettant de suivre l'exécution : | ||
* pour la réclamation ou la libération d'une ressource affichez le temps global, le caractére <code>R</code> comme ressource, son numéro et <code>+</code> ou <code>-</code> suivant qu'il s'agit d'une réclamation ou d'une libération ; | * pour la réclamation ou la libération d'une ressource affichez le temps global, le caractére <code>R</code> comme ressource, son numéro et <code>+</code> ou <code>-</code> suivant qu'il s'agit d'une réclamation ou d'une libération ; | ||
− | * pour le changement d'état d'un processus, affichez le temps global, le caractére <code>P</code> comme processus, son numéro et <code>[</code> ou <code>] | + | * pour le changement d'état d'un processus, affichez le temps global, le caractére <code>P</code> comme processus, son numéro et <code>[</code> ou <code>]</code> suivant qu'il s'agit de l'activation ou de la mise en sommeil du processus. |
− | Pour chaque simulation lancez les 4 algorithmes d'ordonnancement vus en cours. Vérifiez votre programme avec les différents exercices d'ordonnancement | + | Pour chaque simulation lancez les 4 algorithmes d'ordonnancement vus en cours. Vérifiez votre programme avec les différents exercices d'ordonnancement des DS de système des années passées. |
=== Planning prévisionnel === | === Planning prévisionnel === | ||
Ligne 57 : | Ligne 57 : | ||
== Sources == | == Sources == | ||
− | == Documents == | + | == Documents Rendus== |
+ | |||
+ | [[Fichier:Scheduler_Mairesse.zip]] |
Version actuelle datée du 14 juin 2018 à 15:41
Sommaire
Présentation du projet
Contexte
L'élève continue son semestre S8 à l'école.
Objectif
Il vous est demandé d'écrire un programme C permettant de simuler l'ordonnancement de processus avec gestion de ressources communes selon les 4 algorithmes vu en cours : fifo, tourniquet, priorité avec préemption et enfin priorité avec quantum de temps et âge.
Description du projet
Vous commencerez par créer les structures de données pour pouvoir décrire, dans le code C, les processus que votre ordonnanceur va devoir gérer.
Les caractéristiques des processus à prendre en compte sont :
- un numéro permettant d'identifier les processus ;
- une date de départ du processus par rapport à une horloge globale ;
- les divers événements du processus par rapport à son horloge interne correspondant au temps passé en exécution :
- réclamation d'une ressource commune ;
- libération d'une ressource commune ;
- terminaison du processus.
Un exemple de description de processus est donné ci-après.
int nb_procs=4; struct event p1_events[]={ {30,OP_CLAIM,R1}, {70,OP_RELEASE,R1}, {100,OP_STOP} }; struct event p2_events[]={ {80,OP_CLAIM,R1}, {180,OP_RELEASE,R1}, {200,OP_STOP} }; struct event p3_events[]={ {40,OP_CLAIM,R1}, {160,OP_RELEASE,R1}, {300,OP_STOP} }; struct event p4_events[]={ {400,OP_STOP} }; struct process procs[]={ {.number=1,.start=150,.priority=1,.events=p1_events}, {.number=2,.start=100,.priority=2,.events=p2_events}, {.number=3,.start=50,.priority=3,.events=p3_events}, {.number=4,.start=0,.priority=4,.events=p4_events} };
Les caractéristiques des ressources à prendre en compte sont :
- un numéro permettant d'identifier les ressources ;
- le nombre d'occurrences de la ressource disponibles.
Pour simuler les divers algorithmes d'ordonnancement, vous utiliserez un algorithme "bourrin" :
- faites partir le temps de zéro puis rentrez dans une boucle infinie où le temps est incrémenté d'une milliseconde par itération ;
- pour chaque itération vérifiez si un événement se produit (arrivé d'un processus, événement pour le processus courant, fin du quantum de temps, etc) ;
- voyez si un nouvel événement se traduit par un changement d'état du processus courant et l'activation d'un autre processus ;
- si tous les processus sont terminés, sortez de la boucle.
A chaque événement imprimez un code permettant de suivre l'exécution :
- pour la réclamation ou la libération d'une ressource affichez le temps global, le caractére
R
comme ressource, son numéro et+
ou-
suivant qu'il s'agit d'une réclamation ou d'une libération ; - pour le changement d'état d'un processus, affichez le temps global, le caractére
P
comme processus, son numéro et[
ou]
suivant qu'il s'agit de l'activation ou de la mise en sommeil du processus.
Pour chaque simulation lancez les 4 algorithmes d'ordonnancement vus en cours. Vérifiez votre programme avec les différents exercices d'ordonnancement des DS de système des années passées.