Folien

Werbung
Einführung in die Systemprogrammierung
Vermeidung von Speicherfehlern in Höheren Programmiersprachen
Prof. Dr. Christoph Reichenbach
Fachbereich 12 / Institut für Informatik
25. Juni 2015
Systemprogrammierung und Hochsprachen
Programm
Bibliotheken
Laufzeitsystem
Systemprogramm
Systembibliotheken
Betriebssystem
Rechnerarchitektur
Vor- und Nachteile von Systemsprachen
Hoher Grad an Kontrolle über Hardware:
I
I
I
Hohe Performanz erreichbar
Speicheraufwand minimierbar
Echtzeit-Programme möglich
Detailkontrolle wird oft erzwungen:
I
I
Speicherfehler
(Relativ) geringe Entwicklungsgeschwindigkeit
Gründe:
I
I
I
Speicherfehler
Detailentscheidungen
evtl. geringe Abstraktion
Speicherfehler (Wiederholung)
I
I
I
I
Doppel-free()
Deallozierung vergessen
Hängender Zeiger
Zeigerarithmetik-Fehler:
I
I
Falscher Typ
Falscher Speicherbereich:
I
Array-Grenzen überschritten
Wie können wir Speicherfehler einzäunen?
Lösungsansatz #1: Starke Typisierung
I
I
Jeder Speicherinhalt hat einen Typ
Der Typ diktiert “Vertrag”:
I
I
I
Welche Speicherinhalte sind erlaubt?
Was darf mit Speicherinhalt geschehen?
Starke Typisierung:
I
I
Erzwingt Typverträge
Prüfungen können stattfinden:
I
I
statisch (Bei Übersetzung)
dynamisch (Bei Ausführung)
Lösungsansatz #2: Automatische
Speicherverwaltung
I
Viele Speicherfehler werden von free ausgelöst?
⇒ Sprachdesign ohne Free:
I
I
Laufzeitsystem entsorgt ungenutzten Speicher
automatisch
Speicherallozierung kann explizit (Java) oder implizit
(Haskell) stattfinden
Laufzeitsystem benötigt Automatische
Speicherverwaltung
Hochsprachen-Lösungen für Speicherfehler
I
I
Starke Typisierung [ST]:
Automatische Speicherverwaltung [ASV]
Doppel-free()
Deallozierung vergessen
Hängender Zeiger
Falscher Typ
Falscher Speicherbereich
Array-Grenzen überschritten
ST
ST
ST
ST
ASV
(ASV)
ASV
Auch mit automatischer Speicherverwaltung sind
vergessene Deallozierungen noch möglich
Zusammenfassung: Speicherfehler und
Hochsprachen
I
Hochsprachen vermeiden Speicherfehler durch
I
Starke Typisierung:
I
I
I
I
Schließt ‘Typ-Verträge’
Erzwingt diese Verträge
Verbietet Zeigertypen
Automatische Speicherverwaltung:
I
I
Kein explizites free
Automatisches Speicherverwaltungssystem
(garbage collection)
Hochsprachen-Laufzeitsysteme
I
I
C/C++ verwenden vergleichsweise einfaches
Laufzeitsystem
Andere Hochsprachen benötigen komplexere
Laufzeitunterstützung:
I
I
I
I
Umsetzung der Starken Typisierung
Automatische Speicherverwaltung
Code-Optimierung zur Laufzeit
Unterstützung für Sprachfeatures:
I
I
I
I
I
I
Objekte und Klassen
Funktionen als Werte
Nachladen von Code zur Laufzeit
Nebenläufige Ausführung und Synchronisierung
Ausnahmen
Reflektion
...
Hochsprachen-Laufzeitsysteme
Wir betrachten heute die Laufzeitsysteme folgender Sprachen:
I
I
I
I
Python
Java
Haskell
AttoL
All diese Sprachen leben in der gleichen Laufzeitumgebung wie
C-Programme, nutzen sie aber unterschiedlich
Herunterladen