Fragen zur Prüfungsvorbereitung GRa SS2015

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Fragen zur Prüfungsvorbereitung GRa SS2015
Ich habe hier gelesen, dass am kommenden Fragestunde für GRa ist, allerdings weiß ich noch nicht, ob ich das zeitlich hinbekomme, da zu sein und vielleicht lassen sich einige Fragen ja auch schon vorher klären. Wäre toll, wenn mir jemand dabei helfen könnte:

1.) Beim Paging gibt es ja insbesondere in den Altklausuren früherer Jahre zig Flags (Cache Disable, Execute Enable, Write Enable, Present) auch wenn sie immer mal wieder anders heißen. Wann würde mann denn das Cache disable Bit setzen? Für Grafik-/IO-Speicher?
Welche Flags würde man beim Paging für shared memory/libraries setzen?

2.) Ist es richtig, dass alle Flags aus der page table mit Ausnahme des present-Bits auch im TLB gespeichert werden? Das present-Bit ist im TLB schließlich überflüssig, aber der Rest doch notwendig.

3.) Beim Skizzieren von Page-Table-Hierarchien: Darf man die Anfangspositionen der Tabellen und die Adressen der Seitenrahmen (das Alignment beachtend) frei wählen und die restlichen, nicht-gesetzten Einträge einfach mit “…0” abkürzen? Gehört das PDBR auch zum Zeichnen der Tabellen-Hierarchie?

4.) Mir ist klar, dass eine nicht-vorhandene Seite (Present-Bit) einen Page-Fault auslöst. Aber welche Art von Fehler/Exception wird ausgelöst, wenn z.B. versucht wird, eine Adresse in einer Seite ohne Execute-Enable mit call aufzurufen oder zu schreiben ohne Write-enable?

5.)Paging bezeichnet ja das automatische Aus- und Einlagern von Seiten genauso wie das gesamte Verfahren der Verwaltung des virtuellen Speichers als einen großen in gleichgroße Zellen unterteilten Adressraum. Steht dann auch Segmentierung nicht nur für das Verfahren, mehrere unabhängig virtuelle Speicherbereiche anhand ihrer Segmentnummer und der dazu zugehörigen Anfangsadresse sowie Segmentlänge zu verwalten, sondern auch die automatische Aus- und Einlagerung der Segmente auf die/von der Festplatte?

6.) Sowohl bei Segmentierung als auch beim Paging ist die Hardware für die Umsetzung des Speicherschutzes unter Zuhilfenahme der Page-/Segment-Tabellen zuständig. Stimmt das so?

7.) In den Übungen gab es einmal die Frage, ob sich Speicherschutz ohne HW-Unterstützung realisieren lässt. Ich denke nicht, dass es möglich ist, im Kommentar des Korrektors stand aber nur, dass es nicht praktikabel sei, bei jedem Speicherzugriff eine Trap auszulösen. Ist es nur “nicht praktikabel” oder wirklich “(effektiv) unmöglich”?

8.)Zur Entwicklung von SDRAM bis DDR3:
Der Witz ist doch gerade, dass die Speicherzellen sich im Wesentlichen nicht verändert haben, oder? Lediglich durch Erhöhen des Prefetch pro Datenleitung, dem Übertragen von Daten auch bei der fallenden Flanke und Erhöhung des IO-Taktes um den höheren Prefetch pro Speichertakt auch übertragen zu können, sind die DDR1- bis DDR3-SDRAMs sukzessive schneller geworden?

9.) Virtuelle/physikalische Caches unterscheiden sich nur darin, welche Adresse der Daten zur Bestimmung der Index-Menge und für das Tag verwendet werden? Also virtuelle oder physikalische Adresse?

10.) Ist es beim Pipelining relevant in welcher Pipeline-Stufe Befehle aufgrund von Daten-/Steuerungshazards warten?
Bei Daten-Hazards sollten die nachfolgenden Befehle sicherlich vor der OH-Phase warten, aber wie sieht es z.B. mit bedingten Sprüngen aus? Auch wenn keine spekulative Ausführung vorhanden ist, wird dann in der BH-Phase schon der potentiell nächste Befehl bereit gehalten, auch wenn der bedingte Sprung noch nicht (in OH) ausgewertet ist?

