Revision sheet: Gestion des processus et threads sous Linux

Plan du Cours

  1. Processus et contexte
  2. États d'un processus
  3. Processus sous Linux
  4. Création et fin des processus
  5. Attente et exec
  6. Notion de thread
  7. Gestion des threads sous Linux

1. Processus et contexte

Notions clés & Définitions

  • Contexte du processus : Le contexte du processus regroupe ses Ă©lĂ©ments qui dĂ©terminent son exĂ©cution, notamment le code/donnĂ©es/pile et l’état processeur avec ses registres.

Points essentiels

  • Un processus est un programme en cours d’exĂ©cution auquel on associe un environnement mĂ©moire (code, donnĂ©es, pile) et un environnement processeur (CO, PSW, registres).
  • Le processus passe par un contexte qui permet Ă  l’ordonnanceur de le suspendre et de le reprendre plus tard.

Astuce mémo

MĂ©moire + CPU = contexte du processus (ce que ça contient et ce que le processeur a Ă  l’instant).

2. États d'un processus

Notions clés & Définitions

  • PrĂȘt Ready : L’état prĂȘt correspond Ă  l’attente du processeur : le processus est en attente d’ĂȘtre Ă©lu par l’ordonnanceur.
  • Élu Running : L’état Ă©lu signifie que le processus est actuellement exĂ©cutĂ© par le processeur.
  • BloquĂ© Stopped : L’état bloquĂ© correspond Ă  l’attente d’une ressource autre que le processeur, comme une opĂ©ration d’E/S.

Points essentiels

  • Lors de l’exĂ©cution, un processus passe par PrĂȘt, Élu et BloquĂ©.
  • La transition 1 (Ă©lection) survient quand le processeur est libre et le premier processus prĂȘt est choisi pour s’exĂ©cuter.
  • La transition 2 (blocage) arrive quand, une fois Ă©lu, le processus demande une ressource et quitte le processeur pour passer bloquĂ©.
  • La transition 4 (rĂ©quisition) survient quand l’ordonnanceur retire le processeur Ă  un processus pour le donner Ă  un autre prĂȘt (ex. fin de quatum).

Astuce mémo

Élu → (demande ressource) BloquĂ© ; PrĂȘt → (CPU libre) Élu ; Élu → (quatum fini) PrĂȘt.

3. Processus sous Linux

Notions clés & Définitions

  • Processus 0 : Le processus 0 est créé lors du dĂ©marrage : il est lancĂ© aprĂšs le chargement d’une partie du systĂšme d’exploitation en RAM.
  • init pid 1 : Le processus init correspond au processus de numĂ©ro de PID 1 créé par le processus 0.
  • DĂ©mons pid 2 : Les dĂ©mons correspondent aux processus de PID 2 créés par le processus 0 pendant le dĂ©marrage.

Points essentiels

  • Au dĂ©marrage, le bootstrap (ROM) charge une partie du systĂšme pour crĂ©er le processus 0.
  • Le processus 0 crĂ©e init (PID 1) et des dĂ©mons (PID 2), puis d’autres processus sont créés Ă  partir d’init.
  • Chaque processus a un pĂšre, et s’il perd son pĂšre il est adoptĂ© par le processus init.

Astuce mémo

PID 0 lance PID 1 et PID 2, puis init orchestre le reste.

4. Création et fin des processus

Notions clés & Définitions

  • fork() : fork() crĂ©e un nouveau processus en dupliquant le code et les donnĂ©es du processus pĂšre.
  • exit() : exit(int vstatus) termine volontairement l’exĂ©cution d’un processus via un arrĂȘt volontaire avec un statut.

