1 / 35

Laufzeitumgebungen

Laufzeitumgebungen. Agenda. Programmiersprachen und Laufzeitumgebungen Stack Speichermanagement Automatische Speicherbereinigung Virtuelle Maschinen Fazit. Programmiersprachen. Variablen , Funktionen und Operatoren. .NET Common Intermediate Language .assembly extern mscorlib {}

badrani
Download Presentation

Laufzeitumgebungen

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. Laufzeitumgebungen

  2. Agenda • Programmiersprachen und Laufzeitumgebungen • Stack • Speichermanagement • Automatische Speicherbereinigung • Virtuelle Maschinen • Fazit

  3. Programmiersprachen • Variablen, Funktionen und Operatoren .NET Common Intermediate Language .assemblyexternmscorlib{} .assembly hello {} .methodpublicstaticvoidMain() cilmanaged { .entrypoint .maxstack1 ldstr"Hallo Welt!" callvoid[mscorlib]System.Console::WriteLine(string) ret } • C# • using System; • namespaceConsoleApplication1 { • classHelloWorld • { • publicstaticvoidMain(string[] args) • { • System.Console.WriteLine("Hallo Welt!"); • } • } • } • Compiler übersetzt in ausführbaresProgramm

  4. Programmiersprachen • Erstelltes Programm benötigt spezielle Routinen • Kommunikation mit dem Betriebssystem • Speicheranforderungen • E/A - Operationen • Abwicklung von Funktionsaufrufen • Bibliothek für diese Routinen: Laufzeitumgebung • Eng verknüpft mit dem Compiler • Funktionsumfang variiert

  5. Laufzeitumgebungen • Schnittstelle • Anwendungsprogramm -Betriebssystem und Hardware • Umgebung in der Programme ausgeführt werden

  6. Laufzeitumgebungen • Adressraum • Compiler • Programmcode • Statische Daten • Laufzeitumgebung • Stack • Heap

  7. Agenda • Programmiersprachen und Laufzeitumgebungen • Stack • Speichermanagement • Automatische Speicherbereinigung • Virtuelle Maschinen • Fazit

  8. Stack • Wird zur Funktionsausführung verwendet • Funktionsaufrufe zeitlich verschachtelt • Aktivierungsbaum • Aktivierungseintrag • Lokale Variablen • Prozessorstatus vor Funktionsaufruf • Rücksprungadresse • Rückgabewert • Übergebene Parameter • Funktionsaufruf legt Eintrag auf dem Stack ab • Funktionsende entfernt Eintrag vom Stack

  9. Stack Aktivierungsbaum Stack main() int x = 6, y = 7 main a intresult a(6,7) int x = 6, y = 7 work(6,7) print(42) work intres int x = 6, y = 7 print intoutput = 42

  10. Stack • Hardwareunterstützung • x86: push/pop, … • .NET CLR: Managed Stack • ldelem, stelem - Arrays • ldfld, stfld – Field ofObject • ldstr, ststr – Strings • …

  11. Agenda • Programmiersprachen und Laufzeitumgebungen • Stack • Speichermanagement • Automatische Speicherbereinigung • Virtuelle Maschinen • Fazit

  12. Speichermanagement • Heap • Dynamischer Speicher • Langlebige Daten • In .NET: für alle Referenztypen • Speichermanager • Verwaltet den Heap-Speicher • C: „malloc()“, „free()“ • C++: „new“, „delete“ • C#: „new“ • Reihenfolge von Zuweisung und Freigabe beliebig • Speicheranfragen an das Betriebssystem

  13. Speichermanagement • Anforderungen an Speichermanager • Speichereffizienz • Wenig Speicher verwenden • Fragmentierung vermeiden • Programmeffizienz • Daten im Speicher sinnvoll anordnen • Lokalität • Arbeit mit relativ kleiner Befehls- oder Datenmenge • Zeitliche / Örtliche Lokalität • Geringer Overhead • Speicheranforderung und -Freigabe muss schnell sein CPU L1 L2 RAM

  14. Speicherfragmentierung • Fragmentierung • Freie Blöcke auf dem Heap • Löcher • Entsteht durch Speicheranforderungen und –freigaben • Fragmentierung vermeiden • Speicherverbrauch steigt an • Neue Anforderungen können evtl. nicht mehr erfüllt werden • Lokalität leidet

  15. Strategien für Heapmanagement • First-Fit • Erster passender Block • Next-Fit • Erster passender Block, nach zuletzt zu-gewiesenem Block

  16. Strategien für Heapmanagement • Best-Fit • Genau passender Block • Best-Fit langsamer als First-Fit • Vermeidet Fragmentierung besser

  17. Beispiel für Fragmentierung • Analyse des Heapspeichers von MozillaFirefox 3 • Ziel: Reduzierung des Speicherverbrauchs • Legende: • Voll belegter Block • Teilweise belegter Block • Freier Block • Auslagerbarer Block

  18. Beispiel für Fragmentierung Standard Windows Heap

  19. Beispiel für Fragmentierung jemalloc

  20. Speichermanagement • Verbesserter Speichermanager (tcmalloc) für MySql

  21. Agenda • Programmiersprachen und Laufzeitumgebungen • Stack • Speichermanagement • Automatische Speicherbereinigung • Virtuelle Maschinen • Fazit

  22. Automatische Speicherbereinigung • Manuelle Speicherbereinigung • Fehlerbehaftet • Fragmentierung • Automatische Speicherbereinigung • Speicher von unbenutzten Objekten freigeben • Referenzen auf andere Objekte erkennbar • Anforderungen • Geschwindigkeit • Fragmentierung vermeiden • Pausenzeit minimieren

  23. Mark-and-Sweep GC • Einfacher GC Algorithmus • Rootset: Alle aktiven Objekte • Stack, Register, statische Felder • Unscanned: Liste mit referenzierten Objekten • Free: Liste aller Gargabe Objekte • 2 – Phasen • Mark • Sweep

  24. Mark-and-Sweep GC Sweep - Phase Mark - Phase Vorbereitung Heap Unscanned Rootset Obj 1 Obj 1 Obj 3 Obj 2 Obj 2 Obj 5 Obj 3 Obj 4 Free Obj 4 Obj 5 Obj 6 Obj 6

  25. Mark-and-Sweep GC • Vorbereitung: • Für Rootset-Objekte Reached-Bit = 1 • Rootset-Objekte in Unscanned einfügen • Mark: Iteration über Unscanned Liste • Objekt o wird untersucht und aus der Liste entfernt • Existiert Referenz auf Objekt o‘, so wird dies auch untersucht • Sweep: Iteration über den Heap • Objekte mit Reached-Bit == 0 in Freiliste einfügen • Speicherbereiche der Freiliste werden wiederverwendet

  26. Mark-and-Sweep GC • Algorithmus muss den kompletten Heap durchsuchen • Langsam • Gefahr des Thrashing • Verbesserter Algorithmus • Unreached: Zusätzliche Liste aller zugewiesenen Objekte • Mark-Phase aktualisiert Unreached-Liste • Garbage Objekte verbleiben in Unreached • Unerreichbare Objekte werden in die Freiliste eingefügt • Kein durchsuchen des Heap nötig

  27. Mark-and-Compact GC • Mark-Phase • Keine Sweep-Phase • Erreichbare Objekte werden kopiert • Freier Speicherbereich für neue Zuweisungen • Keine Fragmentierung

  28. Spezielle GC Algorithmen • GC nach Generationen • Reduzierung der Pausenzeit für den GC-Lauf • Objekte haben üblicherweise eine kurze Lebenszeit • Generation 0: Junge Objekte, wird häufig bereinigt • Generation n: Alte Objekte, selten bereinigt • Speicherbereinigung läuft immer für Generation und alle niedrigeren • Parallele GC • Idee: GC läuft in Threads parallel zu den Anwendungsthreads • Ideal für Serveranwendungen auf Multi-Prozessorsystemen

  29. Beispiel .NET CLR • Managed Heap • Von der CLR verwaltet • Mehrere Segmente • Small Object Heap (SOH) • Large Object Heap (LOH) für Objekte > 85 KB • GarbageCollection • Nach Generationen mit 3 Generationen • Mark-and-Compact für SOH • Mark-and-Sweep für LOH • Verzicht auf Compact für große Objekte

  30. Beispiel .NET CLR • ConcurrentGC • Parallel zu Anwendungsthreads • Zwei Pausenphasen, keine Allokationen möglich • Nur für Gen. 2 GC • Seit .NET CLR 1.0 • Background GC • Ab .NET CLR 4 • Nur für Gen. 2 GC • Allokationen durchgehend möglich • Pausiert für Gen. 0,1 GC (Foreground GC) • Verkürzte Pausenphasen

  31. Agenda • Programmiersprachen und Laufzeitumgebungen • Stack • Speichermanagement • Automatische Speicherbereinigung • Virtuelle Maschinen • Fazit

  32. Virtuelle Maschinen • Abstrahieren von der Hardware • Codeausführung durch Interpreter • Hotspots werden in Maschinencode übersetzt (JIT) • Beispiele: • Java VM • .NET CLR • TraceMonkey (JavaScript) • Smalltalk • …

  33. Agenda • Programmiersprachen und Laufzeitumgebungen • Stack • Speichermanagement • Automatische Speicherbereinigung • Virtuelle Maschinen • Fazit

  34. Fazit • Laufzeitumgebung • Verwendet bei Programmausführung • Schicht zwischen Anwendung und Hardware und OS • Spezielle Form: Virtuelle Maschinen • Stack • Steuerung der Funktionsausführung • Heap • Dynamischer Speicher • Verwaltet vom Speichermanager • Automatische Speicherbereinigung • Unreferenzierte Objekte vom Heap entfernen

  35. Ende • Quellen: • http://en.csharp-online.net/HelloWorld_in_MSIL • http://mysqlha.blogspot.com/2009/01/double-sysbench-throughput-with_18.html • http://channel9.msdn.com/shows/Going+Deep/Maoni-Stephens-and-Andrew-Pardoe-CLR-4-Inside-Background-GC/ • http://www.ecma-international.org/publications/standards/Ecma-335.htm

More Related