Lecture: Systemnahe Programmierung

Course:

Exercises:

Other:

  • Term: Bachelor Computer Science, Bachelor Cyber Security, Bachelor Lehramt
  • Requirements:
  • Faculty: BA-INF 034/129
  • Effort: 2L + 2E / 6CP

Ankündigungen - wichtige Termine

 

 

Besonderheiten im WS 2020/2021:

 

Die Vorlesungen der Systemnahen Programmierung finden online statt. Überwiegend finden zum Vorlesungstermin Dienstags 14-16h (Beginn c.t., also um 14.15h) in BBB-Konferenz die Vorlesungen statt. Eine Aufzeichnung der Vorlesung wird zusätzlich nachträglich verfügbar gemacht. An einzelnen Terminen kann es auch zur Bereitstellung eines voraufgezeichneten Vorlesungsvideos kommen.

 

Die erste Online-Vorlesung war am Dienstag 3.11.2020 ab 14.15h.

Vorlesungsraum in BigBlueButton:

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

 

Fallback: Zoom

Sollte es Probleme bei der Nutzung von BigBlueButton geben, weichen wir auf Zoom aus. Die dafür benötigen Zugangsdaten lauten:

undefinedZoom beitreten

Meeting-ID: 969 8875 7931
Kenncode: 540295

In der ersten Vorlesung wurden alle weiteren Informationen zur Organisation von Vorlesung und Übungen gegeben (Hinweise zum Übungsbetrieb undefinedSIEHE HIER). Vorlesungsfolien werden in der Tabelle unten bereitgestellt.

Eine Liste von Links zu den Vorlesungsaufzeichnungen wird jeweils (nach einer gewissen technisch bedingten Verzögerung) über die Mailingliste bekannt gegeben.

 

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.

Details zur Anmeldung und Deadline finden sich in den Hinweisen zum Übungsbetrieb. Die Anmeldung in TVS ist geöffnet und ist bis einschl. Dienstag 10.11.2020 (Tag der zweiten Vorlesung) möglich, bis 23.59h.

 

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 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).

 

 

(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

undefined0.3 C-Crashkurs

undefined0.4 Rust-Crashkurs

1. Maschinenprogrammierung in Assembler

1.1. Motivation
1.2. Bezug zur Systemnahen Informatik (SS 2020)
1.3. Allgemeines zu 80x86 Assembler-Programmierung
1.4. Calling Conventions (aus C unter Linux)
1.5. Bezug zur 2-Adressmaschine (Systemnahe Informatik, SS 2020)
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

undefinedKapitel2-Teil 1

undefinedKapitel2-Teil 2

undefinedKapitel2-Teil 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

undefinedKapitel3-Teil 1

undefinedKapitel3-Teil 2

undefinedKapitel3-Teil 3

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

 

Zusätzliche Hilfsmittel

Hilfsmittel

SPAsT Images

(SysProgASemblerTool)

undefinedbionic Download (empfohlen für Ubuntu)

undefinedFür Ubuntu 20.10

undefinedDebian-Version

Assembler Code Table

undefinedIntelCodeTable