2009
Aachen, Techn. Hochsch., Diss., 2009
Zsfassung in dt. und engl. Sprache
Genehmigende Fakultät
Fak01
Hauptberichter/Gutachter
Tag der mündlichen Prüfung/Habilitation
2009-09-23
Online
URN: urn:nbn:de:hbz:82-opus-29962
URL: https://publications.rwth-aachen.de/record/51346/files/Rieger_Stefan.pdf
Einrichtungen
Inhaltliche Beschreibung (Schlagwörter)
Zeiger <Informatik> (Genormte SW) ; Verifikation (Genormte SW) ; Model Checking (Genormte SW) ; Abstraktion (Genormte SW) ; Graph-Grammatik (Genormte SW) ; Hypergraph (Genormte SW) ; Graphersetzungssystem (Genormte SW) ; Informatik (frei) ; hyperedge replacement grammar (frei) ; pointer programs (frei) ; verification (frei) ; heap abstraction (frei)
Thematische Einordnung (Klassifikation)
DDC: 004
ccs: D.2.4
Kurzfassung
In dieser Dissertation stellen wir ein Konzept zur Abstraktion und Verifikation zeigermanipulierender Programme, welche über unbeschränkten Speicher verfügen, vor. Dafür führen wir zwei unterschiedliche Abstraktionstechniken ein: Die erste dient der Abstraktion von einfach verketteten Datenstrukturen und garantiert die Endlichkeit der abstrakten Semantik für alle Eingaben, während ein erweiterter Ansatz Hyperkantenersetzungsgrammatiken zur Modellierung komplexerer Datenstrukturen und zur Berechnung der zugehörigen Abstraktionsabbildungen einsetzt. Die verwendeten Graphgrammatiken werden vom Benutzer vorgegeben und sind daher nicht auf bestimmte Datenstrukturen beschränkt. Durch die Verwendung partieller Konkretisierungsschritte können wir es vermeiden, für jede Programmoperation eine abstrakte Version bereitstellen müssen. Dabei ergibt eine Kombination aus partieller Konkretisierung, Ausführung der konkreten Programmoperation und anschließender Reabstraktion den entsprechenden abstrakten Transformationsschritt. Die vorgestellten Verifikationsmethoden ermöglichen es uns nicht nur, mögliche Laufzeitfehler, wie sie etwa durch Dereferenzierung von Null-Zeigern entstehen, festzustellen, und die Invarianz von Datenstrukturen im Hinblick auf einen gegebenen Algorithmus zu testen. Die Einführung einer auf LTL basierenden, ausdrucksstarken Heap-Logik erlaubt es uns, auch Sicherheits- und Lebendigkeitseigenschaften aller Läufe des Systems zu überprüfen. Wir zeigen, dass das zugehörige Model Checking-Problem auf LTL Model Checking zurückgeführt werden kann, und somit die Anwendung vorhandener, bewährter Model Checking-Verfahren möglich ist. Anhand des Deutsch-Schorr-Waite-Traversierungsalgorithmus, der ohne zusätzlichen Kellerspeicher oder andere Hilfsstrukturen auskommt, zeigen wir die praktische Anwendbarkeit unseres Konzepts, indem wir verschiedene Korrektheitseigenschaften nachweisen. Abschließend erweitern wir unseren Ansatz um dynamische und unbeschränkte Threaderzeugung zur Laufzeit. Dazu modellieren wir Kontrollfluss- und Heapsemantik unabhängig voneinander als Petri-Netze. Durch Abstraktion des Heaps erhalten wir eine datenabstrakte Semantik, für die die Entscheidbarkeit des Model Checking-Problems nachgewiesen werden kann. Für praktisch nutzbare Ergebnisse sind wir jedoch gezwungen, in einem zweiten Schritt auch die Kontrollflusssemantik zu abstrahieren. Das daraus resultierende Petri-Netz kann als endliches Transitionssystem dargestellt werden, auf welches wiederum unsere Verifikationsverfahren anwendbar sind.With this dissertation we present an abstraction and verification framework for pointer programs operating on unbounded heaps. To this end, we introduce two different abstraction methods for pointer-manipulating programs: an abstraction technique for singly-linked structures that guarantees a finite abstract semantics for any given program and a more general approach, employing context-free hyperedge replacement graph grammars to model the data structures and compute the abstraction mappings. The graph grammars are user defined and therefore this approach can handle a variety of different data structures. By means of partial concretization steps we avoid the necessity for explicitly defining the effect of pointer-manipulating operations on abstracted parts of the heap: it is obtained "for free" by combining partial concretization, the concrete pointer operation, and re-abstraction of the transformed state. Besides the possibility to check for pointer safety, assuring the absence of null dereferences, and shape safety, the preservation of the data structure, we establish an expressive pointer logic that is based on LTL. It allows to specify safety as well as liveness properties for the executions of the system. We show that the corresponding model checking problem can be reduced to an LTL model checking problem enabling the application of existing, highly optimized model checkers. We show the practical feasibility of our approach by applying it to the well-known Deutsch-Schorr-Waite traversal algorithm for binary trees – a stackless traversal algorithm that uses destructive updates. Finally, we introduce an extension of our framework to concurrent pointer programs with unbounded thread creation. For that purpose we model the control-flow and heap semantics separately as Petri nets. Abstracting the heap only, we obtain a data-abstract semantics for which we can show that the model checking problem is decidable. To obtain practically feasible results, however, we are forced to apply in a second step abstraction to the control-flow semantics as well. It turns out that the resulting Petri net can be represented as a finite transition system, to that our model checking method can be applied.
Fulltext:
PDF
Dokumenttyp
Dissertation / PhD Thesis
Format
online, print
Sprache
English
Externe Identnummern
HBZ: HT016134453
Interne Identnummern
RWTH-CONV-113647
Datensatz-ID: 51346
Beteiligte Länder
Germany
|
The record appears in these collections: |