8 - Systemprogrammierung 1 (SP1) [ID:2559]
50 von 808 angezeigt

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

Teil einer Videoserie :

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

Einbetten
Wordpress FAU Plugin
iFrame
Teilen