Arbeiten in einem Projektteam Arbeiten in einem Projektteam

Werbung
Arbeiten in einem Projektteam
† Warum Teamarbeit ?
„ Im Team kann man in weniger Zeit mehr
erreichen
„ Das Team erhöht die Kreativität
„ Voneinander lernen
„ Erhöhung der Qualität
† Unterschiedliche Lösungsalternativen
† Bessere Erkennbarkeit von Fehlerquellen
Arbeiten in einem Projektteam
† Arbeitsteilung
„ Festlegung wer für welche Teile ( Module )
zuständig ist
„ Definition von Schnittstellen
† Datenstrukturen+Zugriffsfunktionen in einem
Modul
† Funktionsbibliotheken
„ Selbständige Implementierung und Test der
Module
† Testumgebung festlegen
„ Festhalten an einem Zeitplan, wann welche Teile
fertig sind, wann Integration stattfinden soll
1
Arbeiten in einem Projektteam
† Kommunikation
„ Austausch von Kontaktadresse
„ Festlegung von gemeinsamen
Besprechungen
„ Erstellen und Verteilen von
Besprechungsprotokollen
„ Moderation durch einen Teamleader
Arbeiten in einem Projektteam
† Soziale Komponente
„ Zuverlässigkeit
† Sich an Zusagen halten
† Termine wahrnehmen
† Im Verhinderungsfall rechtzeitig bei allen
abmelden
„ Konfliktbewältigung
† Probleme sofort und offen besprechen
† Kompromisse eingehen
† Toleranz zeigen
† Bei Problemen sich gegenseitig helfen
2
Teamarbeit
†
Onlinekurs zu Teamarbeit
http://www.teachsam.de/arb/team/team_3.htm
Einführung in Linux
Systemprogrammierung
Prozesse
† Prozesse stehen immer in Vater/Sohn-Beziehung d.h.
jeder Prozess hat einen parent
† root Prozess init ist parent aller Prozesse
† Prozesse erben ihre Zugriffsrechte vom aufrufenden
Benutzer
† Kindprozesse können in den Zustand zombie
gelangen
3
Einführung in Linux
Systemprogrammierung
Unix Werkzeuge
† Unix Tools haben eine Hilfe die mit -h –help
aufgerufen wird
† Ausführliche Beschreibung unter man <toolname>
† Unix Tools sind zur Zusammenarbeit konzipiert
worden
„Über Pipes können Werkzeuge Daten austauschen
Einführung in Linux
Systemprogrammierung
Shell
†Kommandointerpreter zur Kommunikation mit dem
System
†bietet einen sehr mächtigen Scriptinterpreter
†hält Umgebungsvariablen wie $PATH
†äußerst mächtig
4
Einführung in Linux
Systemprogrammierung
Shell
Command --help
Liefert zu den meisten
Befehlen weitere Hilfe.
zeigt eine Liste der laufenden
Prozesse an
Listet alle benutzen ipcRessourcen auf
Entfernt manuell ipcResourcen
ps –help
kill
Terminiert Prozesse
kill 1234
man <hilfethema>
Liefert die Beschreibung zu
einem Kommando einer
Funktion oder Befehl
man getpid
ps
ipcs
ipcrm
ps –al
ipcrm shm
12345
.
Einführung in Linux
Systemprogrammierung
Programmierwerkzeuge
† Texteditoren
„vi
„Emacs
„vim
† C-Compiler gcc
† Modulverwaltung make
† Versionsverwaltung subversion
5
Einführung in Linux
Systemprogrammierung
Systemfunktionen
† Prozesse
„ pid_t getpid()
„ pid_t getppid()
„ fork()
Liefert pid des Prozesses vom Typ pid_t
Liefert pid des parent Prozesses
Erzeugt identische Kopie vom Aufrufer
Liefert pid des child im Vater. Ist im child immer 0
„ execl( &filename, &arg)
Startet ein neues Programm aus einer exeDatei. Liefert: -1 bei Fehler
„ exit(staus)
Freiwilliges Ende des Prozesses
„ wait()
wartet auf des Ende eines Sohnes und holt den
returnwert ab.
„ waitpid()
Abholen eines returnwertes ohne auf das Ende des
Sohnes warten zu müssen
Einführung in Linux
Systemprogrammierung
Systemfunktionen
† Signale
„ asynchron
„Wird ein Signal an einen Prozess gesendet, so wird sofort
ein Signalhandler angestossen, der alle notwendigen
Aktionen ausführt i.a. Terminierung
„ eigenen Signalhandler einrichten
†signal( signal, functionpointer)
„Richtet einen Signalhandler ein
„die übergebene Funktion wird aufgerufen wenn das Signal vom ankommt
„ Signal senden
†kill( PID, signal )
„Auf ein Signal warten
†pause(signal)
6
Einführung in Linux
Systemprogrammierung
† IPC Systemobjekte
„ Systemobjekte werden über einen key
angesprochen
„ Einen eindeutigen key man mit der
Funktion ftok() erzeugen
† ftok( “../keyfile”, int nummer)
Liefert: liefert einen key vom Typ key_t
Einführung in Linux
Systemprogrammierung
Systemfunktionen
† Nachrichten
„ Erzeugen einer Message-Queue
† msgget( key, IPC_CREAT | IPC_EXCL | 0600 )
„Liefert: ID der erzeugten MSQ
„Erwartet: eindeutigen key ( am besten mit ftok() erzeugen )
„ Senden einer Nachricht
† msgsnd( id, &message, sizeof(message), 0)
„Liefert: 0 bei Erfolg
„Erwartet: id von existenter MSQ, Adresse von message struct, Größe der message sowie
flags
„ Abholen einer Nachricht ( blockierend )
† msgrcv( id, &message, sizeof(message), type, 0)
„Liefert: bei Erfolg die tatsächliche Größe der message sonst -1
„Erwartet: type = 0 dann FIFO ansonsten wird geholt was dem type entspricht
„ Vernichten einer Message-Queue
†msgctl( id, IPC_RMD, &buffer)
„Liefert: 0 bei Erfolg sonst -1
„Erwartet: Kommando ob Status Überprüfung oder Löschen der Message Queue gefragt
ist, falls IPC_STAT dann wird die Antwort in buffer geschrieben
7
Einführung in Linux
Systemprogrammierung
Systemfunktionen
† Semaphore
„ Erzeugen eines Semaphores
† semget( key, amount, IPC_CREAT | IPC_EXCL | 0600)
„Liefert: bei Erfolg ID der SEMM sonst -1
„Erwartet: eindeutigen key_t, Menge der Semaphore
„ P-Operation
† semop( id, list, amount )
„Liefert: bei Erfolg die ID der Semaphormenge sonst -1
„Erwartet: die eine Liste vom Typ sembuf, sowie die Anzahl der list elemente
„amount ist negativ
„ V-Operation
† semop( id, list, amount )
„Liefert: bei Erfolg die ID der Semaphormenge sonst -1
„Erwartet: die eine Liste vom Typ sembuf, sowie die Anzahl der list elemente
„amount ist positiv
„Vernichten eines Semaphores
† semctl( id, IPC_RMD, &buffer)
„Liefert: 0 bei Erfolg sonst -1
„Erwartet: Kommando ob Status Überprüfung oder Löschen des SEM gefragt ist, falls
IPC_STAT dann wird die Antwort in buffer geschrieben
Einführung in Linux
Systemprogrammierung
Systemfunktionen
† Shared Memory
„Erzeugen
† shmget( key, sizeof(element) * 100, IPC_CREAT | 0600)
„Liefert: bei Erfolg die ID der SHM
„ Erwartet: Die Größe des gewünschten SHM Segments
„Einfügen in den virtuellen Adressraum
† shmat( id, 0, 0)
„ Liefert: Die Adresse auf das SHM Segment
„ Lösen aus dem Adressraum
† shmdt( &address)
„Liefert: 0 bei Erfolg
„ Erwartet: Adresse auf das SHM Segment
„Vernichten
† shmctl( id, IPC_RMD, &buffer)
„Liefert: 0 bei Erfolg sonst -1
„ Erwartet: Kommando ob Status Überprüfung oder Löschen des SHM gefragt ist, falls
IPC_STAT dann wird die Antwort in buffer geschrieben
8
Einführung in Linux
Systemprogrammierung
†
PIPE
„
„
anonyme pipe
†
†
†
nur zwischen Vater/Sohn möglich
Bytestream, unidirektional, Zugriffe über Filedeskriptoren
Vaterprozeß erzeugt eine Pipe
†
Lesen und schreiben in eine pipe
read(), write()
pipe()
named pipe
Braucht keine Vater/Sohn-Beziehung
Erzeugen einer pipe
int mkfifo ( char *pipename, int mode );
† Öffnen einer Pipe
int open ( char *name, int flag, int mode );
† Löschen einer Pipe
int unlink ( char *name );
†
†
Einführung in Linux
Systemprogrammierung
† Threads
„ PThread Bibliothek
#include <pthread.h>
† Thread erzeugen
int pthread_create (pthread_t *thread, ... void
*(*thread_function)(void *),…)
† Thread freiwillig terminieren
int pthread_exit (void *status)
† Auf das Ende eines Thread warten
int pthread_join (pthread_t thread, …)
† Thread-ID erfragen
pthread_t pthread_self ()
9
Einführung in Linux
Systemprogrammierung
†
IPC und Threads
„
Mutex-Objekte
†
†
†
†
„
int
int
int
int
pthread_mutex_init (…)
pthread_mutex_lock (…)
pthread_mutex_unlock (…)
pthread_mutex_destroy (…)
Signale
Asynchron, analog Signalen zwischen Prozessen
†
int pthread_kill(….)
Sendet ein signal sig an ein Thread
int pthread_sigmask(int how, const sigset_t *set, sigset_t
*oset);
Ändert die Signalmaske für den aufrufenden Thread
† Auf ein Signal warten
sigwait(&signalSet,&sigNr);
†
Petrinetze
† Darstellung nebenläufiger Aktionen
† Stellen zwischen Prozessen / Threads sind
Synchronisationsstellen im Programm
† Verwendung von Petrinetzsimulatoren
„ Zeichnen und Editieren
„ Simulation
„ Sie finden ein Windowsprogramm auf meiner
homepage ( visobjnet20.exe )
10
Herunterladen