previous up next contents
Précédent : Un nouveau modèle Remonter : Actions de recherche Suivant : Langages de programmation

Récupération concurrente de mémoire et preuves mécaniques

 

Participants : Damien Doligez, Georges Gonthier

Mots clefs : architecture multiprocesseur, parallélisme asynchrone, concurrence, ramasse-miettes, preuve de programme, démonstration automatique

Comme décrit dans leur article de POPL 94 et dans le rapport d'activité 1994, D. Doligez et G. Gonthier ont conçu, modélisé et prouvé correct un algorithme de récupération de mémoire concurrent, portable et efficace, mettant en oeuvre l'architecture auparavant décrite par D. Doligez et X. Leroy (projet CRISTAL) dans leur article de POPL 92. Par le biais d'un modèle rigoureux et détaillé, ils ont pu mettre au point un algorithme de récupération de mémoire parfaitement concurrent ; bon nombre des détails les plus délicats de l'algorithme ont été fixés par la preuve formelle de sa correction.

G. Gonthier et D. Doligez ont terminé en mars la vérification formelle et mécanique de cet algorithme concurrent de récupération de mémoire, ce qui en fait le premier algorithme de ce type à avoir été à la fois mis en oeuvre dans une application réelle (Concurrent Caml light) et rigoureusement validé par une preuve de correction formelle acceptée par un vérificateur automatique. Ainsi, on utilise la preuve automatique pour résoudre l'opposition entre efficacité et sûreté.

Le travail a d'abord consisté à écrire l'algorithme (environ 100 lignes de pseudo-code C) dans le formalisme TLA de L. Lamport (268 lignes), et dans le format d'entrée du système TLP de Engberg (un traducteur bâti sur le prouveur LP de Garland et Guttag) (791 lignes) ; puis on a formulé un invariant assurant la sûreté de l'algorithme (247 lignes), que l'on a enfin prouvé avec un script TLP de plus de lignes, en plus de 24h de temps machine. La preuve a pris 9 hommes/mois. Un exemple de cette taille met en lumière les faiblesses des démonstrateurs de théorèmes, en particulier pour la gestion de la complexité. Ainsi le format de preuve structurée fourni par le traducteur TLP s'est avéré être indispensable pour organiser les quelques sous-lemmes de la preuve.

Chaque étape successive (analyse, implémentation, formalisation, preuve, et vérification) a permis de corriger plusieurs erreurs dans la précédente, et quelques unes dans les étapes antérieures, ce qui démontre à la fois le bon étagement de la démarche et également l'utilité de la mener à terme : ainsi la preuve formelle contenait une erreur majeure qui n'a été révélée qu'au cours de la vérification de la dernière étape de l'algorithme (mais, par chance, elle n'était pas répercutée dans l'algorithme même).

L'algorithme, sa formalisation et sa preuve formelle sont décrits dans la thèse de D. Doligez [1], soutenue le 5 mai 1995.


previous up next contents
Précédent : Un nouveau modèle Remonter : Actions de recherche Suivant : Langages de programmation