Multithreading et synchronisation Flashcards
(64 cards)
Thread (fil d’exécution)
une tâche indépendante à l’intérieur d’un processus
Pourquoi les threads ?
Performance : profiter de plusieurs CPU
Génie logiciel : faciliter la programmation
Les threads ont une vue mémoire commune
Pas d’isolation matérielle
• variables globales partagées
• tas d’allocation commun
Pour les threads, l’ordonnancement est indépendant
- un VCPU privé
TCB = Thread Control Block
Une pile d’exécution privée
Des variables locales privées
Qu’est que le TCB ?
Thread Control Block
= photo du processus, changer de contexte à l’intérieur d’un processus
Que permettent les threads ?
Le multitâche à l’intérieur d’une même vue mémoire
( ≠ dupliquer plusieurs fois processus mais = cohabitation dans même espace virtuel )
Qu’est-ce que le PCB ?
Structure de données qui décrit l’intégralité du processus en mémoire
= une PT + un/plusieurs TCB
Un thread ne peut pas vivre en dehors d’un processus
besoin d’une vue mémoire
Un processus vivant a toujours au moins un thread
main thread» = thread qui exécute main()
• lorsque zéro thread ▶ processus terminé
L’ordonnanceur travaille avec des threads ou des processus ?
Des threads (unité d’ordonnancement)
Problème à l’exécution
Code source ≠ instructions du processeur :
Ce qu’on lit n’est pas ce que la machine fait séquentiellement : différentes exécutions possibles
Quels sont les risques liés aux accès concurrents à une ressource partagée ?
Corruption de données (le programme ne calcule pas ce que le programmeur voulait = bug) et/ou crash
C’est quoi une data race (race condition, situation de concurrence) ?
Situation où le résultat du programme dépend de l’ordre dans lequel sont exécutées les instructions des threads
Quels sont les différents types de race condition ?
Globalement, c’est quand on a plusieurs accès concurrents à une ressource partagée (variable globale, fichier, réseau, base de données…)
• deux écritures concurrentes = conflit
• une lecture et une écriture concurrentes = conflit
Concurrence
parallélisme et/ou entrelacement
• i.e. quand on ne maîtrise pas l’ordre temporel des actions
Précepte : data race = bug
Un programme dans lequel plusieurs tâches peuvent se retrouver en situation de concurrence est un programme incorrect.
Objectif lors de situations de concurrence
Garantir l’exclusion mutuelle
- On veut que chaque section critique s’exécute de façon atomique
Action atomique
Action au cours de laquelle aucun état
intermédiaire n’est visible depuis l’extérieur
Ressource critique
Objet partagé par plusieurs threads et
susceptible de subir une data race
Section critique
Morceau de programme qui accède a
une ressource critique
Exclusion mutuelle
Interdiction pour plusieurs threads de se trouver simultanément à l’intérieur d’une section critique
Idée derrière l’exclusion mutuelle
« Verrouiller » l’accès à une section critique déjà occupée
Quelles sont les deux primitives pour l’exclusion mutuelle par verrouillage ?
lock(L) et unlock(L)
cf slide 16
lock(L)
pour prendre le verrou L en exclusivité
▶ un seul thread peut entrer en section critique