Vous êtes sur la page 1sur 9

TD révision

Ordonnancement des processus


Considérez les 5 processus suivants, chacun avec leur temps d'arrivée et leur durée
d'exécution.
Pour chaque algorithme d’ordonnancement : FCFS, SJF, RR et avec priorité :
1- Dresser le diagramme de Gantt et la file d’attente
2- Calculer le temps de rotation, le temps d’attente, le temps de rotation moyen, le temps
d’attente moyen et le débit.
1- Ordonnancement des processus: FCFS

T=0 T=1 T=2 T=3 T=4 T=7 T=8 T=10


P1 P2 P2 P2 P2 P3 P4 P5
P3 P3 P3 P4 P5
P4 P4 P5
P5

P1 P2 P3 P4 P5

0 4 7 8 10 15
1- Ordonnancement des processus: FCFS
proces T. Exécution Termin T.séjour= T.attente T.Séjour T.Attente Débit
sus Arrivé =BT aison T.rotatio moyen moyen
e n
P1 0 4 4 4-0=4 4-4=0 (4+6+6+7 (0+3+5+5 5/15 =
+11) / 5 +6) /5 =
=
P2 1 3 7 7-1=6 6-3=3

6,8 3,8 0,33


P3 2 1 8 8-2=6 6-1=5

P4 3 2 10 10-3=7 7-2=5

P5 4 5 15 15-4=11 11-5=6
2- Ordonnancement des processus: SJF

T=0 T=1 T=2 T=3 T=4 T=7 T=8 T=10


P1 P2 P2 P2 P2 P3 P4 P5
P3 P3 P3 P4 P5
P4 P4 P5
P5

P1 P2 P3 P4 P5

0 4 7 8 10 15
3- Ordonnancement des processus: RR

• On respecte le temps d’arrivée de chaque processus et la file d’attente sera


triée selon l’ordre d’arrivée.
4- Ordonnancement des processus: par priorité non-préemptive

• On respecte le temps d’arrivée de chaque processus


• la file d’attente sera triée selon les priorités des processus.
• Puisque c’est un algorithme par priorité non préemptive, chaque
processus doit compléter son temps d’exécution sans interruption.
5- Ordonnancement des processus: par priorité-préemptive

• On respecte le temps d’arrivée de chaque processus


• la file d’attente sera triée selon les priorités des processus.
• Puisque c’est un algorithme par priorité préemptive, un processus
plus prioritaire sera exécuté en premier .
#include <stdio.h> printf("Thread 2 attempting to acquire mutex1\n");
#include <pthread.h> pthread_mutex_lock(&mutex1);
printf("Thread 2 acquired mutex1\n");
pthread_mutex_t mutex1, mutex2; pthread_mutex_unlock(&mutex1);
pthread_mutex_unlock(&mutex2);
void *thread_function1(void *arg) { return NULL;
printf("Thread 1 attempting to acquire mutex1\n"); }
pthread_mutex_lock(&mutex1);
printf("Thread 1 acquired mutex1\n"); int main() {
sleep(1); pthread_t thread1,Pour initialiser les mutex
thread2;
printf("Thread 1 attempting to acquire mutex2\n"); pthread_mutex_init(&mutex1, NULL);
pthread_mutex_lock(&mutex2); pthread_mutex_init(&mutex2, NULL);
printf("Thread 1 acquired mutex2\n"); pthread_create(&thread1, NULL, thread_function1, NULL);
pthread_mutex_unlock(&mutex2); pthread_create(&thread2, NULL, thread_function2, NULL);
pthread_mutex_unlock(&mutex1); pthread_join(thread1, NULL);
return NULL; pthread_join(thread2, NULL);
} pthread_mutex_destroy(&mutex1);
pthread_mutex_destroy(&mutex2);
void *thread_function2(void *arg) { return 0;
printf("Thread 2 attempting to acquire mutex2\n"); }
pthread_mutex_lock(&mutex2);
printf("Thread 2 acquired mutex2\n");
sleep(1); Pour attendre que les threads
se terminent

Pour détruire les mutex.

Vous aimerez peut-être aussi