Fertigkeiten

Diese Seite führt aller Fertigkeiten auf, die Sie im Rahmen der Veranstaltung B-SYSP erwerben sollten. Die Fertigkeiten sind in Fertigkeitskategorien gegliedert, die in inhaltlichem Zusammenhang stehen. Beachten Sie bitte auch das Ende dieser Seite zur Erklärung des Begriffes `Verständnis'.

Diese Seite kann sich im Verlauf der Veranstaltung ändern, da nicht genau vorhersehbar ist, wieviel Material behandelt werden kann. Änderungen werden entsprechend vermerkt.

1. Grundkonzepte der Computerarchitektur

  1. Verständnis: Computerarchitektur (CPU, Eingabegeräte, Ausgabegeräte, Speicher)
  2. Verständnis: BIOS/Firmware
  3. Verständnis: Zentralprozessor/CPU (ALU, FPU, Kontrolleinheit, ...)
  4. Verständnis: Coprozessor

2. Speicherrepräsentierung

  1. Verständnis: Hexadezimalsystem
  2. Verständnis: Zweierkomplemet- und Exzess-N-Code-Darstellung von ganzen Zahlen
  3. Verständnis: Speicherausrichtung
  4. Verständnis: Byte-Reihenfolge / Endianness bei großen Zahlen
  5. Verständnis: Abbildung von Zeichenketten im Speicher
  6. Verständnis: Unicode-Zeichen
  7. Verständnis: Fließkommazahlen gemäß IEEE 754

3. Befehlssatzarchitekturen

  1. Sie können den Zusammenhang zwischen Assemblersprache und Maschinensprache beschreiben
  2. Verständnis: Befehlssatzarchitektur
  3. Verständnis: Spezialisierte Befehlssatzarchitekturen (Fließkomma-Befehlssätze, Vektor-Befehlssätze, Multimedia-Befehlssätze, ...)

4. RISC-Befehlssätze

  1. Verständnis: Prozessorregister
  2. Sie können den Unterschied zwischen Allzweckregistern und zweckgebundenen Registern erklären
  3. Mit einer Liste aller MIPS R2000-Befehle können Sie Algorithmen in MIPS-Code übersetzen und die Bedeutung von MIPS-Code-Sequezen interpretieren:
    1. Integer-Arithmetik
    2. Bitoperationen
    3. Bedingte Ausführungen
    4. Schleifen
    5. Definition von Subroutinen
    6. Aufruf von Subroutinen
    7. Programmcode, der anderen Programmcode modifiziert (unter Verwendung einer Maschinensprachetabelle)
  4. Verständnis: Aufrufkonventionen (insbesondere: Auswirkungen auf Stapelspeicher und Register)
  5. Sie sollten insbesondere die MIPS R2000-Aufrufkonventionen beherrschen und verwenden können

5. Performanz und Laufzeitmessung

  1. Verständnis: Speedup
  2. Verständnis: Prozessor-Taktfrequenz
  3. Verstandnis: Der Zusammenhang zwischen Befehlszyklen, CPI/IPC, Ausführungszeit, und Prozessor-Taktfrequenz
  4. Verständnis: Ahmdals Gesetz
  5. Sie sollten aus der Beschreibung einer Benchmarkfolge abschätzen können, ob die Meßergebnisse für diese Folge Aussagen über ein gegebenes Programm zulassen können
  6. Sie sollten in der Lage sein, aussagekräftige Performanzmessungen durchzuführen
  7. Sie können mindestens sieben verschiedene Gründe für Unterschiede in der Messung eines Programmes angeben, darunter zwei, die den Prozessor betreffen, und zwei, die das Betriebssystem betreffen
  8. Verständnis: Kastendiagramm; insbesondere können Sie ein solches erklären und zwei Kastendiagramme vergleichen
  9. Verständnis: Aufwärmeffekt
  10. Verständnis: Normalisierung von Performanzmessung gegen Baseline, Aufsummierung (Mittelwert)
  11. Verständnis: Performanzzähler

6. Befehlsausführung auf modernen Prozessoren

  1. Verständnis: Die fünf Pipeline-Phasen des MIPS R2000 (aus der Vorlesung)
  2. Verständnis: Pipeline-Blasen und ihre Ursachen aus Daten- und Kontrollflußhazards
  3. Verständnis: Vermeidung von Kontrollfluß-Hazards durch statische Verzweigungsvorhersage
  4. Verständnis: Vermeidung von Kontrollfluß-Hazards durch verzögerte Verzweigung
  5. Verständnis: Vermeidung von Kontrollfluß-Hazards durch dynamische Verzweigungsvorhersage
  6. Verständnis: Superskalare Ausführung

7. Die Speicherhierarchie

  1. Sie wissen, in welche Richtung sich Größe, Geschwindigkeit, und Preis pro Byte ändern, wenn man sich in der Speicherhierarchie auf- oder abwärts bewegt
  2. Sie kennen die üblichen Komponenten der Speicherhierarchie in modernen Rechnersystemen
  3. Sie können das Konzept der temporalen Lokalität erklären und in einem Programm ausnutzen
  4. Sie können das Konzept der räumlichen Lokalität erklären und in einem Programm ausnutzen
  5. Sie verstehen die Begriffe Trefferrate, Fehlzugriffsrate, Zugriffszeit bei Treffer und Fehlzugriffsaufwand, und können sie verwenden, um die durchschnittliche Speicherzugriffszeit zu berechnen.
  6. Sie verstehen das Verhältnis zwischen Laufzeit und durchschnittlicher Speicherzugriffszeit.
  7. Verständnis: Direkt abgebildeter Cache.
  8. Verständnis: Vollassoziativer Cache.
  9. Verständnis: k-fach satzassoziative Caches.
  10. Verständnis: MMU, Seitentabelle, und TLB. Insbesondere verstehen Sie die Quellen der Ineffizienz bei TLB-Fehlzugriffen.
  11. Verständnis: Physikalische und virtuelle Adressen.

8. Speicherstruktur

  1. Verständnis: Der Programmspeicher und seine übliche Verwendung
  2. Verständnis: Der statische Speicher und seine übliche Verwendung
  3. Verständnis: Der Stapelspeicher und seine übliche Verwendung
  4. Verständnis: Der Ablagespeicher und seine übliche Verwendung
  5. Verständnis: Speicherfehler im statischen Speicher, Stapelspeicher, und Ablagespeicher
  6. Verständnis: Programmpause und malloc
  7. Verständnis: Ausführungsrahmen, Rücksprungadresse, und Rahmenzeiger

9. Die Programmiersprache C

  1. Sie können Variablen und Arrays in C deklarieren, initialisieren, lesen, und beschreiben, und Code lesen, der diese Konzepte verwendet
  2. Sie könnnen die unären und binären C-Operatoren verstehen und effektiv einsetzen
  3. Sie können die drei Schleifentypen und die if-Anweisung verstehen und effektiv einsetzen
  4. Sie können Typkonversionen verstehen und effektiv einsetzen
  5. Sie können structs in C deklarieren, initialisieren, lesen, und beschreiben, und Code lesen, der diese Konzepte verwendet
  6. Sie können das typedef-Konstrukt verstehen und effektiv einsetzen
  7. Verständnis: sizeof
  8. Verständnis: Funktionen (Deklaration, Definition, Aufruf)
  9. Verständnis: Deklarationen und Definitionen
  10. Sie können Zeiger deklarieren, initialisieren, lesen, schreiben, und dereferenzieren.
  11. Verständnis: NULL
  12. Verständnis: Zeigerarithmetik
  13. Verständnis: Funktionszeiger
  14. Verständnis: Speicherklassen auto, static, extern
  15. Der Präprozessor
    1. Sie können die #include-Direktive verstehen und effektiv einsetzen
    2. Sie können die #define-Direktive verstehen und effektiv einsetzen
    3. Sie können die #if, #elif, und #endif-Direktiven verstehen und effektiv einsetzen
    4. Sie können defined im Präprozessorkontext einsetzen

10. Lader und Binder

  1. Sie verstehen den Unterschied zwischen Objektdateien und ausführbaren Programmen
  2. Verständnis: .text, .data, .bss-Segmente in Objektdateien
  3. Verständnis: lokale, globale, und externe Symbole
  4. Verständnis: Zweck des Binders
  5. Sie können mit Hilfe einer Symboltabelle, Relozierungstabelle, und einer Beschreibung der Relozierungstypen beschreiben, welche Speicheränderungen der Binder durchführen wird
  6. Verständnis: Nutzen von Programmbibliotheken
  7. Sie können die wesentlichen Unterschiede zwischen statischen und dynamischen Programmbibliotheken beschreiben

11. Der C-Übersetzer

  1. Sie können die Bedeutung der Namensanalyse im Übersetzer erklären
  2. Sie können die Bedeutung der Typanalyse im Übersetzer erklären
  3. Optimierungen:
    1. Verständnis: Inlining
    2. Sie können erkennen und beschreiben, ob und wie ein gegebenes Programmstück durch Schleifenteilung optimiert werden kann
    3. Sie können erkennen und beschreiben, ob und wie ein gegebenes Programmstück durch Schleifenabwicklung optimiert werden kann
    4. Sie können erkennen und beschreiben, ob und wie ein gegebenes Programmstück durch Schleifenfusion optimiert werden kann
    5. Sie können erkennen und beschreiben, ob und wie ein gegebenes Programmstück durch Stapel-Inlining optimiert werden kann
    6. Verständnis: Verhinderung von Optimierungen durch fehlendes Wissen: Unbekannter Wert und Konstantheit unklar

12. Grundlagen der parallelen Ausführung

  1. Verständnis: Flynn-Taxonomie
  2. Verständnis: Vektoroperationen
  3. Verständnis: Nebenläufigkeit
  4. Sie können pthreads-Befehle verwenden, um Threads zu starten und per join auf deren Beendung zu warten, sowie Parameter und Rückgabewerte zu verwerten.
  5. Verständnis: Trivial-parallele Ausführung
  6. Verständnis: Fork-Join-Ausführung

13. Laufzeitsysteme höherer Sprachen

  1. Verständnis: Starke Typisierung
  2. Verständnis: Speicherobjekte (`Objekte' gemäß Foliensatz 0a)
  3. Verständnis: Verpacken/Entpacken von Werten
  4. Verständnis: Closures
  5. Verständnis: Typdeskriptoren
  6. Verständnis: Virtuelle Methodentabellen
  7. Verständnis: Dynamisches Binden von Methoden mit virtuellen Methodentabellen oder Hash-Tabellen
  8. Sie können den Unterschied zwischen automatischer Speicherverwaltung mit Referenzzählern und automatischer Speicherverwaltung mit Mark&Sweep-Algorithmus erklären

Verständnis

Die Fertigkeiten sind teilweise als Verständnis eines bestimmten Konzeptes definiert. Für den Zweck dieser Veranstaltung definiert sich das Verständnis eines Konzeptes wie folgt:

  1. Sie kennen alle notwendigen Bestandteile des Konzeptes und wissen, was deren Bedeutung innerhalb des Konzeptes ist.
  2. Falls das Konzept selbst notwendiger Bestandteil eines größeren Systems ist, kennen Sie ein Beispiel eines solchen Systems.
  3. Sie kennen mehrere Beispiele zu dem Konzept und können diese beschreiben und vergleichen.
  4. Sie können den Nutzen des Konzeptes anhand eines Beispieles erklären.
  5. Gegeben ein Beispiel zu dem Konzept, können Sie erklären, wie sich Änderungen an dem Beispiel auf andere Konzepte aus der gleichen Kompetenzkategorie auswirken.
Die Kompetenzangaben beinhalten teilweise weitere Begriffe in Klammern. Diese Begriffe sind Erläuterungen, Bestandteile, oder Beispiele. Angaben in Klammern sind aber üblicherweise unvollständig.