Cache und Hauptspeicher (Teil 1) Rainer Gerhards https://www.youtube.com/watch?v=BdNk6kYyX6Y Transkript (automatisch erstellt) 0:00 hallo mein Name ist reiner Gerhard und ich möchte heute etwas zu zur Zuordnung zwischen kech und Hauptspeicher sagen das ist der zweite Versuch der 0:09 Präsentation ist nach wie vor unter live Bedingung mal schauen was so alles passiert welche Telefone klingeln W reinläuft werden wir sehen mir geht's 0:16 drum zu zeigen wie KCH und hauptspeicherorganisation zusammenwirken und wie man ermitteln kann was in den kech geladen wird und vor allen Dingen 0:25 nach welcher Methode das geladen wird zunächst ein paar rundüberlegung dazu warum es überhaupt käches gibt der Hauptspeicher ist gerade bei heutigen 0:36 CPUs einfach viel zu langsam und die große Bremse der Verarbeitungsgeschwindigkeit die caschspeicher sind sehr 0:45 teuer zu teuer um als als komplett als Hauptspeicher realisiert zu werden das heißt also wir haben zwar die Möglichkeit schnelle Speicher zu bauen 0:55 können die aber preislich nicht in einer Größenordnung ansetzen wie den Haupt Speicher die Lösung ist indem man beides kombiniert das heißt wir haben eine 1:05 Teilmenge die im KCH gehalten wird da gibt es zum einen die zeitliche Lokalität wenn wir Algorithmen betrachten dann laufen 1:15 die Programme im Regelfall ja in Schleifen und innerhalb einer Schleife wird zeitlich sehr nah immer und immer wieder auf dieselben Speicherelemente 1:25 zugegriffen und man bemüht sich eben durch den kech dies in den schnellen Speicher zu laden zwar nur wenig aber eben das was unmittelbar benötigt wird 1:35 und dadurch eben schnellen Zugriff zu erzielen das gleiche räumliche Lokalität da geht es darum dass in den Schleifen im Regelfall auch benachtbarte 1:44 Speicherelemente benutzt werden sass also wenn ich einen gewissen Teil des käches lade dann eben auf benachtbarte stellen 1:55 auch sehr sehr schnell zugreifen kann kurz ein paar Worte zuur Organisation des Hauptspeichers ich gehe von einem Modell 2:04 aus in dem der Hauptspeicher als Matrix organisiert ist das muss nicht unbedingt so realisiert sein ich weiß es gibt einige Architekturen wo es so realisiert 2:15 ist weiß nicht inwie weit das die überwiegende Anzahl der Architekturen ist ist für das Verständnis hier aber eigentlich auch egal denn es ist eine 2:24 Möglichkeit wie man einen kech real einen Hauptspeicher realisieren kann und soll von DAH als Beispiel genügen wichtig eben wir haben Zeilen und 2:34 Spalten ja genau eine beispielarchitektur wir haben einen konzeptionell linearen Adressraum das heißt Adressen fangen bei 2:41 Null an und enden bei wo auch immer der Hauptspeicher aufhört meint weeggen 8 GB vergleichen kann man das sehr gut mit Adressen in einer Straße die fangen 2:51 üblicherweise bei der Hausnummer 1 an und gehen bis zur Hausnummer ja wie viel auch immer 471 und es ist auf Adresse 0 folgt 3:01 Adresse 1 auf Adresse 1 folgt Adresse 2 etc es gibt keine Sprünge in der Adresse das ganze wie gesagt abgebildet in einer Matrix 3:12 es gibt sogenannte adressdecoder wenn ich jetzt diese Hauptspeicher Matrix auslesen möchte dann gibt es schaltnetze die das machen 3:20 und die Arbeiten natürlich mit decod auf die die Adressen gelegt wden und zwar die Zeilen und die spaltenadressen wir werden das gleich noch genauer sehen 3:28 wichtig ist eben dass jede Zeile oder das Decoder für die Zeilen existieren und das Decoder für die Spalten existieren der caschspeicher ist ähnlich 3:39 organisiert äh auch Zeilen und spaltenweise äh wobei natürlich die äh zur Verfügung stehende Anzahl Zeilen kleiner bzw sogar 3:49 dramatisch kleiner ist als im realen Hauptspeicher denn sonst könnten wir den Hauptspeicher direkt wieder als äh mit der gleichen Technologie wie den casch 3:57 realisieren hätten dann aber eben das Kostenproblem daher muss der Käch natürlich deutlich kleiner sein die Anzahl der Spalten entspricht allerdings 4:06 meines Wissens nach im Regelfall immer dem der Anzahl der Spalten im Hauptspeicher 4:12 Entschuldigung wie wird nun auf ein Datum zugegriffen man beachtet das Datum hier jetzt nicht als Tagesdatum gemeint ist sondern eben die Einzahl von 4:22 Daten zunächst wird mit Hilfe der adressdecoder die jeweilige Zeile ausgewählt hier jetzt blau oder grau eingezeichnet wir wissen jetzt schon 4:33 dass in diesem Bereich das gewünschte Datenwort liegt das ganze wird in ein Register für worochtselektion übertragen so habe ich das jetzt mal genannt das 4:42 muss nicht zwingend ein Register sein das kann auch anders realisiert sein ist aber oft so dass eben aus dem Hauptspeicher aus der 4:50 hauptspeichermatrix die Zeile in einen zwischen ein zwischenpuffer ausgeführt übertragen wird und in diesem zwischen Puffer gibt es dann eben die 5:01 spaltendecoder die das gewünschte speicherwort dann letztlich auswählen das was wir jetzt hier äh rot eingezeichnet haben das ganze wird dann 5:11 anschließend in das CPU-Register geladen ja also wichtig diese Abfolge Auswahl der Zeile äh und anschließend Auswahl des gewünschten speicherworts aus den 5:20 zwischenpuffern das ist dann in Ergebnis das matrixelement äh was gewünscht wird und was geladen wurde oder geladen werden kann 5:30 jetzt betrachten wir den kech in einem simplen Fall in der Architektur auch hier wird zunächst die Zeile wieder im Hauptspeicher ausgewählt das kennen wir 5:39 ja von dem Fall ohne KCH dann wird aber nicht in einen speziellen zwischenpuffer übertragen sondern dann erfolgt der Übertrag in den kech hier ist wichtig zu 5:48 beachten dass der Übertrag in diesen zwischenpuffer im Prinzip für ein Wort genauso schnell stattfindet wie für acht die wir jetzt hier in unserem Beispiel 5:59 haben das heißt hier spare ich schon sehr viel Zeit indem ich diese acht Worte quasi in der gleichen Zeit übertragen kann in den kech wie ich ein 6:07 einziges kann das ist schon mal im hinbrig auf die räumliche Lokalität recht interessant da kann ich nämlich wenn ich jetzt alle acht Elemente 6:15 ansprechen würde dann kann ich mir natürlich mit einem Achtel der Zeit diese Elemente in den Cash Laden im Cash erfolgt dann wieder mit den 6:24 spaltendecodern die Auswahl des gewünschten speicherwortes jetzt hier wieder rot und das ganze wird dann natürlich wieder zurück in die in das 6:33 CPU-Register geladen wichtig jetzt würde jetzt das nächste speicherwort gewünscht dann kann ich natürlich das unmittelbar nur durch äh Selektion im Cash Laden 6:43 brauch nicht mehr den Übertrag aus dem Hauptspeicher