Concurrent C Programming / Seminar ZHAW / FS 2014 / Nico Schottelius Termine Kick-Off x 2014-03-12-2000, ZL 05.03 x 2014-03-13-1830, ZL 02.05 Angabe git repository x 2014-03-16-2359 CEST Zwischenstand & EBS-Eintrag x 2014-04-12 EBS-Eintrag abgeschlossen x 2014-04-18 Abgabe Arbeit x 2014-06-22-2359 CEST Präsentation Arbeiten 2014-07-01-1830 - 2150 ZL O5.05 2014-07-02-1830 - 2150 ZL O5.05 2014-07-03-1830 - 2150 ZL O4.04 Abgabe Handout (digital) 2014-07-04-2359 CEST Notenabgabe 2014-07-21 - 2014-07-27 Möglicher Projektablauf Implementation Serverprozess (empfohlen) 2014-03-24 Erste Implementation SHM mit mehreren Prozessen 2014-04-07 Implementation erstes Kommando (nur Protokoll) 2014-04-14 Implementation erstes Kommando + Zugriff SHM 2014-04-21 Erstellung Dokumentation Administratives Abgabe Arbeit via git repository auf github.com Zum Zeitpunkt "Abgabe Arbeit" werden alle git repositories geklont, Änderungen danach werden *NICHT* für die Benotung beachtet. Abgabebedingungen - git repo auf github vorhanden - Applikation lauffähig unter Linux - Nach "make" Eingabe existiert - "run": Binary des Servers - Sollte nicht abstürzen / SEGV auftreten - "test": Executable zum Testen des Servers - "doc.pdf": Dokumentation - Einleitung - Anleitung zur Nutzung - Weg, Probleme, Lösungen - Fazit - Keine Prosa - sondern guter technischer Bericht - Deutsch oder English möglich Vortrag - 10-15 Minuten + 5 Minuten Fragen - Richtzeiten: - Einleitung (2-3)m - Weg, Probleme, Lösungen (4-10)m - Implementation zeigen (2-5)m - Fragen (2-5)m - Vortrag ist nicht (nur) für den Dozenten Lernziele Die Besucher des Seminars verstehen was Concurrency bedeutet und welche Probleme und Lösungesansätze es gibt. Sie sind in der Lage Programme in der Programmiersprache C zu schreiben, die auf gemeinsame Ressourcen gleichzeitig zugreifen. Das Seminar setzt Kenntniss der Programmiersprache C voraus. Lerninhalte Selbstständige Definition des Funktionsumfangs des Programmes unter Berücksichtigung der verfügbaren Ressourcen im Seminar. Konzeption und Entwicklung eines Programms, das gleichzeitig auf einen Speicherbereich zugreift. Die Implementation erfolgt mithilfe von Threads oder Forks und Shared Memory (SHM). Projekte 0) alle - kein globaler Lock (!) - Kommunikation via TCP/IP (empfohlen) - Wahlweise auch Unix Domain Socket - fork + shm (empfohlen) - oder pthreads - für jede Verbindung einen prozess/thread - Hauptthread/prozess kann bind/listen/accept machen - Fokus liegt auf dem Serverteil - Client ist hauptsächlich zum Testen da - Server wird durch Skript vom Dozent getestet - Wenn die Eingabe valid ist, bekommt der Client ein OK - Locking, gleichzeitiger Zugriff im Server lösen - Client muss *nie* retry machen - Protokolldefinitionen in protokoll/ - Alle Indeces beginnen bei 0 - Debug-Ausgaben von Client/Server auf stderr a) Fileserver - Dateien sind nur im Speicher vorhanden - Das echte Dateisystem darf NICHT benutzt werden - Mehrere gleichzeitige Clients - Lock auf Dateiebene b) Multi-User-Editor - 1 Dokument - Teilbereiche bearbeiten / anzeigen - Mehrere gleichzeitige Nutzer - Lock auf Zeilenebene c) Eigenes Projekt - In Absprache mit dem Dozenten Seminar Einarbeiten in das Seminarthema, umsetzen der Aufgabenstellung, erstellen eines Seminarberichts und einer Präsentation. Leistungsnachweis Mündliche Präsentation der Seminararbeit Schriftliche Seminararbeit Tipps gcc -Wall -Wpedantic -Wextra Bibliographie Advanced Programming in the UNIX Environment (3rd Edition) W. Richard Stevens (Author), Stephen A. Rago (Author) [sehr empfohlen] Expert C Programming: Deep C Secrets Peter van der Linden [empfohlen für interessierte] The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition http://pubs.opengroup.org/onlinepubs/9699919799/ [für portables entwickeln]