Klausur Februar 2011

Aufgabe 4 - Vergleich von Rechnern

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.

Klausur Februar 2011

int array[10];
...
read_values_from_disk(array);
sum = calculate_sum(array);
...

Zur Auswahl stehen 6 Rechner:
Rechner A: ohne DMA, ohne Cache
Rechner B: mit DMA, ohne Cache
Rechner C: ohne DMA, mit großem Cache (Write-Through)
Rechner D: mit DMA, mit großem Cache (Write-Through)
Rechner E: ohne DMA, mit großem Cache (Write-Back)
Rechner F: mit DMA, mit großem Cache (Write-Back)
Abgesehen von diesen Unterschieden sind die Rechner ansonsten gleich.

Welcher dieser 6 Rechner wird das Programm am schnellsten abgearbeitet
haben (keine nebenläufigen Prozesse)? Begründen Sie Ihre Antwort!
(3 Punkte)

Ich habe damals in der Klausur Rechner F geschrieben - Der Korrektor hat diese Antwort aber durchgestrichen und, E daneben geschrieben.
Warum sollte ein Rechner ohne DMA schneller sein?


Weil man sich dann einen Weg spart


Kannst du das erklären?


Na zeichne dir mal alle Bustransaktionen für Rechner E und alle für Rechner F auf, dann sollte es ersichtlich sein


Da die CPU eh nichts zu tun hat, kann sie auch gleich den Datentransfer übernehmen, anstatt erst die DMA arbeiten zu lassen, welche die Daten nur in den Arbeitsspeicher kopiert. Vom Arbeitsspeicher müssen die Daten dann von der CPU in den Cachte geladen werden.

Ist das eine gescheite Erklärung auf meine Frage?


Na das klingt doch ganz vernünftig :slight_smile:


hallo, ich hab gerade mal die gesamte klausur bearbeitet, und das hier wären meine lösungen bzw. nicht-lösungen…:frowning: könnte jemand mal drüberschaun und die fragen klären? danke!

aufgabe 1:
a) register-register, weil beide operanden erst in register geladen werden müssen, bevor man sie verwenden kann
b) load a
add b
store tmp0
load a
sub b
mul tmp0
store c
das ist ein bisschen komisch, weil ich so nur eine tmp-variable brauche, das macht mich skeptisch…^^
c) formel aus der vorlesung, erklärung: ohne pipelining muss für jede operation (n*) für jede stufe (N*) die zeit tau aufgewendet werden. wenn n gegen unendlich geht, ergibt sich für den speedup der limes N
d) keine datenhazards (stall, verzögerung) oder steuerungshazards (neuberechnung, verzögerung), pipeline schon voll gefüllt
e) bei der abarbeitung von sprungbefehlen kann es sein, dass schon ein befehl geholt/operanden geholt wurden, die die falschen sind, weil erst in der ausführungsphase klar wird, dass gesprungen wird. (4 punkte???)

aufgabe 2:
müssen wir die können? ich hatte das so verstanden, dass aus der vorlesung assembler nur die goto-umwandlungen wichtig sind…

aufgabe 3:
A wird mit 1 vorgeladen. danach addiert man immer B (was am anfang 0 ist) mit A zusammen. dann kann das ergebnis nach D geschrieben werden. im nächsten schritt schreibt man es gleichzeitig nach B und E. alles was in E ist wird in die ausgabe geleitet. das ganze wird 8 mal wiederholt.
das register D könnte entfernt werden, man würde weniger instruktionen brauchen.

aufgabe 4:
a) dma = cpu beauftragt einen dma-controller einmalig, die gewünschten daten in den hauptspeicher zu schreiben und zu signalisieren, sobald er damit fertig ist.
b) write through: jede änderung im cache wird sofort auch im spiecher durchgeführt. write back: erst bei verdrängung werden Blöcke mit gesetztem dirty bit zurückgeschrieben.
c) versteh ich nciht…
d) E, siehe rest vom thread

aufgabe 5:
a) zu hohe kosten für einen riesigen schnellen speicher, also kompromiss zwischen kapazität und schnelligkeit.
b) interleaving = ablage benachbarter speicherwörter auf verschiedenen speicherbänken. dies wird gemacht, da die zykluszeit den prozessor dann nciht mehr so stark ausbremst, weil der zugriff auf verschiedene speicherbänke sich überlappen darf.
c) 3.- und 4.-hinterstes bit → bank 2
d) hilfe?
e) räumliche lokalität: z.b. arrays werden in einem block abgelegt, also daten
zeitliche l.: z.b. schleifen werden in in einem block abgelegt, also instruktionen
f) eins der beiden arrays ist bei linearer speicherung so abgespeichert, dass die zeile/spalte in verschiedenne blöcken liegt… stimmt das so?