Z.B. wenn wir eine BH-BD-OH-Pipeline haben und der Befehl jl ist jetzt in OH gerutscht. Dann ist ohne spekulative Ausführung der nächste Befehl sicherlich höchstens in BH und nicht in BD, d.h. wir haben einen leeren Pipeline Zyklus.
Ist denn dann in BH schon der sequentiell nächste Befehl vorhanden, auch wenn er nicht in BD wandert?
Und wann genau wird der passende Befehl zum bedingten Sprung geladen? Läd BH den richtigen Befehl im selben Takt in dem jl in OH kommt?
Also sodass zwischen dem passenden nachfolge-Befehl und dem bedingten Sprung nur einmal NOP steht, oder setzt der bedingte Sprung die richtige Instruktion erst für den darauffolgenden Takt, also sodass die nachfolgende Instruktion erst dann in BH kommt, wenn der bedingte Sprung in die nächste Stufe kommt (z.B. Ausführen 1)? Dann hätten wir zwischen dem bedingten Sprung und dem nachfolgenden Befehl zwei NOPs.

11.) Beim Übersetzen von Hochsprachen in if-goto-Code stand oft sowas wie “verändern Sie die Operationen nicht” dabei. Ist ein Übergang von
if(i>10)… zu if(!(i<=10))… eine Veränderung von Operationen? Oder ist nur gemeint, dass sich das Programm so verhalten soll wie zuvor?

12.) Definitionen sind ja immer so eine Sache. Vielleicht könnte jemand seinen Senf zu den folgenden geben:

Alignment: Alignment bezeichnet die Ausrichtung eines Objekts im Speicher. Ein (elementares) Objekt aus s Bytes ist korrekt aligned wenn seine Speicheradresse durch s teilbar ist.

Cache: Kleiner schneller Pufferspeicher zwischen Hauptspeicher und Prozessor zur Überbrückung der Prozessor-Speicherlücke bezüglich der Leistung/Geschwindigkeit.

Pipelining: Zeitüberlappte Ausführung von Befehlen, die sequentiell die einzelnen Stufen des Befehlszyklus auf unterschiedlichen Teilwerken durchlaufen. Die Teilwerke arbeiten streng Taktsynchron aber unabhängig voneinander, sodass sich theoretisch in jeder verschiedenen Stufe des Befehlszyklus gleichzeitig eine Instruktion befinden kann.
(geht das kürzer)

(Memory) Interleaving: Zeitüberlapptes Ansprechen verschiedener Speicherbänke zur Erhöhung des Durchsatzes an Daten. Möglich durch Anordnung aufeinanderfolgender Speicherworte in unterschiedlichen Speicherbänken.

13.) Wie berechnen sich die Bonuspunkte für die Klausur aus den Punkten, die wir in den Hausaufgaben erhalten haben? In der ersten Vorlesung war ja noch von 10 Blättern mit 150 Punkten die Rede, jetzt sind es ja insgesamt 180 geworden.

Soweit zu diesem Wust an Fragen, der beim Lernen aufgekommen ist. Es wäre toll, wenn mir jemand dabei helfen könnte, sonst schaue ich, dass ich am Freitag in die Fragestunde komme.

Danke im Voraus,
Reshief


Cache disable bei Bereichen fuer Memory Mapped IO, also zB Grafikkarte.
Bibliotheken normalerweise kein Write Enable aber aber ausfuerhbar.

Ja.

Es ist idR die phys. Anfangsadresse im Speicher gegeben, ab der freier Speicher vorhanden ist. Ab dieser Adresse seitenweise zuteilen.
Nicht gueltige Eintraege irgendwie kenntlich machen, zB indem einfach eine 0 in den Tabellen eingetragen wird. Oder hinschreiben, dass nicht explizit gesetzte Tabelleneinträge nicht present sind.
PDBR gehoert dazu.

siehe zB http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-system-programming-manual-325384.pdf S. 128ff, S. 174ff
Page Fault. Es macht durchaus fuer das Betriebssystem Sinn, Seiten nicht gleich Write Enable zu setzen, die eigentlich schreibbar sind (Copy on Write nach einem clone()).

Ich stimme der Aussage nicht zu. Paging beschreibt die Art der Verwaltung und erlaubt dadurch die Auslagerung als einzelnes Konzept. Automatisch passiert das ganze auch nur aus Anwendersicht, da immerhin CPU+Betriebssystem beteiligt sind. Ebenso bei Segm.

