Академический Документы
Профессиональный Документы
Культура Документы
Thme :
Ralis par :
2010/2011
S O M M A I R E
Introduction L'exclusion mutuelle Les Processus du point de vu de linux Cration d un processus - fork() Synchronisation Les signaux sous UNIX Le traitement des signaux Exemple pratique sous Linux
Introduction
Un processus est un programme en cours d excution. Il faut d emble faire la diffrence entre un programme qui est un chier inerte regroupant des instructions pour le CPU et un processus qui un lment actif (on parle donc de programme en cours d excution pour un processus). Un processus n est pas continuellement en train de s excuter. Si la machine comporte n processeurs identiques, un instant donn il y a au maximum n processus actifs (c est--dire en cours d excution). Figeons un processus pour en observer ses composantes. Nous trouvons : y Des donnes (variables globales, etc.) stockes dans une zone dela mmoire qui a t alloue au processus ; y La valeur des registres du processeur lors de l excution ; y les ressources qui lui ont t alloues par le systme d exploitation (mmoire principale, chiers ouverts, priphriques utiliss, etc.). L ensemble de ces composantes forme le conte xte d excution d un processus ou plus simplement le contexte. En fait, parmi tous les processus qui sont susceptibles de s excuter, seulement un petit nombre s excutent rellement. L allocation du processeur aux processus qui le rclament est appele l ordonnancement du processeur. L tat oprationnel d un processus est un moyen de reprsenter les diffrentes tapes de ce processus telles qu elles sont gres par le systme d exploitation. Le schma suivant montre les divers tats dans lesquels, dans une premire approche intuitive, peut se trouver un processus.
L'exclusion mutuelle :
Exemple simple : 1. Rservation() { 2. 3. 4 5. 6. } if (nbplace > 0) { // Rserver une place . nbplace = nbplace } 1;
Le programme Rservation() peut s'excuter de manire concurrente Sans prcaution, la variable nbplace peut atteindre une valeur infrieure 0 P1 excute le test de la ligne 2, trouve 1>0, puis est prempt par P2. P2 dmarre, excute la ligne 2, trouve galement 1>0, dcrmente nbplace puis se termine. P1 reprend ligne 3, dcrmente nbplace puis se termine. nbplace=-1 !
Pour remdier ce problme : Ralisation matrielle d'une section critique (masquage/dmasquage ; Test and set ; Swap) Ralisation entirement logicielle d'une section critique (Verrou, Smaph ore)
Les processus sous Unix apportent : La multiplicit des excutions. En effet, plusieurs processus peuvent tre l excution d un mme programme. La protection des excutions. Un processus ne peut excuter que ses instructions propres et ce de faon squentielle ; il ne peut pas excuter des instructions appartenant un autre processus. Les processus so us UNIX communiquent entre eux et avec le reste du monde grce aux appels systme. C est ce systme de communication entre processus sous Unix qui constitue le l conducteur du reste de l xpos
Le contexte d un processus est l ensemble des donnes qui permettent de reprendre l excution d un processus qui a t interrompu. Le contexte d un processus est l ensemble de 1 son tat ; 2 son mot d tat : en particulier La valeur des registres actifs ; Le compteur ordinal. 3 les valeurs des variables globales statiques ou dynamiques ; 4 son entre dans la table des processus ; 5 sa zone u ; 6 sa pile ; 7 les zones de code et de donnes. Quand il y a changement de processus courant, il y a ralisation d une commutation de mot d tat et d un changement de contexte. Une interruption est un signal lectrique reu sur l une des bornes du processeur. Ce signal est la consquence d un vnement extrieur ou intrne. Une fois que le signal est dtect, il faut terminer la cause de l interruption. Pour cela on utilise un indicateur, pour les diffrentes causes : on parle alors de vecteur d interruptions. Il existe trois grands types d interruptions : externes (indpendantes du processus) telles que les interventions de l oprateur, pannes, etc ; Droutements : erreur interne du processeur, dbordement, division par zro, etc (causes qui entranent la ralisation d une sau vegarde sur disque de l image mmoire core dump ) ; Appels systme : une demande d entre -sortie par exemple.
Un nouveau processus a t cr, il est considr comme le fils du processus qui a appel fork() Ce processus est une copie conforme de son pre. D'ailleurs, la prochaine instruction excuter sera la mme pour les deux : la condition if. La fonction fork() ne retourne pas la mme chose pour les deux processus. Pour le fils, il retournera 0. Pour le pre, il retournera le pid du fils (son numro de processus). Cette duplication implique certaines choses concernant les variables et les descripteurs de fichiers. Nous allons y venir.
Synchronisation
Il n y a pas de problme de synchronisation que si un des processus impliqus dans l accs en parallle la ressource partage la mod ifie ; si les processus en accs simultan sont tous en mode consultation, il n y a pas de problme de synchronisation puisque la ressource partage n est pas modifie.
processus qui sont cres ensuite dpendent de celui -ci. Une fois que le processus leader de votre session est termin (par un logout par exemple), le message SIGHUP est envoy tous ses fils qui vont se terminer leur tour. L'envoi de signaux : En shell: kill -num_du_signal num_du_processus En langage C: #include <signal.h> int kill (pid_t pid, int sig); valeur de pid: si >0, le signal ira en direction du processus de numro pid (nous laisserons de ct ici les cas pid =0, pid<0...) retour du kill: renvoie 0: l'appel s'est bien droul renvoie -1: l'appel s'est bien droul valeur de sig: <0 ou >NSIG: valeur incorrecte 0: pas de signal envoy mais test d'erreur: sert tester l'existence d'un processus de numro pid par exemple sinon: signal de numro sig
int nbClients = 0; sem_t clients, coiffeur; /* Initialiss 0 */ sem_t mutex; /* Initialis 1 */ void *threadClient(void *inutilise) { sem_wait(&mutex); /* Entrer dans la section critique */ if (nbClients == nbChaises + 1) { /* Si le sa lon est plein */ sem_post(&mutex); /* Sortir de la section critique */ return NULL; /* Sortir du salon */ } else { nbClients = nbClients + 1; /* Un client de plus */ } sem_post(&mutex); /* Sortir de la section critique */ sem_post(&clients); /* Se mettre dans la file */ sem_wait(&coiffeur); /* Attendre le coiffeur */ obtenirCoupe(); /* Se faire coiffer */ sem_wait(&mutex); nbClients = nbClients sem_post(&mutex); return NULL; /* Entrer dans la section critiqu e */ 1; /* Un client de moins */ /* Sortir de la section critique */
/* Sortir du salon */
Conclusion :
La ralisation de cet expos nous a permis de nous familiariser avec les notions de base des systmes d exploitation (synchronisation et exclusion mutuelle). De la compilation l excution de programme sous linux en illus trant les notions de processus, thread, mmoire partage etc.