Ich nehme den Teil an. Moin Moin an der Seite. Hat schon jeder so ein Zettelchen?
Jeder so ein Zettelchen? Nein? Das darfst du auch noch mit meinem Kunden tun.
Geht ein für Vorlesungen, Übungen, Laborübungen, so du mitmachst.
Jo, gibt es andere Fragen? Keine Fragen? Ihr schwitzt auch alle. Jo, ok, dann machen wir
weiter mit dem, was wir Dienstag angefangen haben. Ihr erinnert euch, wir wollen
eine CISC Instruktion holen. CISC Instruktion heißt komplexe Instruktion,
komplexe Instruktion heißt mehrere Parameter, mehrere Parameter heißt
lange Instruktion, kurze Instruktion, keiner weiß so genau. Jo, dann haben wir uns
angeguckt, wie wir uns die dann aus dem Speicher holen können.
Und haben gesagt, naja, dann nehmen wir doch zwei Code Caches und der eine liefert
den Anfangsteil und der zweite so notwendig den Rest. Jo, Frage dazu, was ist
denn jetzt, wenn wir so kurz am Ende des Speichers sind?
Also typischer Fall, wir haben unseren Speicher und irgendwo haben wir unsere
Funktion und am Ende der Funktion steht ja wohl ein Return. Return typischerweise
ein simpelster Fall einer Instruktion, ein Byte. Und dann kann es ja sein, dass
an der Stelle auch der Speicher, das BIOS, das keine Ahnung was zu Ende ist.
Was ist denn jetzt das Problem?
Na gut, das Problem sollte schnell jeder sehen. Ich versuche, was weiß ich, die
letzte Cache-Line zu lesen. Da muss das Red ja drin sein. Und da ich eigentlich
weiß, per se, ob da jetzt nicht vielleicht noch was danach kommt, lese ich die
nächste Cache-Line. Was passiert jetzt?
Ich hole mir die zwei oder ich versuche es mal, den ersten holen, ist kein Problem,
aber ich kann es ja noch nicht ausführen, weil ich nicht weiß, ob das alles ist.
Also muss ich den nächsten auch noch holen, den nächsten holen, PageFault oder
Buserror oder irgendeiner Art von Fehler, weil CPU kriegt nichts.
Ja, was heißt das?
Ja, heißt natürlich immer, was weiß ich, in jedem Code-Fragment, was du
schreibst, du hast dein Programm, am Ende noch ein bisschen mehr, du hast deine
Library, am Ende noch ein bisschen mehr, noch eine Library, am Ende ein bisschen
mehr, Betriebssystem, am Ende noch ein bisschen mehr, ein bisschen mehr, ein
bisschen mehr, ein bisschen mehr. Gut, und eine Firma Intel, die irgendwann mal
umgestiegen ist von einzelne Bytes holen und ausführen, hin zu, naja, wir holen mal
ganze Instruktionen, die kann das nachträglich nicht mehr. Kann nachträglich
dem Compiler nicht mehr sagen, klebt mal was dahinter. Ja, gut, wie ist das
lösbar? Naja, im Prinzip so lösbar, dass man zu jedem Byte, was man da kriegt,
möglicherweise auch noch so einen Invalid-Bit mitkriegen muss. Dann kriege ich
halt hier meine in diesem Falle 16 Bytes und nochmal 16 Bytes, wobei allerdings
die 16 Bytes alle als Invalid markiert sind. Und wenn dann die CPU, die
Pipeline versucht das auszuführen und sieht, ja, hier steht ein, keine Ahnung, ein
Move und Parameter haben wir nicht, dann Parameter sind Invalid, dann muss halt
an der Stelle einen PageFault, BusError, keine Ahnung was produzieren.
Ja, also da ist noch so eine kleine Baustätte, die man immer machen muss.
Gleiches gilt natürlich am Ende jeder Page, also nicht nur am Ende des echten
Speichers, sondern im Prinzip auch am Ende einer ganz normalen Wald- und Wiesen-Page.
Die nächste Page ist vielleicht noch nicht geladen, aber CPU will so ein paar Bytes,
ja, dann sieht sie auch hier, okay, die Page ist nicht valid, also muss er erstmal
einen PageFault generieren und dann beim nächsten Mal es halt nochmal probieren.
Aber immer wieder ein bisschen Hardware, die man extra einbauen muss.
Wenn ich jetzt gar keine Urheber habe, sondern nur physikalische Interessen, dann ist das doch wahrscheinlich gar kein Problem, weil das einfach umgeräumt wird.
Steht da halt was drin, was da ansehen stehen sollte, aber es interessiert mich eigentlich nur jetzt im Anschauen.
Presenters
Zugänglich über
Offener Zugang
Dauer
01:35:55 Min
Aufnahmedatum
2013-06-20
Hochgeladen am
2019-04-06 23:29:03
Sprache
de-DE