Klausur 13.04.2012

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 13.04.2012
Hallo zusammen,
die Klausur vom 13.04. diesen Jahres kommt mir bisher recht merkwürdig/schwierig vor.

Los gehts bei der Aufgabe 1.2, wo meine Lösung ein ziemliches Gefuddel wird und mehr als die vogegebenen 15 Zeilen braucht. Darf man denn davon ausgehen, dass die Eingabe die ganze Zeit anliegt oder nur am Anfang?
Ansonsten sind mir noch prinzipielle Zweifel zur Funktionsweise von Registern gekommen: Behält ein Register seinen Wert, nachdem er einmal ausgelesen wurde? (Doofe Frage, aber ich bin mir da grade echt unsicher…) Und damit zusammenhängend: Darf man den Wert eines Registers als Grundlage für mehrere andere Aktionen nach einer Verzweigung nehmen? Also bspw. D gleichzeitig in E und A oder B laden?

Bei der 2.1 hab ich auch meine Schwierigkeiten; jedenfalls kann ich den Code nicht innerhalb von 2 Minuten ausreichend nachvollziehen, um einen Alogorithmus daraus zu erkennen. Ist das da wirklich gefordert oder wie soll man ansonsten beschreiben, was das Programm tut?


Exakt das wollte ich auch bereits fragen, anders würde es bei mir gar nicht gehen :wink:


ich hab keine 15 zeilen gebraucht :slight_smile: ich glaube die aufgabe war auch eine übung dieses semester incl. musterlösung online.

ich könnte da auch nicht so schnell ein algorithmus erkennen, ich würde schreiben das es eine schleife ist… wär aber fast wieder etwas zu banal


Denke schon, dass ein Register seinen Wert behält. Zumindest hab ich bis jetzt noch nichts anderes gehört. Hab 12 Zeilen gebracht, wenn meins stimmt.

Der Code schreibt die ersten 4 (?) Fibonaccizahlen in den Speicher und fängt an der Position an. Das „Fib“ in der ersten Zeile hilft da :wink:


Richtig, das hab ich inzwischen auch gemerkt :). Um genau zu sein handelt es sich um Aufgabe 1c) auf Blatt 1.
Da sieht man auch ganz klar, dass die Register ihre Werte behalten.

Den Anhaltspunkt hab ich schon beachtet, aber ohne tiefergehende Betrachtung seh ich nicht wie der Code funktioniert. Verglichen damit ist z.B. das Assembler-Beispiel aus SoSe 2011 ein Witz.

Aufgabe 1
Ist bei der Grafik nicht ein Widerspruch drin:
Bei Steuerleitung 17 steht “Springe falls C >= 0” neben dem MUX unten steht allerdings “if (S==1) then O=A [Sprung] else O=B”
S ist hier ja das Vorzeichen von C also wird nach der zweiten Aussage gesprungen wenn C<0 ist oder seh ich da was falsch?


Ja. Hat sich wohl eine alte Version verlaufen. Sollte gleich korrigiert sein. Danke.


Meine Lösungsvorschläge für Aufgabe 3.1 - 3.3:

Stimmt das so alles? Bin da noch recht unsicher, vor allem bei der 3.3…


ich hab das genauso gelöst


ok danke.

Bei der 3.4 bin ich auch nur am raten
zb.:
mov eax, 0 braucht 100 ns um den Befehl zu laden, 1 ns um ihn zu verarbeiten und 100 ns um auf eax zuzugreifen?


Hallo Leute,

wir haben zur Aufgabe 1.2 folgenden Pseudocode, hat jemand etwas kürzeres ?

#0 Wähle Eingabe -> Lade D
#1 Wähle D -> Lade A
#2 Wähle Eingabe -> Lade D
#3 Wähle D -> Lade B, Lade E
#4 B-A -> Lade C
#5 Sprung falls C >= 0 zu #10
#6 Wähle A -> Lade C
#7 Wähle B -> Lade D
#8 Wähle C -> Lade B
#9 Wähle D -> Lade A
#10 Wähle B -> Wähle Addierer -> Lade D
#11 Wähle D -> Lade E
#12 Wähle Ausgabe
#13 Wähle A -> Wähle Addierer -> Lade D
#14 Wähle D -> Lade E
#15 Wähle Ausgabe

