Vorlesung: Systemnahe Programmierung

Veranstaltung:

Übung:

Weitere Informationen:

  • Studienabschnitt: Bachelor Informatik, Bachelor Cyber Security, Bachelor Lehramt
  • Voraussetzungen:
  • Fachbereich: BA-INF 034/129
  • Aufwand: 2V + 2Ü / 6LP

Ankündigungen und wichtige Termine

Klausur-relevante Termine:

  • Erstes Ferientutorium: Donnerstag 10.02.2022
    im BBB-Raum https://bbb.informatik.uni-bonn.de/b/mat-e1h-jz8
    !!! Uhrzeitänderung (war 13-16h), wegen anderem Ferientutorium/DZI !!!
    ab 16.00h bis ca. 18.00h (solange Interesse besteht)

  • Erste Klausur: Dienstag 15.02.2022 - in Präsenz
    Zeitfenster der Raumreservierung: 11 bis 14 Uhr, Hörsaal 1 und 2
    Klausurdauer 90 Minuten (ggf. mit Einzelfällen Schreibzeitverlängerung)
    Die Ergebnisse der Klausur wurden am 24.2.2022 vormittags in BASIS eingetragen.
    Hier undefinedStatistik und undefinedDiagramme zum Ausfall.

  • Klausureinsicht in die erste Klausur: Mittwoch 09.03.2022
    Voraussichtlich ab 13.00h im Informatik-Gebäude - weitere Informationen folgen auf der Mailingliste.

  • Zweites Ferientutorium: Montag 14.03.2022
    im BBB-Raum https://bbb.informatik.uni-bonn.de/b/mat-e1h-jz8
    ab 13.00h bis ca. 15.00h (solange Interesse besteht)

  • Zweite Klausur: Dienstag 22.03.2022 - in Präsenz
    Zeitfenster der Raumreservierung: 11 bis 14 Uhr, nur in Hörsaal 1
    Klausurdauer 90 Minuten (ggf. mit Einzelfällen Schreibzeitverlängerung)
    Einlass in die Hörsääle/3G-Kontrolle kurz nach 11.00h.
    Die Ergebnisse der Klausur wurden am 31.3.2022 vormittags in BASIS eingetragen.
    Hier undefinedStatistik und Diagramme zum Ausfall.

  • Klausureinsicht in die zweite Klausur: Termin noch nicht bekannt.
    Im Informatik-Gebäude - weitere Informationen folgen auf der Mailingliste.

 

Die erste Vorlesung fand am Dienstag 12.10.2021 um 14 Uhr c.t. in Hörsaal 2 des Hörsaalzentrum in Poppelsdorf statt. Dort wurden alle weiteren Informationen zur Organisation von Vorlesung und Übungen gegeben. Einlass ins Hörsaalgebäude erfolgt nur nach 3G-Überprüfung!

Für Studierende, die nicht vor Ort anwesend sein können, wird es einen Livestream in BigBlueButton geben. Links zu BBB-Aufzeichnungen der Vorlesungen werden zusätzlich regelmäßig nach dem jeweiligen Termin über die Vorlesungs-Mailingliste mitgeteilt. Streaming und Aufzeichnung werden bedarfsorientiert ggf. im Laufe des Semesters eingestellt.

Zusätzlicher Live-Stream in BigBlueButton:

https://bbb.informatik.uni-bonn.de/b/mat-jvg-ah1

 

Für Nachzügler/innen:

Bitte die Informationen aus Vorlesungsfolien 0.1 und 0.2 nachlesen und bis zum Dienstag 19.10.2021 23.59h in TVS zu den Übungsgruppen anmelden. Ein Link zur BBB-Aufzeichnung der ersten Vorlesung vom 12.10. ist in eCampus hinterlegt.

Ein Einstieg ist ab Mittwoch 20.10.2021 nur noch in sehr gut begründeten Fällen möglich. Bitte wenden Sie sich dazu an <tut-sys-prog@REMOVETHISPART.lists.iai.uni-bonn.de>.

 

Zugangsdaten

Die Zugangsdaten zum Material auf dieser Webseite (wie Vorlesungsfolien, Übungszettel, ...) sind im SysProg eCampus Kurs einsehbar: undefinedecampus.uni-bonn.de/goto.php (Direktlink zum Beitritt)

 

Übungsanmeldung

Die Übungsanmeldung wird über das undefinedTutorienvergabesystem (TVS) erfolgen. Die Übungsanmeldung ist geöffnet und endet am Dienstag 19.10.2021 um 23.59h. Im Laufe des Mittwochs (spätestens Donnerstag 21.10.) erhalten alle Teilnehmer/innen von ihrem Tutor weitere Informationen zu den Kleingruppen.

 

