====== Aufgabe 1: Umformung ======
1)
int n = length
int n1 = n-1;
int i = 0
Lin1: goto Lcond2
Lin2:
int nextadr = i+1;
int tmp1 = A[i]
int tmp2 = A[nextadr]
if(tmp1 <= temp2) goto skip
A[i] = tmp2
A[nextadr] = tmp1
skip:
i++;
n1 = n - 1;
LCond2: if(i < n1) goto Lin2
n--;
Lcon1: if(n>1 ) goto Lin1
====== Aufgabe 2: Mikroprogrammierung ======
1)
Control Address Register:
Enthält die Address, die von der Sequencing Logic ermittelt wurde. Das Register liefert die Adresseingänge für die Control Memory.
Decoder 1:
Dekodiert die Addresse vom Instructions-Register
ALU-Flags:
Signal der Alu die benötigt wird um die nächste Zieladresse zu bestimmen in der Sequencing Logic
2)
Form von Mikroprgrammierung?
Hier wird horizontale Mikroprogrammierung verwendet.
Woran kann man das sehen?
Aus dem Control Buffer Register laufen die “Control Signals within CPU” ohne vorher durch einen Decoder dekudiert zu werden.
3)
Pseudocode:
int a = #num
int b = eingabe
int c = 0
c = a-b
while (c >= 0){
a=c
c= a-b
}
4)
was dann als micocode:
D <- eingabe
B <- D
C<-A-B
goto Lcon
Loop:
A<-C
C<-A-B
Lcon: c>=0 Goto Loop:
====== Aufgabe 3: Paging ======
1)
Daten: P,WE 0x3
Speicher: P,WE,CD 0xB
Code: P,X 0x5
BS-Code: P,X 0x5
2)
Nur Lösung:
Daten: 1
VGA: 1
Code: 1
OS: 64
Gesamt: 68 Seiten
3)
Nur Lösung:
Daten: 16
VGA: zählt nicht zu nutzdaten
Code: 1
OS: 65536
Gesamt: 65553 Seiten
4)
Tabelle TLB
5)
Es müssen die Pages des neuen Prozesses geladen werden da jeder prozess seine eigenen tabels hat
TLB muss geleer werden
====== Aufgabe 4: Assembler ======
1)
Stack / Register / Speicher
Vorteil Stack: Rekursion möglich
Nachteil Stack: Langsam
Vorteil Register: Schnell
Nachteil Register: Anzahl stark begrenzt / Keine Rekursion möglich
Vorteil Speicher: Anzahl nur durch Kapazität des Speichers begrenzt
Nachteil Speicher: Langsam / Keine Rekursion möglich
2)
Push:
sub $4, %esp
mov value, (%esp)
Pop:
mov (%esp), address
add $4, %esp
3)
Stack malen:
====== Aufgabe 5: Parallelverarbeitung ======
1)
Unter Pipelineing versteht man die Abarbeitung von unabhängigen Microinstruktionen nach einer Art “Fließband”.( Es werden mehere Befehle gleichzeitig abgearbeitet)
2)
Max Speed-Up wäre somit 5
Allerdings wird dieser Speed-Up nicht erreicht, da ein Programm aus Sprüngen ( Steuer-Hazard / Steuerfluss-Konfikte) und Variablen Abhängigkeiten besteht ( Daten-Hazard)
3)
Pipeline Tabelle Malen:
====== Aufgabe 6: Cache ======
1)
räumliche Lokalität:
Räumliche Lokalität bedeutet, dass bei einem Zugriff auf eine best. Hauptspeicheraddresse der nächste folgende Zugriff auf eine benachtbarte Hauptaddresse erfolgt (z.B. bei einem Array)
zeitliche Lokalität:
Zeitliche Lokalität bedeutet, dass nach einem Zugriff auf eine Hauptspeicheraddresse mit großer Wahrscheinlichkeit bald wieder dort zugegriffen wird. (z.B. for-Schleife)
2)
geg.:
Cache-Nutzdatengröße = 256 KiB = 2^10 * 2^8 = 2^18
Blockgröße = 64 Bytes = 2⁶ Bytes
8-Fach = 2^3
Rechnung
2^18(nutzdaten) / 2^6(blockgröse) = 2^12 Blöcke
2^12(blöcke) / 2^3(assoz) = 2^9 Mengen
3)
2^4 Mengen
Man bräuchte mehr nun Adressvergleicher um die Einträge im Cache zu addressieren.
Außerdem würde die Größe vom Index steigen → Tag wird kleiner
====== Aufgabe 7: Arbeitsspeicher ======
TODO
====== Zum Forum ======
Wenn ihr fragen oder Fehler findet
[[https://fsi.informatik.uni-erlangen.de/forum/thread/12286-Loesung-WS-2013|Hier gehts zum Forum]]