Points essentiels

  • fork() est exĂ©cutĂ©e par le processus pĂšre et retourne -1 en cas d’échec, 0 au processus fils, et un PID positif du fils au processus pĂšre.
  • Un processus se termine soit par exit(int vstatus), soit par un arrĂȘt forcĂ© via le signal kill, soit par une erreur.
  • Quand un fils se termine, son Ă©tat de terminaison est enregistrĂ© dans son PCB, les ressources sont libĂ©rĂ©es, et le processus passe Ă  l’état Zombie.
  • Si un processus est tuĂ© par kill, ce signal est envoyĂ© aussi Ă  tous ses processus fils.

Astuce mémo

fork sépare, exit clÎt : pÚre voit le PID du fils, fils reçoit 0.

5. Attente et exec

Notions clés & Définitions

  • wait() : wait(int *state) permet au pĂšre soit d’attendre la terminaison d’un fils, soit de vĂ©rifier si un fils est dĂ©jĂ  terminĂ©.
  • waitpid : waitpid(p, state, 0) attend la terminaison soit de n’importe quel fils, soit d’un fils de PID p quand p est un entier > 0.
  • exec : exec remplace le code exĂ©cutable d’un processus par un autre programme sans crĂ©er de nouveau processus.

Points essentiels

  • wait(state) bloque le processus appelant jusqu’à ce qu’au moins un fils se termine, puis rend le PID du fils terminĂ© en code retour.
  • DĂšs que le pĂšre prend connaissance de la mort du fils, il dĂ©truit le PCB du fils.
  • waitpid(p, state, 0) avec p>0 bloque jusqu’à ce que le fils de PID p soit terminĂ©.
  • Linux propose une famille d’appels exec (avec la bibliothĂšque <sys/types.h>) pour remplacer le code par un programme spĂ©cifiĂ© par Path ou File, avec recouvrement mĂ©moire plutĂŽt que crĂ©ation d’un nouveau processus.
  • En cas de succĂšs de exec, l’ancien code est remplacĂ© et n’exĂ©cute pas les instructions suivantes, alors qu’en cas d’échec l’exĂ©cution continue Ă  l’instruction qui suit l’appel.

Astuce mémo

wait = attendre la mort d’un fils ; exec = remplacer son programme sans recrĂ©er un PID.

6. Notion de thread

Notions clés & Définitions

  • Thread principal : Le thread principal est le fil d’exĂ©cution créé au dĂ©marrage du processus, correspondant Ă  l’exĂ©cution du main.
  • Fil d’exĂ©cution : Un fil d’exĂ©cution est l’unitĂ© d’exĂ©cution du processus, associĂ©e Ă  l’exĂ©cution du code par un thread.
  • Processus multithread : Un processus multithread exĂ©cute plusieurs threads en concurrence, sous l’action du processus lourd.

Points essentiels

  • En C, chaque processus commence par exĂ©cuter main, aussi appelĂ© thread principal.
  • Un thread exĂ©cute une partie du processus, gĂ©nĂ©ralement une fonction, et s’exĂ©cute en concurrence avec le processus lourd.
  • Dans un processus multithread, les threads partagent et s’appuient sur les ressources du processus, tout en ayant chacun leur propre pile et registres au moment de l’exĂ©cution.

Astuce mémo

main lance le thread principal ; plusieurs piles = plusieurs threads dans le mĂȘme processus.

7. Gestion des threads sous Linux

Notions clés & Définitions

  • pthread_create : pthread_create crĂ©e un thread qui exĂ©cute une fonction fournie avec un argument, en utilisant des attributs Ă©ventuellement par dĂ©faut.
  • pthread_join : pthread_join attend la fin d’un thread en rĂ©cupĂ©rant son statut, en prĂ©cisant le tid du thread Ă  attendre.
  • pthread_exit : pthread_exit termine un thread en renvoyant une valeur d’état (argument) au mĂ©canisme de terminaison.