Für die Abgabe der Übungen in Gruppen wird das Versionierungssystem git auf einem Server der Informatik genutzt. Für den Zugang ist ein gültiger Informatik-Account nötig. Wenn Sie noch keinen Informatik-Account haben sollten, kümmern Sie sich bitte selbständig und rechtzeitig/umgehend darum! (Weitere Informationen dazu auf den Webseiten der Systemgruppe).

Die Kleingruppen-Übungen finden auch im WS 2021/2022 in den ersten Wochen als Online-Treffen im BBB-System der Informatik statt. Auch für dieses System wird der Informatik-Account genutzt (anonyme Teilnahme in den Kleingruppen ist nicht möglich).

Nach wenigen Wochen Übungsbetrieb ist eine weitgehende Umstellung auch der Kleingruppen-Übungen in Präsenz geplant (Online-Übungen in BBB bleiben aber durchgängig möglich). 

  

(erledigte Ankündigungen und erledigte Termine siehe ganz unten)

 

Krankmeldungen für Prüfungstermine: Beachten Sie bitte hierzu unbedingt die entsprechenden undefinedHinweise des Prüfungsamts Informatik! (-> dort: Ablauf bei Krankmeldungen).  Zusätzlich sind die Organisatoren der Systemnahen Programmierung per E-Mail über die eingereichte Krankmeldung zu informieren.

Bitte beachten Sie für Ihre strategische Planung der Teilnahme an den Prüfungen: Im Modul Systemnahe Programmierung wird es KEINEN dritten Prüfungstermin geben! Die zweite Prüfungsmöglichkeit deckt den Fall einer Krankheit beim ersten Termin ab.

 

 

Mailingliste

Für die Vorlesung Systemnahe Programmierung wurde eine Mailingliste eingerichtet, über die aktuelle Informationen zur Vorlesung und den Übungen verbreitet werden. Die Anmeldung ist unter dieser undefinedAdresse möglich. Es werden nur Anmeldungen von Studenten akzeptiert, die auch für die Übungen angemeldet sind. Die Mails der Mailingliste werden archiviert.

Fragen von allgemeinem Interesse und Diskussionen zwischen den Teilnehmer/innen sollen ebenfalls über die Mailingliste laufen.

Bei gezielten Fragen an das Team der Tutor/innen und Dozenten kann der Mail-Alias tut-sys-prog (at) lists.iai.uni-bonn.de genutzt werden.

 

 

Programmiersprache C

