Introduction!
"#$%&'()%!*+,-.($%/&!
! !!
,%&-)../0(%!1'2!
! !! ! ! ! "#!$%&!'()*%&&+&!
0%.+1##(-&%!5671-&%!
0%.+1##(-&%!86&-946&-:/%.!
0%.+1##(-&%!2%!3)4-%&.!
Gestionnaire CPU! Gestionnaire CPU!
! Il est responsable de lʼallocation des processus pour exécuter les ! Remarques !
instructions dʼun programme!
1. Manipuler les threads nécessite moins de temps que manipuler
! Programme : entité inactive soumise par un utilisateur (ex. fichier)! les processus car plus complexes!
-- Un programme est composé de plusieurs processus!
2. Certains systèmes dʼexploitation supportent de multiple threads
! Processus : entité active qui nécessite un ensemble de ressources, avec un processus unique. Et dʼautres supportent de multiple
y compris la CPU, pour exécuter sa tâche.! threads avec de multiple processus. !
! !! ! -- Un processus peut consister en plusieurs threads !
3. Dans un système temps partagé, le multithreading permet
dʼaugmenter la réactivité (responsiveness), le partage de
! Thread : créé par un processus, il peut être exécuté indépendamment
ressources, et décroître lʼoverhead.!
de son processus parent. !
! !!
Abstraction des Processus! Abstraction des Processus!
! Exemple : 2 programmes A et B!
! ! Etats dʼun processus!
1. Trouver lʼentrée du Job A ! !
2. Identifier les ressources nécessaires à A ! ! Nouveau : en cours de création!
3. Exécuter les processus : une étape un processus ! ! Prêt : en attente dʼobtenir la CPU!
" Arrivée dʼune interruption!
! Exécution : en cours dʼexécution dans la CPU !
4. Réaliser un changement de contexte vers Job B!
5. Trouver lʼentrée du Job B! ! Bloqué : suspendu, pas prêt à être exécuté !
6. Identifier les ressources nécessaires au Job B ! • Pourquoi ? Attente dʼun événement.
7. Exécuter les processus : une étape un processus ! Ex : le processus fait une demande de lecture à partir du disque!
" Terminer le Job B! • Quand cesse-t-il dʼêtre bloqué ?
8. Réaliser un changement de contexte vers A! Ex : une fois les données prêtes, le disque émet un signal dʼinterruption!
9. Reprendre lʼexécution du processus interrompu ! ! Terminé : lʼexécution arrive à terme ou le programme a été forcé de
! ! " Terminer le Job A! sʼarrêter !
Abstraction des Processus! Abstraction des Processus!
! !! ! ! Quʼest-ce qui constitue un processus ?!
DE%#$%! 8&<$! =@6)/+1#! C%&7-#6!
"#$%&&/9+1#! 1. Un identifiant unique (PID)!
:(9).../*%+(!!! :(9).../*%+(!!!
7();(/<<%&! 7();(/<<%&! 2. Une image mémoire!
• Partie statique : code et données!
?-A#(,!&%9&-.%! ;%:/<$%!=>?!
• Partie dynamique : pile et tas!
3. Un contexte CPU : état des registres!
B,1:/6! ! Compteur programme (CP)!
! Opérandes courants!
! Pointeur vers la pile!
Processus : transitions entre les états!
4. Des descripteurs de fichiers : pointeurs vers les fichiers ouverts
et les périphériques!
1).3(456!7/(!58)(9).../*%+(!9%&!7()*%&&+&!
Abstraction des Processus! Abstraction des Processus!
! ! Structures de données du SE! Appels système (Unix)!
! PCB (Process Control Block) : structure qui contient toutes les 䕞 fork( ) crée un processus fils !
informations de chaque processus ! 䕞 Tous les processus sont crées à partir dʼun parent!
- Identifiant du processus ! 䕞 Le processus init est lʼancêtre de tous les processus !
- Etat courant du processus!
- Contexte du processus !
䕞 exec( ) permet à un processus dʼexécuter un exécutable donné!
! ! - Registres CPU (sauvegardés à la suspension du processus)! 䕞 exit( ) termine un processus!
- Mémoire Centrale : @ mémoire du processus!
䕞 wait( ) entraîne le blocage dʼun processus père jusquʼà ce que
- Ressources : physiques (disque, imprimante), fichiers !
le processus fils se termine!
- Priorité du processus : si applicable, pointeurs vers dʼautres
processus (parent)! ! Beaucoup de variantes de ces appels existent avec différents arguments!
Abstraction des Processus! Abstraction des Processus!
! ! Création dʼun processus (1)! Création dʼun processus (2)!
! Allocation de la mémoire et création dʼimages mémoire! ! Un nouveau processus est créé en faisant une copie ! !
• Charger le code et les données du disque! ! ! mémoire du parent!
• Créer une pile dʼexécution !
䕞 Le nouveau processus est ajouté à la liste des processus !
! Ouverture des fichiers basiques !
䕞 Lʼexécution du père et du fils commence juste après lʼappel fork( )!
• STD IN, OUT, ERR!
䕞 Les processus père et fils sʼexécutent et modifient les données
! Initialise les registres CPU ! mémoire indépendamment!
• PC pointe vers la première instruction!
Abstraction des Processus! Abstraction des Processus!
! ! Création dʼun processus : fork( )! ! ! Création dʼun processus : fork( )!
'2T!!e!
! !! !!!!9-2F$!!=)(>!G!H1-2!IJ!!! ! ! !! !!!!0.3!!'2!K!)7%.GX$1$1XY!ZF;[\;I!J!! !(T!!Xa%,,1!\1&,2b!X!!
!!'T!cd^e!
! !! !!!!!9-2F$!!!9J! ! ! ! ! ! ! •!!!"#H1)(+1#!2/!#1/H%(/!9&1)%../.!!!!
! ! ! !! !!!!!*B/(!!(]^_`!K!Xa%,,1!\1&,2b!X!J!! !*)70%!
!!!!(H%)!=)(>!?@! '2T!!e!
! !! !!!!!9)+C5%!!'!K!cd^e!J! ! !(T!!Xa%,,1!\1&,2b!X!!
! !! !!!!!9!K!=)(>!?!@J!!
•!!!O1#$%@$%!2/!3,.!&%)19-6!P!9(&+&!2%!! ! !! !!!!!9-2F$!!!9!J! ! ! ! ! ! ! !9T!^Scc!
! ! !!'T!cd^e!
! !! !!!!!0=!G9I!! !!!!!)%,/-!2/!9L&%! !9T!V!
! !! !!!!!A!! ! !! !!!!!9!K!=)(>!?!@!J!!
•!!!Q(!H(,%/&!2%!&%$1/&!2/!=)(>?@!9%&7%$!! !'T!^d_S!
! ! ! ! ! >>!9(&+%!2/!9&1)%../.!9L&%! ! ! ! !!!!!0=!G9I!!!>>!9&1)%../.!9L&%!!!
!!!!2%!2-R6&%#)-%&!,%.!S!T! !'2T!'%&76!
! ! ! !!!!!!M! ! ! ! ! ! '!K!^d_S!J!
! ! ! !!!!!%5&%!! ! ! U!V!!T!9&1)%../.!9L&%! ! ! ! !!!!!%5&%!!!
! ! K!V!!T!9&1)%../.!3,.! !(T!!XaO,,1!\1&,2b!X!! !(T!!XaO,,1!\1&,2b!X!!
! ! ! !!!!!N!! ! ! ! ! ! *5)&%!'2!J!
! ! W!V!T!%&&%/&!
! ! ! ! ! >>!9(&+%!2/!9&1)%../.!3,.! ! !! !!!!(]!9fS!`!K!gOg!J!!
! ! ! !!!!!M!
Abstraction des Processus! Abstraction des Processus!
Fin dʼun processus fils (1)! Fin dʼun processus fils (2)!
! Scénarios de terminaison dʼun processus ! ! Quand le processus père appelle wait( ), le fils zombie est nettoyé.!
! - En appelant exit( ) : cʼest fait automatiquement lorsque la fin ! wait( ) bloque le processus père jusquʼà ce que le fils se termine!
! ! ! ! du main( ) est atteinte!
! - Le système termine un processus misbehaving!
Remarque :!
! Les processus terminés restent dans le système (zombies)! ! Si le processus père termine avant le fils, le processus init adopte
le processus fils orphelin et le ʼʼ récupèreʼʼ.!
Abstraction des Processus!
Fin dʼun processus fils (3)!
! D)09!!%E03!G!0.3!!.$($/.!IJ!
䕞 Un moyen dʼarrêter le processus!
9-2F$!!F/03!G!0.3!G!.$($/.!IJ!
9-2F$!!F/03!G!9-2F$!!9-2Y!!0.3!!G.$($/.Y!!0.3!19+1#.!IJ!
䕞 Fonction à appeler par le père pour sʼassurer que son fils a terminé
son exécution!
䕞 Possibilité de cibler quel processus on souhaite attendre!