/zhaw_seminar_concurrent_c_programming

zhaw_seminar_concurrent_c_programming

Primary LanguageShell

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]