Im Bereich der systemnahen Programmierung wird als Programmiersprache häufig kein objektorientiertes Java oder C++ verwendet, sondern C. Um die Vorlesung erfolgreich absolvieren zu können, ist die Kenntnis von C sehr wichtig. Aus dem Modul BA-INF 016 "Algorithmen und Programmierung" (bzw. vor 2019 aus BA-INF 014 "Algorithmisches Denken und imperative Programmierung" (aka ADiP) sind Konzepte einer imperativen Programmiersprache bzw. programmiersprachliche Grundkonzepte bekannt (im besten Falle wurde C behandelt).

Der Klassiker über die Programmiersprache C ist nach wie vor das Buch von Brian W. Kernighan und Dennis Ritchie: The C Programming Language. Für Teilnehmer/innen mit Vorkenntnissen und Erfahrungen mit Java könnten die folgenden Links hilfreich sein:


Alte Klausuren

Da eine gewisse Diskrepanz zwischen den Übungsaufgaben und den Klausuraufgaben zu erkennen ist, haben wir uns dieses Jahr dafür entschieden, ein paar alte Klausuren zu veröffentlichen, um euch einen Eindruck zu geben was von euch in der Klausur verlangt wird.

Bitte behaltet dabei im Hinterkopf, dass die Vorlesung in den letzten Jahres teilweise anders aufgebaut war und das teilweise andere Schwerpunkte gesetzt waren. Diese hier gezeigten Altklausuren decken offensichtlich nicht alle Themenbereiche ab. Klammert euch nicht nur an diese Altklausuren!

Trotzdem hoffen wir natürlich, dass dieser Einblick für euch hilfreich ist.

Zur KlausurvorbereitungAlte Klausuren

WS2013/14

undefinedDurchgang 1

undefinedDurchgang 2

WS2014/15

undefinedDurchgang 1

undefinedDurchgang 2

Folien und Präsentationen

Von den Studentenrechnern des Instituts aus sind die Dateien frei zugänglich (ebenso per Verbindung über VPN); Zugriffe von anderen Rechnern erfordern ein Paßwort, welches über den eCampus Kurs verfügbar ist (siehe oben). Bitte erfragen Sie diese Zugangsdaten nicht per E-Mail! Nachzügler erfahren bei Bedarf die Zugangsdaten ebenfalls über eCampus.

KapitelPDF-File

0. Allgemeine Informationen

undefined0.1 Allgemeines

 undefined0.2 Übungen

Informationen zur Einführung in C

(wird im WS 2021/22 nicht live in der Vorlesung behandelt)
(0.3 zuletzt von WS 20/21, 0.4 zuletzt von WS 17/18)

undefined0.3 C-Crashkurs

undefined0.4 Rust-Crashkurs

1. Maschinenprogrammierung in Assembler

1.1. Motivation
1.2. Bezug zur Systemnahen Informatik (SS 2021)
1.3. Allgemeines zu 80x86 Assembler-Programmierung
1.4. Calling Conventions (aus C unter Linux)
1.5. Bezug zur 2-Adressmaschine (Systemnahe Informatik, SS 2021)
1.6. Assembler-Programmbeispiele
1.7. Socket-/Netzwerkprogrammierung in Assembler
1.8. Zusammenfassung

undefined1.0 Folien 1-80
1. Ergänzung: Speicherverwaltung malloc & freeundefinedFolien 1-19

2. Prozesse und Threads

2.1 Prozesse

2.2 Threads

2.3 IPC

undefinedTeil 1

undefinedTeil 2

undefinedTeil 3

3. Netzwerkprogrammierung in C

3.1. Motivation

3.2. Netzwerkprogrammierung: Sockets & Co.

3.3. I/O-Multiplexing

3.4. Server-Strukturen
3.5. Zusammenfassung

Teil 1 undefinedFolien 1-69

Teil 2 undefinedFolien 70-117

 Teil 3 undefinedFolien 118-143

(Ggf.) Ergänzung zu Kapitel 1: Fallstudien aus studentischen

Programmierprojekten

 

Übungszettel

Hinweise zum Übungsbetrieb auch hier (undefined0.2 Übungen)

PDF-DateiErgänzendes MaterialWeitere Informationen
undefinedÜbungsblatt 01

undefinedMakefile.pdf

undefinedASAN.pdf

undefinedÜbungsblatt 02

undefinedspringerproblem.c

undefinedspringerproblem-beispielausgabe.txt

undefinedsum.c

undefinedhelloworld-a.S

undefinedÜbungsblatt 03

undefinedmatrixaddition.c

undefinedpalindrom.c

undefinedÜbungsblatt 04

undefinedfibonacci-stub.S

undefinedÜbungsblatt 05 (neu)

undefinedadressierung_1.c (neu)

undefinedadressierung_2.c (neu)

undefinedfork.c

undefinedtest.c

Die Testprogramme der Assembleraufgabe (addressierung_{1,2}.c) enthielten einen Fehler, durch den nicht alle Tests ausgeführt wurden. Dieser Fehler wurde in der neuen Version behoben!
undefinedÜbungsblatt 06
undefinedÜbungsblatt 07

undefinedthreads.c

undefineddotprod.c

undefinedshellcode.txt

undefinedshellcode_with_codepoints.txt

undefinedBonusprojekt Shell

undefinedmystddef.h

undefinedmystdshell.a

undefinedmystdlib.h

undefinedrealloc.a

undefinedrealloc.h

Dieser Bonuszettel ist freiwillig, Punkte, die Sie holen, gelten aber mit für die Zulassung. Die Abgabe ist in der vorletzten Vorlesungswoche fällig. Einige der benötigten Konzepte werden erst im weiteren Verlauf der Vorlesung behandelt.
undefinedÜbungsblatt 08
undefinedBonuszettel

(von Fraunhofer FKIE)

undefinedZIP-Datei Aufgabenstellungen

Freiwillige Bearbeitung (wie bereits im Vorjahr keine Bepunktung)
undefinedÜbungsblatt 09
undefinedÜbungsblatt 10

undefinedobfus

undefinedtestprogramm.c

undefinedstack.S

 

undefinedÜbungsblatt 11

 

undefinedÜbungsblatt 12
undefinedÜbungsblatt 13
undefinedÜbungsblatt 14

 

Zusätzliche Hilfsmittel

Hilfsmittel

SPAsT Images

(SysProgASemblerTool)

undefinedbionic Download (empfohlen für Ubuntu)

undefinedFür Ubuntu 20.10

undefinedDebian-Version

Assembler Code Table

undefinedIntelCodeTable