Segm. steckt ‚tiefer‘ in der CPU, da beispielsweise der Instruktionszeiger bei Intel automatisch relativ zum Beginn des Codesegements adressiert. Paging ist ‚nachgeschalten‘. Deswegen Segmentierung: CPU, Paging: MMU (als nahezu eigenstaendiger Teil der CPU).
Aber in beide Faellen braucht es Hardwareunterstuetzung + die zugehoerigen Verwaltungsstrukturen, um die sich das Betriebssystem kuemmert. Ja.

Nichts ist unmoeglich :wink:
Wichtig ist zu erkennen, dass das Betriebssystem iA keine Ahnung hat, was fuer Befehle ausgefuehrt werden, so lange keine Beschraenkungen verletzt werden. Mit genug krimineller Energie kann man sich klar ne Architektur ausdenken, die dem Betriebssystem immer Bescheid gibt, wenn Speicher adressiert wird. Nur macht das nicht viel Sinn.

Ja.

Ja. Ersetze Index-Menge durch Mengen-Index.

Vorweg: Diese Beispiele sind konstruiert, niemand will eine Pipeline, die bei jeder Gelegenheit angehalten wird.
Wichtig ist v.a. die Aufgabenstellung, in welcher Phase tatsaechlich der Befehlszähler vom jl gesetzt wird. Im darauffolgenden Takt wird dann der richtige Befehl in BH geladen (selbst wenn er schon drin ist weil nicht gesprungen wurde, sonst haetten wir bereits spekulative Ausfuehrung fuer Arme).
Deine skizzierte Pipeline hat eine extra Dekodierstufe, also landet immer der Befehl nach jl in der Pipeline, wird aber nie in BD gelassen sondern im Sprung- und Nicht-Sprung-Fall durch NOP ersetzt.

Gemeint ist damit, dass die Art und Reihenfolge der Auswertung gleich bleiben soll. A & ~B || ~A & B soll also zB nicht A ^ B werden oder aus einer do {} while () soll keine while () {} werden.

Passt soweit schon, nur kleine Anmerkungen:

Alignment: Fuer Korinthenkacker: ganzzahlig ohne Rest teilbar.
Cache: logisch zwischen CPU und RAM. Fuer den Anwender nicht sichtbar (ausser durch die Laufzeit).
Pipelining: Sequentieller Befehlsstrom
Interleaving: Vermeidet Zykluszeit abwarten zu muessen. Genauere Timinggeschichten beim RAM sind was fuer die JEDEC oder Masochisten.

Edit: Mathemat. Runden(Erreichte Bonus/Gesamt Bonus*30)/2


Hallöchen,

Ich hätte auch noch die ein, oder andere Frage :

  1. Bei dem Aufgabentyp “Pagetabelle zeichnen” wird die Adresse, z.b von den Programmdaten aufgeteilt. Wenn ich jetzt die Adresse 0x00400FFF habe und diese splitten will, komme ich auf 0x001(pagedir) 0x000 (Page) 0xFFF ( Offset). Was ich in meiner Übungsmitschrift stehen habe bei pagedir ist 0x1, also ohne die 0-en davor. Was ist jetzt richtig?

  2. Klausur 2015-02-02 (Aufgabe 7) a. Ich hätte hier gesagt, dass es sich im Register-Memory handelt, was man am .data Segment sehen kann. LEN(im .data segment) wird mit dem Register verglichen (z.9)

  3. Wäre toll, wenn wir in der Fragestunde noch einmal das Thema writ-through, bzw. write-back Cache besprechen könnten, speziell wie in Blatt 7 (Aufgabe6) verlangt. Mir ist leider noch nicht ganz klar, wann hier der Cache aktualisiert wird, und wann nicht.


Erst einmal Danke an seth~ :slight_smile:
Das hat mir sehr geholfen.

@Anola: Die erste Frage kann ich dir beantworten: führende Nullen werden üblicherweise bei Zahlen-Repräsentationen ignoriert. Insofern ist hexadezimal 0x001 = 0x1 und wenn man es dezimal schreiben möchte, ist es einfach 1.

1 Like

In GRA duerfen wir keinen Zettel mit Notizen mitnehmen oder?



Nein, leider nicht.

Ist die Antwort 34 korrekt? Es gibt 32 Cache-Blöcke, die werden bei den ersten 32 Zugriffen gefüllt, im 33. fliegt der 1. raus, beim 34. wird wieder auf den 1. zugegriffen → Capacity miss