Danke !


warum lädst du E in Zeile 3?

Zeile 1 und 2 kannst zusammenfassen:
D → A, Eingabe → D

6-9 geht auch eine Zeile kürzer:
A → C
B → C, C-> B
C → A

10-15 zusammengefasst:
B → D
A → D, D → E
D → E, E → Ausgabe
E → Ausgabe


Ich dachte wenn man etwas lädt, muss man einen Takt warten um es dann weiterleiten zu können ?


Um das geladene weiterleiten zu können muss man warten. Aber man kann etwas zb nach D laden und gleichzeitig das, was bisher in D steht weiterleiten. Ich hab dir mal die letzten Zeilen deutlicher kommentiert:

B -> D                   Eingabe 2 nach D
A -> D, D -> E           Eingabe 1 nach D, Eingabe 2 nach E
D -> E, E -> Ausgabe     Eingabe 1 nach E, Eingabe 2 ausgeben
E -> Ausgabe             Eingabe 1 ausgeben

Ich verstehe, danke für die Erklärung ! :slight_smile:


Bei der Aufgabe 4.2:

Es sollen Daten von einem I/O-Gerät gelesen und in den Speicher geladen werden.
Wie läuft bei den oben genannten Möglichkeiten die Kommunikation zwischen den beteiligten Komponenten jeweils im Detail ab? (4,5 Punkte)

Wie ausführlich wird die Antwort da erwartet?

Ich würde sowas schreiben:

PIO:
von Prozessor erledigt, fragt Status der Peripherie in regelmäßigen Abständen ab

Interrupt-driven IO:
Prozessor bekommt Interrupt und erledigt darauf die Ein- /Ausgabe

DMA:
Prozessor sendet Befehl an DMA-Controller, der setzt die Ein-/Ausgabe dann um

Aber reicht das? In den Folien stehen in Kapitel 2 130ff
einige Bilder wo der Ablauf ziemlich ausführlich steht, aber muss man sowas runterbeten können? (va für 4,5 Punkte)


Die Antwort sollte in etwa folgende Punkte umfassen:

PIO:
CPU liest I/O-Status, falls bereit Daten in CPU lesen und nach RAM schreiben.

Interrupt Driven:
CPU beauftragt I/O-Geraet mit Benachrichtigung, sobald Daten verfuegbar sind (z.B. beim Systemstart). CPU kann sich anderweitig beschaeftigen. Interrupt wenn Daten vorhanden. Danach normaler Lesezyklus und schreiben in RAM.

DMA:
CPU muss DMA Controller mit Adressen und Laenge konfigurieren. Interrupt wenn fertig. Daten werden direkt ohne CPU-Beteiligung von I/O in RAM geschrieben.


  1. Wie tief muss die Seitentabellenhierarchie auf einem 64-Bit System mit
    48 Bit breiten physikalischen Adressen sein, wenn die Page-Größe von 4 KiB
    beibehalten wird?
    Geben Sie die genaue Aufteilung der virtuellen Adresse an. (2 Punkte)
    Hinweis: Ein Eintrag in den Verwaltungstabellen ist jeweils 64 Bit breit

Mir ist nicht so ganz klar wie man bei der Aufgabe rangehen soll?
Hat vll jmd nen Tipp oder einen Ansatz für mich? danke


naja, diese Aufgabe soll bestimmt mehr als 2P bewertet werden.

Offset ist trivial. 4 KiB ist 12 Bit
Anzahl von Einträgen: 4 KiB = 4096:8 (64-Bit System) = 512 E. pro Tabelle
Also 9 Bit pro Tabelle.
48 Bit - 12 Bit (Offset) = 36 Bit
36:9 = 4 → 4-stufige Tabellenhierarchie.