Ch2 Processus Et Threads
Ch2 Processus Et Threads
Ch2 Processus Et Threads
Plan du chapitre
1. 2.
Processus Threads
3.
4.
Ordonnancement
Communication interprocessus
Processus
Un processus est une activit: programme, entres, sorties, tat Systmes monoprocesseurs: pseudo-paralllisme Multiprogrammation: basculement entre processus Crer un processus? linitialisation du systme, par un processus, requte utilisateur, job de trait par lots.
UNIX: fork cration dun clone et execve modifier limage du processus Windows: CreateProcess
Processus
Dmons (daemon) ou en arrire-plan, exples: courriers lectroniques, pages web Premier-plan
Les voir?
Ctrl+alt+del sur Windows ps sur UNIX
Processus
Fin de Processus
Volontaire: arrt normal ou arrt pour erreur (le fichier compiler nexiste pas) Involontaire: arrt pour erreur fatale (division par 0) ou arrt par un autre processus (Unix: kill, Windows: TerminateProcess)
Hirarchie de Processus
Existe sous UNIX, arborescence de parent-enfants Nexiste pas sous Windows, CreateProcess retourne un HANDLE utilis pour contrler le processus
Implmentation de Processus
Processus possde son propre espace dadressage: programme, donnes, pile. Le changement de contexte (changement de processus) Table de processus, avec une entre/ processus contenant registres, identificateur, ptr vers le segment texte, ptr vers segment de donnes, ptr vers le segment de pile, tat
4
Etats de Processus
En cours dexcution (1) Bloqu (3) (2) Prt
(4)
Le processus est bloqu, en attente dune donne, vnement Lordonnanceur choisit un autre processus Lordonnanceur choisit ce processus La donne devient disponible
Threads
Pour plus de performances, cas de threads lis aux E/Ss, dautres de traitement Multithreading: +sieurs threads dans le mme espace dadressage.
Etats dun thread: en cours dexcution, bloqu, prt ou arrt.
clavier Disque
noyau
Thread 1: remet en forme le document Thread 2: interaction avec lutilisateur Thread 3: crit priodiquement le contenu de la RAM sur le disque
noyau
Implmentation de Threads
Soit dans lEspace Utilisateur ou dans le Noyau
Processus Espace user Thread Systme dexcution Table des threads Table des processus
noyau
Systme dexcution (runtime system): gre la table de threads, le basculement entre threads en cas dimplem en espace user est + rapide que celui en mode noyau. Implem en espace user: le processus a son propre algo dordonnancement entre les threads
9
Ordonnancement
Ordonnanceur (scheduler): partie du SE qui slectionne les processus.
Objectifs de lordonnancement
Tous les systmes
quit: attribuer chaque processus un temps CPU quitable
Systmes interactifs
Temps de rponse: rponse rapide aux requtes
Algo dordonnancement
1er arriv, 1er servi (first come first served) Le job le plus court en premier (shortest job first)
Dlais dexcution connus
Par Priorits
Prvenir contre les situations de famine en diminuant la priorit du processus chaque interruption ou priorit gale linverse de la fraction dutilisation du dernier quantum...
Ordonnancement 3 niveaux
Job entrant
Processeur
Ordonnanceur du processeur
File dattente
Disque
Mmoire Principale
1. O. dadmission: Mlange jobs E/S et CPU, shortest job first 2. O. de mmoire: processus en mmoire ou sur disque ? Niveau de
multiprogrammation?
Communication interprocessus
1. Conditions de Concurrence 2. Sections Critiques 3. Exclusion Mutuelle 4. Sommeil & Activation 5. Smaphores 6. Mutex 7. Moniteurs 8. Echange de Messages
9. Barrires
14
Conditions de Concurrence
Conditions de concurrence (race conditions): situation o 2 processus ou plus effectuent des lectures et des critures conflictuelles. Exemple du Spouleur dimpression
Un processus qui veut imprimer un fichier, entre son nom dans un rpertoire de spoule Le processus dmon dimpression regarde priodiquement sil y a des fichiers imprimer. Il a 2 variables: in: pointe vers la prochaine entre libre. out: pointe vers le prochain fichier imprimer in = 7, out = 4 A et B deux processus qui veulent imprimer un fichier A >> lire in, next_free_slot = 7 Interruption: la CPU bascule vers le processus B B >> lire in, next_free_slot = 7, entre7 = fichierB, in = 8 A >> entre7 = fichierA, in = 8 Problme: le fichierB ne sera pas imprim
15
Conditions de Concurrence
Solution: Interdire que plusieurs processus lisent et crivent des donnes partages simultanment.
Exclusion Mutuelle: permet dassurer que si un processus utilise une variable ou fichier partags, les autres processus seront exclus de la mme activit
16
A
B quitte sa section critique
t1
t2
t3
Alternance Stricte
la variable turn porte le numro du processus dont cest le tour dentrer en SC. Chaque processus inspecte la valeur de la variable, avant dentrer en SC. Inconvnient: consomme bcp de temps CPU
18
Alternance Stricte
while (TRUE) { while (TRUE) { while (turn != 0); while (turn != 1); critical_region(); critical_region(); turn = 1; turn = 0; non_critical_region(); non_critical_region(); } } Les attentes actives sont performantes dans le cas o elles sont brves. En effet, il y a risque dattente P0 quitte la CS, turn = 1 P1 termine sa CS, turn = 0 Les 2 processus sont en section non critique P0 excute sa boucle, quitte la SC et turn = 1 Les 2 processus sont en section non critique P0 quoiquil a termin, il ne peut pas entrer en SC, il est bloqu
19
Instruction TSL
solution qui ncessite de laide du matriel.
Problme du consommateurproducteur
22
Problme du producteurconsommateur
#define N 100 int count = 0;
void producer (void) { int item; while (TRUE) { item = produce_item(); if (count == N) sleep(); insert_item(item); count++; if (count == 1) wakeup(consumer); } } void consumer (void) { int item; while (TRUE) { if (count == 0) sleep(); item = remove_item(); count--; if (count == N-1) wakeup(producer); consume_item(item); } }
23
Problme de blocage:
Le consommateur note que le tampon est vide
Smaphores
Problme du producteur-consommateur
3 smaphores: full, empty et mutex full: # demplacemens occups dans le tampon empty: # demplacements vides dans le tampon mutex: pour sassurer que le consommateur et le producteur naccdent pas simultanment au tampon
25
Smaphores
#define N 100 Typedef int semaphore; semaphore mutex = 1; semaphore empty = N; semaphore full = 0; void producer (void) { int item; message m; while (TRUE) { item = produce_item(); down(&empty); down(&mutex); insert_item(item); up(&mutex); up(&full); } } void consumer (void) { int item; while (TRUE) { down(&full); down(&mutex); item = remove_item(&m); up(&mutex); up(&empty); consume_item(item); } }
26
Mutex
Smaphore dexclusion mutuelle, o la fonction dcompte nest pas ncessaire. Une mutex a 2 tats: dverrouill: valeur 0 ou verrouill Si +sieurs threads sont bloqus sur une mutex, lun dentre eux est choisi au hasard pour prendre possession du verrou. mutex_lock et mutex_unlock
mutex_lock: TSL REGISTER, MUTEX | copie mutex dans le registre et la dfinit 1 CMP REGISTER, #0 | tester si mutex est gale 0 JSE ok | si elle est diffrente de 0 retour CALL thread_yield | relcher la CPU ok: RET | retour lappelant mutex_unlock: MOVE MUTEX, #0 | stocke un 0 dans mutex RET | retour lappelant
Moniteurs
Collection de procdures, de variables, de structures de donnes regroupes dans un module. Un processus ne peut appeler que les procdures du moniteur. Les moniteurs sont des constructions de langage, et cest au compilateur dimplanter lexclusion mutuelle sur les entres du moniteur. Problme du producteur-consommateur
2 variables conditionnelles (vc): full et empty Quand une procdure du moniteur dcouvre quelle ne peut plus poursuivre, elle effectue un wait sur une vc Si un signal est adress une vc attendue, un processus est ractiv.
28
Moniteurs
monitor ProducteurConsommateur condition full, empty; integer count; procedure insert (item: integer) begin if count = N then wait(full) insert_item(item); count++; if (count = 1) then signal(empty); end; function remove: integer begin if count = 0 then wait(empty); remove = remove_item; count--; if (count = N 1) then signal(full); end; count = 0; end monitor; procedure producteur begin while true do { item = produce_item; ProducteurConsommateur.insert(item); } end; procedure consommateur begin while true do { item = ProducteurConsommateur.remove; consume_item(item); } end;
29
Echange de Messages
Problmes
Perte de messages dans le rseau, + de fiabilit par les ACKs, la retransmission de messages et la dtection de doublons
Problme du producteur-consommateur
Les messages mis et non encore reus sont mis en mmoire par le SE Le consommateur envoie N messages vides au producteur Le producteur remplit chaque message vide reu
30
Echange de Messages
#define N 100 void producer (void) { int item; message m; while (TRUE) { item = produce_item(); receive(consumer, &m); build_message(&m, item); send(consumer, &m); } } void consumer (void) { int item, i; for(i=0; i<N;i++) send(producer, &m); while (TRUE) { receive(producer,&m); item = extract_item(&m); send(producer, &m); consume_item(item); } }
Problme, si le producer travaille + vite que le consumer le producer envoie tous les messages pleins et reste bloqu en attente dun message vide.
31
Les Barrires
Mcanisme de synchronisation destin aux groupes de processus. Cas dapplications dcomposes en phases, o aucun processus ne
peut entrer dans la phase suivante tant que tous les processus ne sont
pas prts y entrer.
Solution: placer une barrire, et quand un processus atteint la barrire il est bloqu jusqu ce que tous les processus atteignent la barrire.
Barrire
Barrire
B C
B C
Barrire
B
C
32