Points essentiels

  • pthread_create(tid, attr, nomFonction, arg) crĂ©e un thread et exĂ©cute nomFonction avec arg, et NULL pour attr signifie valeurs par dĂ©faut.
  • pthread_join(tid, status) attend la fin d’un thread et joue un rĂŽle analogue Ă  waitpid cĂŽtĂ© processus, mais avec un tid de thread.
  • pthread_exit(valeur_de_retour) arrĂȘte l’exĂ©cution du thread en retournant une valeur de terminaison.
  • Dans l’exemple, le thread créé exĂ©cute presentation puis appelle pthread_exit(NULL, tandis que le thread principal affiche son message aprĂšs pthread_join.

Astuce mémo

create pour démarrer, join pour attendre, exit pour quitter.

PiÚges & confusions fréquents

  1. Confondre contexte mémoire (code/données/pile) et contexte processeur (CO, PSW, registres) : ils sont tous deux dans le contexte du processus.
  2. Croire que la transition de blocage est due au fait que le processeur est retiré : en réalité le processus devient bloqué en demandant une ressource.
  3. Mélanger fork() et exec() : fork() crée un nouveau processus (PID), tandis que exec() remplace le code sans créer de nouveau processus.
  4. Interpréter le code de retour de fork() : le fils reçoit 0 et le pÚre reçoit le PID positif du fils, tandis que -1 indique un échec.
  5. Penser que wait ne bloque jamais : wait(state) bloque jusqu’à la terminaison d’un fils.
  6. Se tromper sur l’attente de thread : pthread_join attend un tid de thread, et non un PID de processus.
  7. Croire que pthread_exit termine tout le processus : pthread_exit termine l’exĂ©cution du thread courant, pas l’ensemble des threads.

Checklist Examen

  1. Définir un processus et citer les deux parties du contexte (mémoire et processeur).
  2. Citer les trois Ă©tats d’un processus (PrĂȘt, Élu, BloquĂ©) et donner le sens de chacun.
  3. Expliquer au moins deux transitions entre états en mentionnant la condition (élection quand CPU libre, réquisition en fin de quatum).
  4. DĂ©crire le rĂŽle du processus 0 au dĂ©marrage et nommer ce qu’il crĂ©e (init PID 1 et dĂ©mons PID 2).
  5. Dire pourquoi chaque processus a un pĂšre et ce qui se passe si le pĂšre disparaĂźt (adoption par init).
  6. Rappeler le comportement de fork() : duplication code/données et cas de retour (-1, 0, PID positif au pÚre).
  7. DĂ©crire les modes de terminaison d’un processus (exit, kill, erreur) et ce qui arrive au fils (PCB, libĂ©ration ressources, Ă©tat Zombie).
  8. Expliquer wait() : blocage, destruction du PCB, et code retour égal au PID du fils terminé.
  9. PrĂ©ciser waitpid(p, state, 0) avec p>0 : blocage jusqu’à terminaison du fils de PID p.
  10. DĂ©finir exec et distinguer succĂšs vs Ă©chec : remplacement du code vs exĂ©cution aprĂšs l’appel.
  11. Donner la définition opérationnelle de thread : unité rattachée au processus exécutant une fonction en concurrence.
  12. Relier thread principal Ă  l’exĂ©cution de main dans un processus.
  13. Décrire le triplet de primitives threads sous Linux : pthread_create (démarrage), pthread_join (attente), pthread_exit (terminaison du thread).

Test your knowledge

Test your knowledge on Gestion des processus et threads sous Linux with 11 multiple-choice questions with detailed corrections.

1. Quelles composantes font partie du contexte d’un processus ?

2. Qu'est-ce que le contexte d'un processus en informatique ?

Take the quiz →

Review with flashcards

Memorize the key concepts of Gestion des processus et threads sous Linux with 9 interactive flashcards.

Contexte du processus — dĂ©finition ?

Ensemble mémoire et environnement processeur.

Contexte du processus FRENCH

Contient code, données, pile et registres

États d'un processus — principaux ?

PrĂȘt, Élu, BloquĂ©.

See flashcards →

Similar courses

Create your own revision sheets

Import your course and AI generates sheets, quizzes and flashcards in 30 seconds.

Sheet generator