aufgabe 6:
a) länge mit offset vergleichen, falls offset größer → segmentation fault, sonst aus segmenttabelle mit segmentnummer anfangsadresse auslesen, offset addieren… fertige physikalische adresse
b) segmenttabelle
c) nur eine begrenzte anzahl an einträgen in einer table abspeicherbar
d) die seiten 0x01000, 0xE0120, 0x15014 mit den jeweiligen tags, die sich aus den ersten 5 byte ergeben
e) sollte das nciht eigentlich die frage nach dem page fault sein? tatsächlich steht aber die seite sogar im tlb… komisch…

aufgabe7:
a) multithreading kann nur mehrere fäden erschaffen und umschalten, multicore hat tatsächlcih vervielfachte hardware.
b) ???
c) gemeinsam: hintergrund, hauptspeicher, 3rd level, getrennt: 2nd und 1st level
alle gemeinsam: z.b. auslagerung von seiten aus dem sehr kleienn l1-cache von anderen kernen. alle getrennt: zu viel speicherplatzbedarf.
d) ???


Das meiste hab ich auch so.

1b) hab ich auch so.

1e) Pipeline muss (bei falscher Sprungvorhersage) auch noch geleert werden.

  1. Das Assembler nicht, aber die Aktualisierungsstrategie für den Cache schon. Write-Back ist hier besser geeignet.

3b) C könntest du auch noch entfernen.

5d) Virtuelle Adresse muss durch MMU in physikalische Adresse übersetzt werden, dann c) nochmal (je nachdem was rauskommt).

6a) Du musst die Länge und Adresse zuerst aus der Segmenttabelle auslesen und dann vergleichen (Segmente haben unterschiedliche Längen).

6c) Um Speicher zu sparen, weil die Page-Tables immer größer werden.

6e) Trap weil die Seite read-only ist.

7b) Gute Frage. 4-Core-CPU echt parallel, also für parallele Aufgaben wichtig, vor allem wenn die Programme unabhängig sind. 4-fach-Threading nicht echt parallel, aber einfacher/billiger, weniger Stromverbrauch, reicht wenn nicht immer alle 4 Kerne ausgelastet werden (z.B. wegen IO). Vierfache Frequenz, bei nicht parallelisierbaren Aufgaben, braucht viel mehr Leistung. Aber ich weiß nicht ob das so als Antwort passt.

7c) Es gibt auch Kohärenzprobleme wenn mehr getrennt wäre.

7d) Vorteile 4 MMUs: Paralleler Zugriff damit schneller; Nachteil: mehr Platzverbrauch, komplizierterer Aufbau, ggf. Kohärenzprobleme. Aber da bin ich mir nicht sicher.


Hallo,
ich komm leider bei der 6d) nicht weiter…
Wie kann ich aus der virtuellen Adresse lesen, zu welchem Eintrag die in der Seitentabelle passt?

Danke schonmal für Antworten.

Gruß


Du hast ja 4KByte große Pages, d.h. die letzten drei Hexziffern fallen weg, da es der Offset ist

So, dann schaust dir deine virtuelle Adressen an (z.B. 0x003FF888), die letzten drei Ziffern fallen weg und dann bleiben ja nur noch 20 Bit für die Page Directory und Page Table, also jeweils 10 Bit

Dann hast da stehen: 0x003FF => 0000 0000 0011 1111 1111, naja und dann gehst in der Page Directory in die Zeile 0. Da steht 0xFE000 und das ist ja dein Verweis auf die Page Table und in dieser Page Table gehst dann in die Zeile 0x3FF und da steht dann deine physikalische Adresse


Vielen Dank! Schöne einfache (bunte :wink: ) Erklärung!
Hätte da noch eine Zusatzfrage:
Woher weiß ich, dass es immer genau 10 Bit für die Seitentabellen sind?
(Dass die letzten drei wegfallen kommt wahrscheinlich von den 1024 Einträgen => 0x400 => 3 Byte reserviert und dann bleiben 20 Bit übrig)
Kommt das von der zweistufigen Hierarchie?
Wenn ja, wie wäre es bei einer dreistufigen Hierarchie?

Gruß


Es müssen nicht immer 10 Bit sein, aber in der Aufgabe heißt es, dass wir zweistufige Adresstabellen gegeben haben

Nachdem wir den Offset also die 12 Bit von den 32 Bit abgezogen haben, haben wir nur noch 20 Bit, die teilt man dann durch die zwei Stufen und dann hat man hier 10 Bit für PD und 10 Bit für PT

Dass die letzten drei Ziffern wegfallen, kommt davon, dass die Page 4KByte groß ist, das ist als Zweierpotenz 2^12, also 12 Bit


1024 Einträge = 2^10 = 10 Bit pro Tabelle
32Bit-12Bit(Offset) = 20 Bit.
1-stufige Heirearchie: 20 Bit pro Tabelle, aber nicht Speichereffektiv, deswegen 2-stufige H.
also 10 Bit pro Tabelle (PD + PT)