2009 - 2010
Systèmes d’exploitation 2
TD n 1 : Rappel sur l’ordonnancement des processus et introduction à la
synchronisation
Mme Lilia SFAXI
Systèmes d’exploitation 2
Systèmes d’exploitation 2
TD n 1 : Rappel sur l’ordonnancement des processus et introduction à la
synchronisation
Ce premier TD est un rappel des notions vues au préalable concernant
l’ordonnancement des processus, ainsi qu’une introduction à la synchronisation des
processus avec la primitive fork.
Ordonnancement des processus
Le Tableau 1 décrit les données d'ordonnancement des processus.
1- Dessiner un schéma illustrant l'exécution de ces processus à l'aide de:
a. L'algorithme FCFS
b. L'algorithme SJF
c. L'algorithme SRT
d. L'algorithme à Tourniquet (quantum=2)
Tableau 1 : Données de l'ordonnancement des processus
Processus Date d’arrivée Temps de traitement
A 0,000 3
B 1,001 6
C 4,001 4
D 6,001 2
2- Donner le temps de rotation moyen de ces processus pour chacun des
algorithmes précédents.
1
TD1 : Rappel sur l’ordonnancement des processus
Introduction à la synchronisation des processus
La fonction Fork :
Un fork est une fonctionnalité sous les systèmes Unix ou Linux qui permet à un
processus de se dupliquer, par exemple en vue de réaliser un second traitement,
parallèlement au premier.
Le créateur d'un nouveau processus est appelé le père et le nouveau processus, le fils.
Penchons nous maintenant sur le signature de cette fonction :
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
Comme vous le voyez, cette fonction renverra une variable du type pid_t (ce type est
contenu dans le fichier sys/types.h) et ne prend aucun argument. Si la fonction
échoue, la valeur renvoyée sera -1, aucun fils ne sera créé et errno contiendra le code
de l'erreur. Par contre, si la fonction réussit, la valeur renvoyée sera différente dans le
cas du fils et du père.
Dans le cas du fils, la fonction fork renverra 0, par contre, dans le cas du père, la
fonction renverra le PID du fils.
Applications :
- Proposer un programme en C utilisant la primitive fork, qui affiche « Je suis le
processus père » s’il s’agit du père, et « je suis le processus fils » s’il s’agit du
fils.
- Soit les deux extraits de programmes suivants :
fork( ) ; for (int i = 0 ; i<3 ; i++){
fork( ) ; fork( ) ;
fork( ) ; }
- Combien obtient-on de processus à la fin ? Et quel est l’effet de fork sur les
variables locales et globales ?
2