Sections atomiques emboîtées avec échappement de processus légers : sémantiques et compilation
Auteur / Autrice : | Thomas Pinsard |
Direction : | Frédéric Loulergue |
Type : | Thèse de doctorat |
Discipline(s) : | Informatique |
Date : | Soutenance le 15/12/2014 |
Etablissement(s) : | Orléans |
Ecole(s) doctorale(s) : | École doctorale Mathématiques, Informatique, Physique Théorique et Ingénierie des Systèmes (Centre-Val de Loire ; 2012-....) |
Partenaire(s) de recherche : | Laboratoire : Laboratoire d'informatique fondamentale d'Orléans (Orléans ; 1987-....) |
Jury : | Président / Présidente : Franck Pommereau |
Examinateurs / Examinatrices : Frédéric Loulergue, Franck Pommereau, Fabrice Mourlin, Ludovic Henrio, Jean-Michel Couvreur, Frédéric Dabrowski | |
Rapporteur / Rapporteuse : Fabrice Mourlin, Ludovic Henrio |
Mots clés
Mots clés contrôlés
Résumé
La mémoire transactionnelle est un mécanisme de plus en plus populaire pour la programmation parallèle et concurrente. Dans la plupart des implantations, l’emboîtement de transactions n’est pas possible ce qui pénalise la modularité. Plutôt que les transactions, qui sont un choix possible d’implantation, nous considérons directement la notion de section atomique. Dans un objectif d’améliorer la modularité et l’expressivité, nous considérons un langage impératif simple étendu avec des instructions de parallélisme avec lancement et attente de processus légers et une instruction de section atomique à portée syntaxique, depuis laquelle des processus légers peuvent s’échapper. Dans ce contexte notre première contribution est la définition précise de l’atomicité et de la bonne synchronisation. Nous prouvons que pour des traces bien formées, la dernière implique la forme forte de la première. Ceci est fait sur des traces d’exécution abstraites dans le sens où nous ne définissons par précisément la syntaxe et la sémantique opérationnelle d’un langage de programmation. Cette première partie de notre travail peut être considérée comme une spécification pour un tel langage. Nous avons utilisé l’assistant de preuve Coq pour modéliser et prouver nos résultats. Notre deuxième contribution est la définition formelle du langage Atomic Fork Join (AFJ). Nous montrons que les traces de sa sémantique opérationnelle vérifient effectivement les conditions de bonne formation définies précédemment. La troisième contribution est la compilation de programmes AFJ en programmes Lock Unlock Fork Join (LUFJ) un langage avec processus léger et verrous mais sans sections atomiques. Nous étudions la correction de la compilation de AFJ vers LUFJ.