Najagut, eine Verdrängung findet dann frühestens während des 33. Zugriffs statt.

hups, zitiert statt geändert

1 Like

Danke.

Ich wuerde sagen 34 stimmt.


Ich würde sagen 33 und compulsary miss


Stimmt, es ist nach der frühesten Verdrängung gefragt.


Also 33. Speicherzugriff (nicht im Cache) → Compulsary Miss → Verdrängung vom bspw. am längsten nicht verwendeten Eintrag (LRU).
Falls beim 34. wieder auf diesen zugegriffen werden sollte → Capacity Miss

Übung Blatt 7 Aufgabe 7:

http://www.docdroid.net/NtWKiag
Ist das so korrekt? Bin mir da extrem unsicher.

das stimmt

Klausur WS14 Aufgabe 4.2
Ich hänge im Moment an den Huge-Pages.
Hier soll ja ein Adressbereich von 4MiB → 2^22 Byte verwaltet werden.
Das soll mit 2 stufigem Paging und einer Seitengröße von 2^12 Byte passieren.

Sollen die “Huge-Pages” in ihrer gesamten Länge abgespeichert und adressierbar sein oder auf mehrere Pages aufgeteilt werden?

Um die Position innerhalb einer 4KiB großen Page zu bestimmen benötigt man ja einen Offset von 12 Bit oder habe ich das falsch verstanden?

Wäre super, wenn mir jemand einen Tipp für die Aufgabe geben könnte.
Vielen Dank!


Hi :slight_smile:

Die Huge Pages werden aber nicht zweistufig verwaltet, sondern in der Page Directory steht die physikalische Adresse für die Huge Page, sodass die zweite Stufe umgangen wird. Dabei muss aber noch ein Flag (wie Write-Enabled, …) im Offset gesetzt werden, dass es sich hierbei um eine Huge-Page handelt.
→ Die 32 bit teilen sich dann so auf :
22 bit Offset für die richtige Stelle innerhalb der Huge Page und wie bei den normalen Pages 10 bit Index pro Page, um bei Huge Pages die richtige Adresse innerhalb der Page Directory rauszufinden.
→ 10 bit + 22 bit = 32 bit

Hoffe konnte dir helfen :wink:

MfG Frank

1 Like

erstmal danke für die schnelle Antwort :slight_smile:
ich glaube so verstehe ich es. D.h. wenn ich 10 Bit (wie normal) für die physikalische Adresse im Page Directory zur Verfügung habe, kann ich nur 2^10 Huge Pages adressieren?


Klausur vom 17.09.2014, Aufgabe 3: Speicherverwaltung

Wie habe ich mir die Page-Table der VGA vorzustellen?
Der PDI dazu ist ja 0x1, aber wie skizziere ich dann die entsprechende Tabelle?

Danke schon mal für die Hilfe.


Richtig.
4 MiB = 2^22 Byte
→ 2^22 * 2^10 = 2^32 = 4 GiB
Mehr kannst du auf einem 32 Bit System auch gar nicht mehr adressieren, also ist sind „nur“ 2^10 Huge-Pages doch recht viel^^.

In der Angabe steht ja noch :

Daraus siehst du ja wie viele Pages du brauchst.
Und aus der Adresse „0x00 40 00 00“ sieht man ja, dass die Page-Adressen in der entsprechende Page-Table (die von der PD von der Stelle 0x1 angepointet wird) ab 0x0 beginnen.
Dann ist ja im Prinzip alles wie normalerweise^^

MfG Frank


Alles klar, danke. Eine weitere Frage noch zum Thema Stack (Klausur vom 10.02.2014, Aufgabe 4.3):

Beim [m]ret[/m] wird ja eigentlich nur der [m]%esp[/m] erhöht, die Inhalte auf dem Stack bleiben aber theoretisch ja so lange stehen, bis sie überschrieben werden. Soll man dann “den Aufbau des Stacks vor Ausführung der Instruktion 17: [m]ret[/m]” mit allen Inhalten skizzieren und den [m]%esp[/m] auf [m]0xffffd2cc[/m] zeigen lassen?


Du hast dir die Frage halbwegs selbst beantwortet^^.
Da steht ja, dass man

zeichnen soll, das heißt nach der Ausführung von ret musst du den Stack gar nicht mehr hinmalen, sondern nur bevor ret ausgeführt wird^^.

MfG Frank