Vous êtes sur la page 1sur 32

Chapitre 2 Processus & Threads

Rim Moussa 2005-2006

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

Un processus possde un espace dadressage et un thread de contrle unique.

Un thread processus lger ou leightweight process inclut:


un compteur ordinal, qui effectue le suivi des instructions excuter des registres, qui dtiennent les variables en cours. une pile, qui contient lhistorique de lexcution.

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.

Procdures de bibliothque: thread_create, thread_exit, thread_wait, thread_yield (abandon volontaire de la CPU).


Temps de cration dun processus >> Temps de cration dun thread (100 )
6

Trait de Texte multithreaded


Absbjshd Absbjshd Absbjshd Dnddjkjdq Dnddjkjdq Dnddjkjdq Hqdjlqdjl Hqdjlqdjl Hqdjlqdjl Jddmkm Jddmkm Jddmkm Djdlqjdjdq Djdlqjdjdq Djdlqjdjdq djdqkmkd djdqkmkd djdqkmkd

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

Serveur Web multithreaded


Les pages web les + consultes sont dans le cache. Dispatcher Thread Pool de worker threads Cache de pages web

Le dispatcher lit les requtes entrantes


Le worker vrifie le cache, sinon effectue un read sur le disque, donc devient bloqu sur une E/S Worker Dispatcher while (TRUE) { get_next_request(&buf); handoff_work(&buf); }

noyau

while (TRUE) { wait_for_work(&buf); look_for_page_in_cache(&buf, &page); if (page_not_in_cache(&page)) read_page_from_disk(&buf, &page); return_page(&page); }


8

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.

Algo dordonnancement (scheduling algorithm)


- ~ non-premptif: slectionne un processus, puis le laisse sexcuter jusqu ce quil se bloque (E/S, wait) ou se termine. - ~ premptif: slectionne un processus et le laisse sexcuter pendant un quantum, premption par linterruption horloge Comportement de Processus: - Processus de traitement - Processus dE/S
10

Objectifs de lordonnancement
Tous les systmes
quit: attribuer chaque processus un temps CPU quitable

quilibre: toutes les parties du systme sont occupes

Systmes de traitement par lots


Capacit de Trait: optimiser le #jobs/ heure

Dlai de rotation: rduire le dlai entre la soumission et lachvement


Taux dutilisation du processeur

Systmes interactifs
Temps de rponse: rponse rapide aux requtes

Systmes temps rel


Respect des dlais: viter de perdre les donnes Prvisibilit: viter la dgradation de la qualit
11

Algo dordonnancement
1er arriv, 1er servi (first come first served) Le job le plus court en premier (shortest job first)
Dlais dexcution connus

Shortest remaining time next Tourniquet (round robin)


Quantum court: trop de changement de contexte Quantum long: dgradation temps de rponse aux requtes interactives

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...

Par Tirage au Sort


12

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?

3. O. du processeur: Slection des processus prts en mmoire celui qui va


sexcuter
13

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

Comment viter les 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

Les Sections Critiques


les Sections Critiques, mthode dexclusion mutuelle
A entre dans sa section critique A quitte sa section critique

A
B quitte sa section critique

t1

t2

t3

t4 B entre dans sa section critique


17

B tente dentrer dans sa section critique

LExclusion Mutuelle avec Attente Active (busy waiting)

Dsactivation des interruptions


Aprs son entre dans une SC, un processus dsactive les interruptions, puis les ractive Il empche ainsi lhorloge denvoyer des interruptions et le processeur de basculer Il est imprudent de permettre des processus user de dsactiver les interruptions

Variables de verrou (lock)


Avant dentrer en SC, tester la valeur de verrou, si verrou = 0, verrou 1, entrer en SC Dfaillance: 2 processus peuvent entrer simultanment dans leurs sections critiques comme le spouler dimpression

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

Exclusion Mutuelle avec Attente Active (busy waiting)

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

Exclusion Mutuelle avec Attente Active (busy waiting)

Solution de Peterson: combinaison de variables verrou, de variables


davertissement sans alternance stricte.
#define FALSE 0 #define TRUE 1 #define N 2 // nombre de processus int turn; // qui le tour? int interested[N]; // initialement les valeurs sont false void enter_region (int process) { int other; other = 1 process; interested[process] = TRUE; turn = process; while (turn == process && interested[other] == TRUE); } void leave_region (int process) { interested[process] = FALSE; }
20

Exclusion Mutuelle avec Attente Active (busy waiting)

Instruction TSL
solution qui ncessite de laide du matriel.

TSL acronyme de Test and Set Lock


Elle consiste en la lecture du contenu du mot mmoire Lock du registre RX, puis stocker dune valeur diffrente de 0 ladresse mmoire lock. Ces oprations sont indivisibles: le processeur excutant TSL verrouille le bus mmoire. enter_region: TSL REGISTER, LOCK | copie lock dans le registre et la dfinit 1 CMP REGISTER, #0 | tester si lock est gale 0 JNE enter_region | si elle est diffrente de 0 boucle RET | retour lappelant, entre en SC leave_region: MOVE LOCK, #0 | stocke un 0 dans lock RET | retour lappelant
21

Problme du consommateurproducteur

Connu aussi sous le nom de tampon dlimit (bounded buffer).

2 processus partagent un tampon commun de taille fixe N.


Le producteur place des jetons dans le tampon. Le consommateur rcupre un jeton Problme 1: le producteur souhaite placer un nouveau jeton alors que le tampon est plein. Problme 2: le consommateur souhaite rcuprer un jeton alors que le tampon est vide Count dnote le nombre de jetons dans le tampon

22

Sommeil & Activation

Ne consomme pas de la CPU comme lattente active Primitives de communication:


sleep: appel systme qui provoque le blocage de lappelant wake up: appel systme qui rveille un processus.

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

Sommeil & Activation

Problme de blocage:
Le consommateur note que le tampon est vide

Interruption: arrt du consommateur sans quil parte en sommeil


Le producteur insre un jeton, incrmente le dcompte, appelle wakeup pour rveiller le consommateur Le signal wakeup est perdu, car le consommateur nest pas en sommeil Le consommateur reprend, pour lui le tampon est vide, il dort Le producteur remplit le tampon et dort

Solution: ajouter un bit dattente dveil.


Quand un wakeup est envoy un processus le bit est 1;
le consommateur teste le bit, sil est 1, il le remet 0 et reste en veil Cette solution est + difficile gnraliser en cas de + sieurs processus.
24

Smaphores

Smaphore: # de wakeup enegistrs 2 oprations:


down: si la valeur de la variable smaphore est > 0, la dcrmenter; si la valeur est nulle: sleep up: incrmenter la valeur de la smaphore et rveiller au hasard un processus dormant down et up sont implmentes en tant que appels systme, le SE dsactive les interruptions, et cest ainsi que les oprations de vrification, de mj et de sommeil sexcutent de manire atomique

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

! Comparer au code denter_region slide 17


27

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

Convient aux systmes distribus 2 primitives appels systmes: send et receive


send (destination, &message) receive (source, &message)

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