1 / 80

Spezialvorlesung Suchalgorithmen

Spezialvorlesung Suchalgorithmen. Thema: Suche zur Verifikation von Software Stefan Edelkamp. Struktur des Buchs. Überblick. Zweites Fazit Suchalgorithmen Zusatz: Musterdatenbankauswahl Anwendung: Verifikation von c++ Programmen Zustandsbeschreibung und Heuristiken

gaenor
Download Presentation

Spezialvorlesung Suchalgorithmen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SpezialvorlesungSuchalgorithmen Thema: Suche zur Verifikation von Software Stefan Edelkamp

  2. Struktur des Buchs

  3. Überblick • Zweites Fazit Suchalgorithmen • Zusatz: Musterdatenbankauswahl • Anwendung: Verifikation von c++ Programmen • Zustandsbeschreibung und Heuristiken • Inkrementelle Speicherung & Adressierung • Zustandsrekonstruktion • Externalisierung und Abstraktion

  4. Überblick • Zweites Fazit Suchalgorithmen • Zusatz: Musterdatenbankauswahl • Anwendung: Verifikation von c++ Programmen • Zustandsbeschreibung und Heuristiken • Inkrementelle Speicherung & Adressierung • Zustandsrekonstruktion • Externalisierung und Abstraktion

  5. Zweites Fazit Suchalgorithmen • Von Vorteil: mengenbasierte (parallele, externe & symbolische) Suche in Zustandsraum. • Gesteuert durch (symbolische) Musterdatenbanken. • Verspätete Duplikatserkennung vermeidet Hashing. • Duplikatserkennungsbereichbeschränkt auf Lokalität des Graphen • Üblicherweise vollständig undoptimal. • Lösungsrekonstruktion: DACoder Zustandsdoppelung. • Problem: Nebenbedingungen und Realzeitanforderungen

  6. Überblick • Zweites Fazit Suchalgorithmen • Zusatz: Musterdatenbankauswahl • Anwendung: Verifikation von c++ Programmen • Zustandsbeschreibung und Heuristiken • Inkrementelle Speicherung & Adressierung • Zustandsrekonstruktion • Externalisierung und Abstraktion

  7. VerteilteExploration 35-Puzzle

  8. Auswahl von Musterdatenbanken

  9. Überblick • Zweites Fazit Suchalgorithmen • Zusatz: Musterdatenbankauswahl • Anwendung: Verifikation von c++ Programmen • Zustandsbeschreibung und Heuristiken • Inkrementelle Speicherung & Adressierung • Zustandsrekonstruktion • Externalisierung und Abstraktion

  10. Problematik • Manuelle Modellierungfehleranfällig • Automatische Konvertierung erfordert formale Semantik (FS) Probleme: • Meist nur Teilmenge der Semantik abgedeckt. • Fehlerpfad bezieht sich auf formales Modell, anstatt auf das eigentliche Programm. • Modellierungssprachen unterstützen nicht alle Konstrukte realer Programmiersprachen (dynamische Prozessgenerierung bzw. Speicher …)

  11. Moderner Ansatz • Verwendung virtueller Maschinen (VM) • Model Checker nutzt VM zur kontrollierten Ausführung des Programms Vorteile • Kein eigener Übersetzer nötig (gängige Compiler) • „Modell“ entspricht exakt der eigentlichen Programmsemantik. • Gegenbeispiele leicht nachvollziehbar. • Lowlevel-Fehler können abgefangen werden. (illegale Speicherzugriffe)

  12. Vorreiter: JPF (NASA) • „Java PathFinder“ (NASA) • Initiiert nach „Mars PathFinder“-Bug • Eigene VM

  13. Konzept von JPF . . aload_0 iconst_0 aaload bipush 20 invokespecial #3; astore_1 aload_0 arraylength iconst_1 if_icmple 27 aload_1 . . Class foo { public static void …. int i; if(P!=NP) i=42; . } Violation found: Step 1 – foo.java: i=42; Step 2 - foo.java: . Step 3: . . JPF javac => =>

  14. StEAM • Model Checker für (nebenläufige) C++ Programme. • Baut auf open source Projekt (ICVM). • Kein eigener Compiler, keine eigene VM. • Unterstüzt Multithreading.

  15. Überblick • Zweites Fazit Suchalgorithmen • Zusatz: Musterdatenbankauswahl • Anwendung: Verifikation von c++ Programmen • Zustandsbeschreibung und Heuristiken • Inkrementelle Adressierung • Zustandsrekonstruktion • Externalisierung und Abstraktion

  16. Internet C VM (ICVM) • Open-Source Projekt • Idee: Plattformunabhängikeit ohne proprietäre Sprachen wie Java oder C#. • Compiler + VM • MC68k-ähnlicher Befehlssatz (~64000 Instruktionen) • igcc (gcc für ICVM) => ELF format. • Auf Spiele ausgerichtet.

  17. Bau eines c++ Model-Checkers • Ziele • Kontrollierte Ausführung. • Multi-Threading. • Definition von formalen Eigenschaften. • Compiler bleibt unverändert. • Vergleichbare Projekte: • Verisoft (Godefroid, Bell Labs1996-2006 Bell Laboratories, Lucent Technologies) • Polyspace (ca. 95.000$)

  18. ICVM-Zustand

  19. StEAM-Zustand

  20. Kommandomuster • Annotation des Programms mit Zusatzinformation: • Quelldatei & Zeileninformation • Anmeldung eines Threads • Anfordern & Freigeben von Ressourcen (lock/unlock). • Assertions • Etc.

  21. Implementierung int a; a++; --a; a++; --a; a=17; dea9 fdec inc1l (-532,%fp) de75 fdec dec1l (-532,%fp) dea9 fdec inc1l (-532,%fp) de75 fdec dec1l (-532,%fp) e4eb 0011 fdec movewl #0x11,(-532,%fp) igcc =>

  22. Glob #include <assert.h> #include "MyThread.h" #define N 2 class MyThread; MyThread * t[N]; int i, glob=0; void initThreads () { BEGINATOMIC for(i=0;i<N;i++) { t[i]=new MyThread(); t[i]->start(); } ENDATOMIC } void main() { initThreads(); VASSERT(glob!=8); } #include "../src/mysrc/IVMThread.h" #include "MyThread.h" extern int running[2]; extern int glob; class IVMThread; MyThread::MyThread() : IVMThread::IVMThread() { } void MyThread::start() { run(); } void MyThread::run() { glob=(glob+1)*ID; } MyThread.cc glob.c ID=2,3 ID=1 ! Reihenfolge 2,3: glob=0,2,9 Reihenfolge 3,2: glob=0,3,8

  23. Suchbaum von Glob

  24. Features • Unterstützte Fehlertypen • Deadlocks • Priviledge Violations • Illegale Speicherzugriffe • Assertion-Violations • Unterstützte Suchalgorithmen • Breitensuche • Tiefensuche • Best-first & A*

  25. Heuristiken Wenig Expansionen gleich geringerer Platzbedarf Kürzere Fehlerpfade sind leichter nachzuvollziehen. Deadlock-Heuristiken • Most-Blocked: Maximale #blockierter Prozesse. • LockNBlock: … zusätzlich #“ge-lockter“ Ressourcen. • ReadWrite: Maximale #Lese / Schreibzugriffe auf globale Variablen.

  26. Heuristiken • Deadlock mit BFS, DFS, best-first

  27. Problem(e) • Ggf. sehr große Zustandsbeschreibung • Hoher Speicheraufwand zum Merken der besuchten Zustände. • Hoher Zweitaufwand für die Hashberechnung

  28. Überblick • Zweites Fazit Suchalgorithmen • Zusatz: Musterdatenbankauswahl • Anwendung: Verifikation von c++ Programmen • Zustandsbeschreibung und Heuristiken • Inkrementelle Speicherung & Adressierung • Zustandsrekonstruktion • Externalisierung und Abstraktion

  29. Inkrementelles Speichern • Übergänge verändern meist nur wenige Speicherzellen a=17; movewl#0x11,(-532,%fp) • => Speichere nur veränderte Komponenten explizit.

  30. Zustandsrekonstruktion • Identifiziere Zustand mit gener. Pfad.

  31. Zustandsrekonstruktion • Optical Telegraph, BFS

  32. Partielles Hashing • Schneller, aber mehr Kollisionen

  33. Partielles Hashing • Problem z.B. bei Bitstate-Hashing Hash-Vektor…00000000000000000000000000000…

  34. Partielles Hashing • Problem z.B. bei Bitstate-Hashing s Hash-Vektor…00000000000000000000000000000…

  35. Partielles Hashing • Problem z.B. bei Bitstate-Hashing s h(s) Hash-Vektor…00000000100000000000000000000…

  36. Partielles Hashing • Problem z.B. bei Bitstate-Hashing s h(s) Hash-Vektor…00000000100000000000000000000…

  37. Partielles Hashing • Problem z.B. bei Bitstate-Hashing s t h(s) Hash-Vektor…00000000100000000000000000000…

  38. Partielles Hashing • Problem z.B. bei Bitstate-Hashing s t h(s) h(t) Hash-Vektor…00000000100000000000000000000…

  39. Partielles Hashing • Problem z.B. bei Bitstate-Hashing s t h(s) T h(t) Hash-Vektor…00000000100000000000000000000…

  40. Partielles Hashing • Problem z.B. bei Bitstate-Hashing s t h(s) T h(t) ! Hash-Vektor…00000000100000000000000000000…

  41. Inkrementelles Hashing • Basiert auf: Rabin-Karp Algorithmus

  42. Inkrementelles Hashing • Basiert auf: Rabin-Karp Algorithmus

  43. Inkrementelles Hashing • Basiert auf: Rabin-Karp Algorithmus

  44. Inkrementelles Hashing • Basiert auf: Rabin-Karp Algorithmus

  45. Inkrementelles Hashing • Basiert auf: Rabin-Karp Algorithmus

  46. Beispiel: Puzzle 1 2 3 4 1 2 3 4 5 6 7 8 5 6 7 8 9 10 11 9 10 11 12 13 14 15 12 13 14 15 vorberechnet h(S´) = ( h(S) – 12*(16^11) mod q + 12*(16^15) mod q ) mod q vorberechnet

  47. Dynamisierung: Stapel • Einfügen und Löschen an einem Ende h(S´) = 2*3^1+1*3^2+3*3^3+3*3^4+ 1*3^5 mod q = h(S) + 1*3^5 mod q 1 3 3 1 2

  48. Dynamisierung:Lineare Methode Einfügen: pi si Löschen: pi si

  49. Baum-Methode h(1,2,3,1,2,2,1,2) = 4+1*3^2 + 9*3^(2+2) mod 17 = 11 h(3,1) = 3*3+1*9 mod 17= 1 h(2,2,1,2) = 9 = 6+h(2,1,2)*3^1 = 6+1*3 mod 17 h(1,2) = 1*3+2*9 mod 17 = 4 h(s) = (Σi si 3^i) mod 17 h(2) = 2*3^1 mod 17= 6

  50. Strukturierte Zustandsvektoren Angeforderter Speicher Globale Variablen Lineare Methode Stapel Baum- Methode Statische Methode 1 4 3 3 3 3 1 1 2 2 Statische Methode

More Related