
Static analysis via abstract interpretation of multithreaded programs Pietro Ferrara To cite this version: Pietro Ferrara. Static analysis via abstract interpretation of multithreaded programs. Software Engi- neering [cs.SE]. Ecole Polytechnique X, 2009. English. tel-00417502 HAL Id: tel-00417502 https://pastel.archives-ouvertes.fr/tel-00417502 Submitted on 16 Sep 2009 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. THÈSE PRÉSENTÉE À L'ÉCOLE POLYTECHNIQUE POUR OBTENIR LE TITRE DE DOCTEUR EN SCIENCES DE L'ÉCOLE POLYTECHNIQUE Discipline Informatique par PIETRO FERRARA 22 mai 2009 ANALYSE STATIQUE DE LOGICIELS MULTITÂCHES PAR INTERPRÉTATION ABSTRAITE Static analysis via abstract interpretation of multithreaded programs President Manuel Hermenegildo Professeur, Universidad Politécnica Madrid, Espagne Rapporteurs Manuel Hermenegildo Professeur, Universidad Politécnica Madrid, Espagne Helmut Seidl Professeur, Technische Universität München, Allemagne Examinateurs Eric Goubault Directeur de Recherche, CEA, France Francesco Logozzo Chercheur, Microsoft Research, Etats Units Directeurs de th è se Radhia Cousot Directeur de recherche, CNRS/ENS, France Agostino Cortesi Professeur, Università Ca' Foscari di Venezia, Italie Resum´ e´ Le but de cette these` est de presenter´ une analyse statique gen´ erique´ pour des pro- grammes multitacheˆ ecrits´ en Java. Les programmes multitacheˆ executent´ plusieurs tachesˆ en parallele.` Ces tachesˆ com- muniquent implicitement par le biais de la memoire´ partagee´ et elles se synchonisent sur des moniteurs (les primitives wait − notify, etc, . ). Il y a quelques annees,´ les archi- tectures avec double processeurs ont commence´ a` etreˆ disponibles sur le marche´ a` petit prix. Aujourd’hui, presque tous les ordinateurs ont au moins deux noyaux, la tendance ac- tuelle du marche´ etant´ de mettre de plus en plus de processeurs par puce. Cette revolution´ amene` egalement´ de nouveaux defis´ en matiere` de programmation, car elle demande aux developpeurs´ d’implanter des programmes multitache.ˆ Le multitacheˆ est supporte´ en natif par la plupart des langages de programmation courants, comme Java et C#. Le but de l’analyse statique est de calculer des informations sur le comportement d’un programme, de maniere` conservative et automatique. Une application de l’analyse statique est le developpement´ d’outils qui aident au debogage´ des programmes. Plusieurs methodes´ d’analyse statique ont et´ e´ proposees.´ Nous suivrons le cadre de l’interpretation´ abstraite, une theorie´ mathematique´ permettant de definir´ des approximations correctes de semantiques´ de programmes. Cette methode´ a dej´ a` et´ e´ utilisee´ pour un large spectre de langages de programmation. L’idee´ fondamentale des analyseurs statiques gen´ eriques´ est de developper´ un ou- tils qui puissent etreˆ interface´ avec differents´ domaines numeriques´ et differentes´ pro- priet´ es.´ Pendant ces dernieres` annees,´ beaucoup de travaux se sont attaque´ a` cet enjeu, et ils ont et´ e´ appliques´ avec succes` pour deboguer´ des logiciels industriels. La force de ces analyseurs reside´ dans le fait qu’une grande partie de l’analyse peut etreˆ reutilis´ ee´ pour verifier´ plusieurs propriet´ es.´ L’utilisation de differents´ domaines numeriques´ permet le developpement´ d’analyses plus rapides mais moins precises,´ ou plus lentes mais plus precises.´ Dans cette these,` nous presentons´ la conception d’un analyseur gen´ erique´ pour des programmes multitache.ˆ Avant tout, nous definissons´ le modele` memoire,´ appele´ happens- before memory model. Puis, nous approximons ce modele´ memoire´ en une semantique calculable. Les modeles´ memoire´ definissent´ les comportements autorises´ pendant l’exe-´ cution d’un programme multitache.ˆ Commenc¸ant par la definition´ (informelle) de ce modele` memoire´ particulier, nous definissons´ une semantique´ qui construit toutes les executions´ finies selon ce modele` memoire.´ Une execution´ d’un programme multitacheˆ est decrite´ par une function qui associe les tachesˆ a` des sequences´ (ou traces) d’etats.´ Nous montrons comment concevoir une semantique´ abstraite calculable, et nous montrons for- mellement la correction des resultat´ de cette analyse. Ensuite, nous definissons´ et approximons une nouvelle propriet´ e´ qui porte sur les com- portements non deterministes´ causes´ par le multitache,ˆ c’est a` dire ceux qui sont dus aux entrelacements arbitraires pendant l’execution´ de differentes instructions de lecture. Avant tout, le non determinisme´ d’un programme multitacheˆ se definit´ par une difference´ entre plusieurs executions.´ Si deux executions´ engendrent des comportements differents´ dus aux valeurs qui sont lues ou ecrites´ en memoire´ partagee,´ alors le programme est non deterministe.´ Nous approximons cette propriet´ e´ en deux etapes´ : dans un premier temps, nous regroupons, pour chaque tache,ˆ la valeur (abstraite) qui peut etreˆ ecrite´ dans la memoire´ partagee´ a` un point de programme donne.´ Dans un deuxieme` temps, nous resumons´ toutes les valeurs pouvant etreˆ ecrites´ en parallele,` tout en nous rapellant l’en- semble des tachesˆ qui pourraient les avoir ecrites.´ A` un premier niveau d’approxima- tion, nous introduisons un nouveau concept de determinisme´ faible. Nous proposons par ailleurs d’autres maniere` affaiblir la propriet´ e´ de determinisme,´ par exemple par projec- tion des traces et des etats,´ puis nous definissons´ une hierarchie globale de ces affaiblis- sements. Nous etudions´ aussi comment la presence´ de conflit sur les acces` des donnees´ peut affecter le determinisme´ du programme. Nous appliquons ce cadre de travail theorique´ a` Java. En particulier, nous definissons´ une semantique´ du language objet de Java, selon sa specification.´ Ensuite, nous approxi- mons cette semantique´ afin de garder uniquement l’information qui est necessaire´ pour l’analyse des programmes multitache.ˆ Le cœur de cette abstraction est une analyse d’alias qui approxime les ref´ erences´ afin d’identifier les taches,ˆ de verifier´ les acces` en memoire´ partagee,´ et de detecter´ quand deux tachesˆ ont un moniteur commun afin d’en deduire´ quelles parties du code ne peuvent pas etreˆ ex´ ecut´ ees´ en parallele.` L’analyseur gen´ erique´ qui est decrit´ ci-dessus a et´ e´ entierement implante,´ dans un ou- tils appele´ ¼heckmate. ¼heckmate est ainsi le premier analyseur gen´ erique´ pour des pro- grammes multitacheˆ ecrits´ en Java. Des resultats´ experimentaux´ sont donnes´ et analyses´ en details.´ En particulier, nous etudions´ la precision´ de l’analyse lorsqu’elle est appliquee´ a` des schemas´ courants de la programmation concurrente, ainsi qu’a` d’autres exemples. Nous observons egalement´ les performances de l’analyse lorsqu’elle est appliquee´ a` une application incrementale,´ ainsi qu’a` des exemples de ref´ erence´ bien connus. Une autre contribution de cette these` est l’extension d’un analyseur gen´ erique´ existant qui s’appelle Clousot et qui permet de verifier´ le non debordement´ des memoires´ tam- pons. Il s’avere` que cette analyse passe a` l’echelle´ des programmes industriels et qu’elle est precise.´ En resum´ e,´ nous presentons´ une application d’un analyseur statique gen´ erique´ industriel existant pour detecter´ et prouver une propriet´ e´ presentant´ un inter´ etˆ pratique, ce qui montre la puissance de cette approche dans le developpement´ d’outils qui soient utiles pour les developpeurs.´ Riassunto L’obiettivo di questa tesi e` di presentare un’analisi statica generica per programmi Java multithread. Un programma multithread esegue molteplici task, chiamati thread, in parallelo. I thread comunicano implicitamente attraverso una memoria condivisa, e si sincronizzano attra- verso monitor, primitive wait-notify, etc... Le prime architetture dual-core sono apparse sul mercato a prezzi contenuti alcuni anni fa; oggi praticamente tutti i computer sono al- meno dual-code. L’attuale trend di mercato e` addirittura quello del many-core, ovvero di aumentare sempre di piu` il numero di core presenti su una CPU. Alcune nuove sfide sono state introdotte da questa rivoluzione multicore a livello di linguaggi di programmazione, dal momento che gli sviluppatori software devono implementare programmi multithread. Questo pattern di programmazione e` supportato nativamente dalla maggior parte dei lin- guaggi di programmazione moderni come Java e C#. Lo scopo dell’analisi statica e` di calcolare automaticamente e in maniera conservativa una serie di informazioni sul comportamento a tempo di esecuzione di un programma; una sua applicazione e` lo sviluppo di strumenti che aiutino a trovare e correggere errori software. In questo campo svariati approcci sono stati proposti: nel corso della tesi verra` seguita le teoria dell’interpretazione astratta, un approccio matematico che permette di definire e approssimare correttamente la semantica dei programmi. Questa metodologia e` gia` stata utilizzata con successo per l’analisi di un vasto insieme di linguaggi di programmazione. Gli analizzatori generici possono
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages231 Page
-
File Size-