Systemnahe Software II
Die Vorlesung setzt den ersten Teil (Systemnahe Software I) fort und beschäftigt sich mit der Entwicklung fortgeschrittener Anwendungen im systemnahen Umfeld des POSIX-Standards, wozu hier insbesondere das Prozesssystem, die Signale, die Interprozesskommunikation und Sockets gehören. Behandelt wird insbesondere auch die Entwicklung von Protokollen für bidirektionale, verbindungsorientierte Kommunikationskanäle und deren effiziente Implementierung. Beachtet werden dabei auch Sicherheitsaspekte und die Vermeidung typischer Schwachstellen. Die Vorlesung ist sehr praxisorientiert und die Übungen sind integraler Bestandteil der Veranstaltung.
Inhalt
- Prozesse unter UNIX
- Signale
- Interprozesskommunikation mit Pipelines
- Einführung in Netzwerkdienste, TCP/IP und die Socket-Schnittstelle
Termine
Termine:
- Vorlesung: Montag, 14–16 Uhr, Helmholtzstraße 22, Raum E.03
- Übungen: Donnerstag, 16–18 Uhr, Helmholtzstraße 22, Raum E.03
Die ersten Übungen finden am 20. April statt und die erste Vorlesung ist am 24. April.
Da die Vorlesung am Montag, den 5. Juni, ausfällt, wird diese am Donnerstag, den 8. Juni, zum Zeitpunkt der Übungen nachgeholt.
Voraussetzungen
Der erste Teil der Vorlesung, Systemnahe Software I, wird inhaltlich vorausgesetzt. Dazu gehört insbesondere
- der sichere Umgang mit der Programmiersprache C einschließlich der dynamischen Speicherverwaltung, dynamischer Datenstrukturen in C, Grundkenntnisse der POSIX-Schnittstelle im I/O-Bereich (bei Dateien),
- Umgang mit der UNIX-Kommandozeile (relevant, weil zu Beginn der Vorlesung auch die Implementierung einfacher Shells behandelt werden wird) und
- Grundkenntnisse des POSIX-Dateisystems.
Prüfungen
Die Vorlesung ist für die Master-Studiengänge Informatik und Medieninformatik im Modulhandbuch. Ebenso kann die Vorlesung als Wahlpflichtfach bei den Bachelor-Studiengängen Mathematik, Wirtschaftsmathematik, Mathematische Biometrie und Wirtschaftsphysik gewählt werden. Die Prüfung wird schriftlich stattfinden mit zwei offen wählbaren Terminen:
- Donnerstag, den 27. Juli 2017, von 10:00 bis 12:00 Uhr im Raum E.20 in der Helmholtzstraße 18
- Donnerstag, den 12. Oktober 2017, von 14:00 bis 16:00 Uhr im Raum 1.27 in der Helmholtzstraße 20
Für die Vorbereitung auf die schriftliche Prüfung steht eine Probeklausur zur Verfügung, die am 17. Juli in der Vorlesung besprochen wird. Ebenso besteht in den Übungen am 13. und 20. Juli die Gelegenheit, Fragen zur Prüfung und der Probeklausur zu stellen.
Vorlesungen
Zur Vorlesung stehen ein Skript und die in der Vorlesung verwendeten Folien hier zur Verfügung:
- 24. April 2017: Syllabus und Einführung zu Prozessen
- 4. Mai 2017: Wechsel zu anderen Programmen, Arbeitsweise der Shell, tinysh.tar.gz
- 8. Mai 2017: Einführung zu Signalen (1. Teil)
- 15. Mai 2017: Einführung zu Signalen (2. Teil), tinysh2.tar.gz
- 22. Mai 2017: Pipes, Ausmessen der Größe eines Pipe-Buffers
- 29. Mai 2017: Einführung zu Netzwerkdiensten und Berkeley-Sockets
- 8. Juni 2017: Verbindungsaufbau
- 12. Juni 2017: Gepufferte Ein- und Ausgabe für Netzwerkverbindungen, Umsetzung für ein konkretes Protokoll
- 19. Juni 2017: Parallele Sitzungen (Teil 1), Beispiele: mutexd.tar.gz, mutexd-preforked.tar.gz und netperftest.c
- 26. Juni 2017: Parallele Sitzungen (Teil 2), Beispiele: chatd.c, mutexd-multiplexed.tar.gz
- 3. Juli 2017: UDP, UNIX-Domain-Sockets, Versand von Dateideskriptoren, POSIX-Mutexe und POSIX-Bedingungsvariablen über einem gemeinsamen Speicherbereich mehrerer Prozesse
- 10. Juli 2017: Optimierungen bei C
- Alle Folien in einem PDF-Dokument (Stand 10. Juli 2017)
Vorlesungsbegleiter:
Übungen
- Melden Sie sich bitte für die Teilnahme in den Übungen bei SLC an.
- Die Übungen sind zeitintensiv und integraler Teil einer praxisorientierten Vorlesung.
- Für die Übungsblätter, die zugehörigen Materialien und Beispiellösungen gibt es eine separate Webseite.
Kontakt
Dr. Andreas F. Borchert
Helmholtzstr. 20
Raum 1.23
Fabian Berstecher (Übungsleiter)