Willkommen zur heutigen Systemprogrammierung. Wir haben uns letzte Woche mit den Effekten von
Betriebssystem, Laufzeit, Umgebungen, Architektur und allem Möglichen auf die Ausführung von einem
ein wenig simplen Programm, nämlich der Initialisierung einer Matrix beschäftigt.
Und ich war nicht ganz fertig geworden damit, deswegen noch mal kurz zum Einstand von dem
ganzen, dieses Szenario für dieses kleine Programm, das wir uns da angeguckt hatten,
also letztendlich ein Programm, das eine Matrix entweder zeilen oder spaltenweise mit einem Wert,
also alle Zellen der Matrix mit einem Wert initialisiert. Da hatten wir ja festgestellt,
dass wir also sehr, sehr unterschiedliche Laufzeiten haben, einerseits zwischen der
Zeilen und der spaltenweisen Belegung der Matrix, andererseits aber auch abhängig von
verschiedenen Prozessorechitekturen und Betriebssystemen. Und einige dieser Effekte
hatten wir uns das letzte Mal ja schon angeschaut. Also das eine Problem war, wir legen dieses
zweidimensionale Feld in den einen dimensionalen Arbeitsspeicher und die Frage ist einfach laufen,
wie linear laufen wir da eigentlich nun durch? Und nachdem typischerweise das eben
zeilenweise abgelegt ist, laufen wir natürlich, wenn wir zeilenweise durchlaufen, eigentlich auch
linear durch den Speicher durch. Wenn wir spaltenweise durchlaufen, dann springen wir
letztendlich und bei der Größe dieses Feldes, wie groß hatten wir das gemacht? In dem Beispiel
war es 11.000x11.000 Feldgröße. Das heißt, wenn wir also da spaltenweise durchlaufen,
dann springen wir quasi 11.000 Feldelemente weit in diesem Speicher mit jedem Schritt. Und das hat
natürlich Folgen an den verschiedensten Stellen. Also zum einen, was die Caches angeht, also auf
Hardware Ebene, weil wir da, je nachdem, ob wir uns quasi für die Cache Strategien günstig oder
ungünstig verhalten, eben mehr Cache Misses oder weniger Cache Misses haben. Auf Compiler Ebene
haben wir gesehen, da passiert irgendwas. Das war so ein Effekt, den konnte ich letzte Woche
nicht wirklich erklären, was da abgeht oder sagen wir mal, warum diese Auswirkungen da sind. Auch das
ist ab und an natürlich tatsächlich das Resultat, dass man, auch wenn man sich ganz gut mit all den
Schichten auskennt, die da dazwischen stecken, dass man am Ende dann doch nicht weiß, was da wirklich
abläuft. Wörter der Speicher war ein Effekt ähnlich wie beim Cache, bloß im grober Granular,
an der Stelle eben nicht die Ein- und Auslagerung zwischen dem Hauptspeicher und dem schnellen
Zwischenspeicher auf der CPU, sondern nun die Ein- und Auslagerung zwischen dem Hintergrundspeicher
auf der Platte und dem Hauptspeicher. Ein Effekt, der eben nur in den Fällen D und F auftrat,
weil da der gesamte Hauptspeicher zu klein war, um die Matrix überhaupt aufzunehmen und bei den
anderen Fällen taucht dieser Effekt eben nicht auf, weil der Hauptspeicher groß genug war für die
Matrix. Da kann es natürlich trotzdem auch zu Seitenfehlen kommen, weil möglicherweise
ja andere Programme mit dieser Matrix-Initialisierung konkurrieren und durch das abwechselnde
Aktivieren von anderen Programmen und diesem Matrix-Initialisierer eventuell natürlich auch
Auslagerungen von Seiten passieren können, aber natürlich nicht in der Intensität, in der das
passiert, wenn ein Programm also wirklich so quasi mehr oder weniger diagonal durch seinen
Speicher rennt und jede Seite eigentlich nur einmal anfasst dabei, weil dann kann man davon ausgehen,
wenn die Zahl der Seiten eben nicht ausreichend ist, dass wenn das Programm einmal durch ist und
wieder von vorne beginnt, dass dann die Wahrscheinlichkeit, dass die Seite ausgelagert
ist, sehr sehr groß ist. Da kommt es einfach darauf an, eben in welcher Reihenfolge werden die
verschiedenen Speicherbereiche, die Seiten einer Anwendung referenziert. So und den letzten Punkt,
Betriebssystem Architektur, den hatten wir uns noch nicht angeschaut. Dahin will ich jetzt noch
mal springen, relativ schnell, den Rest hatten wir das letzte Mal betrachtet, aber die Betriebssystem
Architektur. Letztendlich ist die Frage, wie sind Systemfunktionen realisiert und bei Architektur
spricht man immer von der Frage Schönheitsstabilität und Nützlichkeit und je nach Bedarf wird man,
sind Systemfunktionen heutzutage im Betriebssystem einfach unterschiedlich ausgelegt. Beispiele
für unterschiedliche Auslegungen von Systemfunktionen ist die Frage, ob sie sich eine
gleiche Domäne oder nicht teilen. Domäne an der Stelle ist ein sehr abstrakter Begriff,
bedeutet in aller Regel primär den Adressraum, den virtuellen Adressraum. Ich hatte über virtuelle
Adressraume schon häufiger gesprochen und die Frage ist einfach, gibt es quasi einen virtuellen
Presenters
Zugänglich über
Offener Zugang
Dauer
01:28:23 Min
Aufnahmedatum
2012-11-26
Hochgeladen am
2012-12-17 15:27:33
Sprache
de-DE