Génération automatique d'implémentations optimisées de protocoles
Auteur / Autrice : | Claude Castelluccia |
Direction : | Walid Dabbous |
Type : | Thèse de doctorat |
Discipline(s) : | Informatique |
Date : | Soutenance en 1996 |
Etablissement(s) : | Nice |
Partenaire(s) de recherche : | Autre partenaire : Université de Nice-Sophia Antipolis. Faculté des sciences |
Jury : | Président / Présidente : Jean-Paul Rigault |
Examinateurs / Examinatrices : Christian Huitema, Aruna Seneviratne | |
Rapporteurs / Rapporteuses : Jon Crowcroft, Sacha Krakowiak |
Mots clés
Résumé
Un compilateur de protocoles est un outil qui génère à partir d'une spécification formelle d'un protocole une implémentation. Les compilateurs de protocoles produisent généralement du code de qualité médiocre en terme de vitesse d'exécution et de taille du code et sont, pour cette raison, peu utilisés. Dans cette thèse, nous montrons qu'en utilisant une approche synchrone et en optimisant le code généré, il est possible de compiler des spécifications formelles en des implémentations très performantes. Nous avons développé un compilateur de protocoles qui utilise ces deux techniques. Ce compilateur prend en entrée une spécification modulaire du protocole écrite dans le langage synchrone Esterel. La spécification est compilée en un automate séquentiel par le compilateur Esterel dans un format intermédiaire (le format Oc). L'automate est alors optimisé et transformé en une implémentation C par notre optimisateur de protocoles, appelé HIPPCO. HIPPCO améliore les performances du code et réduit sa taille en optimisant simultanément la vitesse d'exécution du chemin commun et la taille du chemin rare. Nous évaluons les performances des implémentations de notre compilateur en spécifiant le protocole TCP et en comparant les performances de l'implémentation automatiquement générée avec celle d'une version manuelle dérivée de l'implémentation standard BSD. Les résultats sont très encourageants. Le code généré par HIPPCO exécute moins d'instructions et utilise le cache d'instructions et le pipelining plus efficacement que le code BSD tout en ayant une taille de code raisonnable.