====== 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]]