Einführung in POSIX-Threads. WS 08/09 Universität Innsbruck
|
|
- Angelika Diefenbach
- vor 7 Jahren
- Abrufe
Transkript
1 Einführung in POSIX-Threads Betriebssysteme WS 08/09 Universität Innsbruck
2 Motivation für Nebenläufigkeit Klassischer Ansatz in Unix-Systemen Mehrere Prozesse durch fork()erzeugen Idee Vorteil Einfach Nachteile Verbraucht Ressourcen COW(Copy-on-write)-Verfahren reduziert diesen Verbrauch etwas Aufwändiger Context-Switch Nicht sehr flexibel (Rückgabe von Daten des Kindprozesses, IPC) Nur ein Prozess Aber mehrere Ausführungsstränge (Threads) Trennung Prozess entspricht einer Einheit für die Ressourcenverwaltung Thread entspricht einer Einheit für das Scheduling 2
3 Eigenschaften Threads allgemein (Wiederholung) Gemeinsame Ressourcen für alle Threads Adressraum OffeneDateien (Filedeskriptoren) Signal-Handler und -Einstellungen Benutzer- und Gruppenkennung Arbeitsverzeichnis Thread-eigene Elemente Eigene Thread-Kennung(Thread-ID) Eigene Kopie der Prozessorregister (einschließlich Programmzähler und Stackpointer Eigener Stack(für lokale Variablen und Rückgabeadressen) Eigene Signalmaske Eigene Priorität Eigene errno-variable 3
4 Arten von Threads Threads (Wiederholung) Benutzer-Threads (Green Threads) Kernel-Threads (Native Threads) Hybride Threads Anwendungen GUIs (Interaktion und Berechnungen im Hintergrund trennen) Server (z.b. ein Thread pro Aufruf) Multiprozessormaschinen ausnutzen Ereignisbasierte Systeme 4
5 Schnelle Erzeugung Vorteile von Threads (Wiederholung) Auch für fein-körnige Parallelisierung von kleinen Codeteilen geeignet Schnelles Context-Switching Gemeinsamer Speicher für schnelle Kommunikation Muss aber entsprechend synchronisiert werden Wenn ein Thread blockiert, können andere Threads weiterarbeiten (nur bei Kernel-Threads) Asynchrone Kommunikation mittels Threads ABER Kein Speicherschutz, d.h. Threads eines Prozesses sind nicht voneinander geschützt 5
6 POSIX-Threads In dieser Vorlesung werden die POSIX-Threads besprochen Der POSIX-Standard definiert eine einheitliche API für das Erzeugen und Manipulieren von Threads Unabhängig von der Implementierung Kann unterschiedlich sein (Kernel-Threads, Benutzer-Threads) Bibliotheken, die diese Threads implementieren, werden oft als Pthreads bezeichnet Verbreitung UNIX-Systeme wie Linux oder Solaris Auch Windows-Implementierung erhältlich Wichtige generelle Informationen Alle Thread-Funktionen und Datentypen sind in pthread.h deklariert Die Thread-Funktionen befinden sich nicht in der C-Standardbibliothek, sondern in libthread.so Daher muss man beim Linken lpthread angeben 6
7 Thread erzeugen int pthread_create( pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); Erzeugt und startet einen neuen Thread (Unterschied zu Java!) Nach erfolgreicher Erzeugung beginnt dieser Thread asynchron mit seiner Ausführung Return: 0 wenn ok, ansonsten Fehlercode (nicht-1 und nichtin errno gesetzt) threadzeigt auf die ID des neuen Threads attr spezifiziert bestimmte Attribute (Stackgröße, Priorität, ) - NULL wenn die Standardattribute benutzt werden start_routineist die Funktion, die der Thread aufruft wenn er gestartet wird. Nur ein Argument arg(void-pointer). 7
8 Zugriff auf ID pthread_t pthread_self(void); int pthread_equal(pthread_t t1, pthread_t t2); pthread_self retourniert die ID des aufrufenden Threads Hier sind keine Fehler definiert Ähnlich getpid() bei Prozessen pthread_equalgibt einen Wert ungleich 0 wenn Thread1 und Thread2 gleich sind, ansonsten 0 (keine Fehler definiert) 8
9 exit und cancel void pthread_exit(void *value_ptr); void pthread_cancel(pthread_t thread); pthread_exit terminiert die Ausführung des aktuellen Threads Explizites Terminieren Ein Thread terminiert immer, wenn er aus seiner Startroutine zurückkehrt value_ptrist der Rückgabewert des Threads (die von pthread_create aufgerufenen Funktion gibt void zurück!!) value_ptr kann von einem Thread, der pthread_join aufruft, benutzt werden pthread_cancel kann einen anderen Thread terminieren Vorsicht! 9
10 pthread_join int pthread_join(pthread_t thread, void **value_ptr); Auf Threads, die noch nicht detachaufgerufen haben, kann man mit pthread_joinwarten pthread_joinführt dazu, dass der Aufrufer auf das Beenden des angegebenen Threads wartet Ist vergleichbar mit waitpid bei Prozessen Der Rückgabewert des beendet Threads wird an die Adresse geschrieben auf die der Parameter value_ptrzeigt Wird nicht gewartet, dann bleiben die Thread-ID und der Exit- Status solange erhalten bis pthread_joinaufgerufen wird (vergleiche Zombie-Prozess) pthread_joinkann nur von einem Thread für eine bestimmte Thread-ID aufgerufen werden Nachfolgende Aufrufe resultieren in einem Fehler (von 0 verschiedener Rückgabewert) 10
11 pthread_detach int pthread_detach(pthread_t thread); Thread ist entweder verknüpfbar (joinable) oder eigenständig (detached) Wenn ein Thread beendet wird (Beendigung der ausgeführten Funktion), gibt er normalerweise noch nicht seine Ressourcen frei Dafür muss man detach aufrufen Dann werden die Thread-ID und der Exit-Status sofort freigegeben Aufruf von pthread_join nicht mehr möglich Um einen Thread bereits bei seiner Kreierung als abgehängten Thread festzulegen, steht das Thread-Attribut PTHREAD_CREATE_DETACHED zur Verfügung Wird auf einen Thread schon gewartet, dann hat dieser Funktionsaufruf keine Auswirkung 11
12 Beispiel (1) #include <stdio.h> #include <pthread.h> struct data { int nr; int zeit; }; void *rennen(void *arg) { int meter = 0, sek; struct data *data_zgr = (struct data *)arg; while (meter<50) { sleep( sek = rand()%3+1); data_zgr->zeit += sek; meter += 5; fprintf(stderr, "%*s%3d\n", data_zgr->nr * 15-7, " ", meter); } fprintf(stderr, "%*s\n", data_zgr->nr * 15, " "); } return arg; /* auch möglich: pthread_exit( arg ); */ 12
13 Beispiel (2) int main(void) { int i, j; pthread_t id[3]; Aufruf für Übersetzung (Programmname ist thread1.c) struct data *renner_daten[3]; gcc lpthread o thread1 thread1.c srand(time(null)); for (i=0; i<3; i++) renner_daten[i] = calloc( 1, sizeof(struct data) ); printf("%15s%15s%15s\n", "Laeufer 1", "Laeufer 2", "Laeufer 3"); printf(" \n"); for (i=0; i<3; i++) { renner_daten[i]->nr = i+1; pthread_create(&id[i], NULL, &rennen, renner_daten[i]); } for (i=0; i<3; i++) pthread_join(id[i], (void **)&renner_daten[i]); for (i=0; i<2; i++) for (j=i+1; j<3; j++) if (renner_daten[i]->zeit > renner_daten[j]->zeit) { struct data h = *renner_daten[i]; *renner_daten[i] = *renner_daten[j]; *renner_daten[j] = h; } fprintf(stderr, "Zieleinlauf:\n"); for (i=0; i<3; i++) fprintf(stderr, "%5d: Laeufer %d (%2d Sek.)\n", i+1, renner_daten[i]->nr, renner_daten[i]- >zeit); return 0; } 13
14 Ausgabe (Beipiele) Laeufer 1 Laeufer 2 Laeufer Zieleinlauf: 1: Laeufer 2 (14 Sek.) 2: Laeufer 3 (17 Sek.) 3: Laeufer 1 (20 Sek.) Laeufer 1 Laeufer 2 Laeufer Zieleinlauf: 1: Laeufer 1 (17 Sek.) 2: Laeufer 2 (20 Sek.) 3: Laeufer 3 (24 Sek.) 14
15 Nebenläufigkeit - Probleme Zugriff auf gemeinsame Ressourcen (z.b. Dateien oder globale Variablen) muss synchronisiert werden Ansonsten kann es zu Synchronisationsproblemen (raceconditions) kommen Dafür gibt es Mutexe Es existiert eine eigene Bibliothek dafür Wenn mehrere Threads mit der gleichen Funktion aufgerufen werden, dann führen sie den gleichen Code aus Wenn Funktionen in Threads aufgerufen werden, dann muss immer überprüft werden, ob diese thread-safe sind (man Seiten) 15
16 Mutexe Für die Synchronisation von Threads stehen sogenannte Mutexe zur Verfügung Mutexeerlauben es, Codeteile für andere Threads zu sperren, wenn ein Thread diesen Codeteilgerade ausführt (mutual exclusion) 2 Arten Statische Mutexe Dynamische Mutexe 16
17 Statische Mutexe int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); Ein Mutex hat den Datentyp pthread_mutex_t Ist eine Mutex-Variable statisch definiert, dann muss man diese mit der Konstante PTHREAD_MUTEX_INITIALIZER initialisieren pthread_mutex_lock Sperrt einen Mutex oder blockiert solange, bis der Mutex freigegeben wird pthread_mutex_unlock Gibt den Mutex wieder frei pthread_mutex_trylock Sperrt einen Mutex, wenn es frei ist Kehrt sofort wieder mit einem entsprechenden Fehlercode (EBUSY) zurück, wenn der Mutex schon gesperrt ist 17
18 int pthread_mutex_init( Dynamische Mutexe pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); int pthread_mutex_destroy(pthread_mutex_t *mutex); Dynamische Mutexewerden zum Beispiel benötigt, wenn sich die Mutex-Variable in einer Struktur befindet, zu der man sich mittels malloc einen Speicherbereich allokieren lassen möchte pthread_mutex_initinitialisiert den Mutexmutexmit den in mutexattr festgelegten Attributen Wird bei den Attributen NULLangegeben, dann werden die voreigenstellten Attribute verwendet pthread_mutex_destroylöscht einen mit pthread_mutex_initangelegten Mutexund gibt die belegten Ressourcen wieder frei 18
19 Einsatz von Mutexe Codeteile, die durch einen Mutexgeschützt werden, sollte nur so groß sein, wie notwendig 2 Punkte sollte man beachten Mutexemachen ein Programm langsamer Sperren und Freigeben kosten Zeit Mutexe serialisieren die Programmausführung Wenn Threads häufig auf Mutexezugreifen, werden Sie meist auch viel Zeit beim Zugreifen und Freigeben verbringen Es sollten nur notwendige Teile geschützt werden Mehreren kleinere Codeteile durch mehrere verschiedene Mutexe schützen Punkte 1 und 2 widersprechen sich Praktische Vorgehensweise Zuerst größere Codeteile durch Mutexe schützen Schrittweise Verkleinerung der Codeteile, wenn die Performance Probleme bereitet 19
20 Deadlocks und Backoff-Algorithmus Wenn zwei Threads gegenseitige Abhängigkeiten haben, dann können Deadlocks auftreten Threads versuchen nacheinander die gleichen Mutexe zu sperren Die Sperrreihenfolge unterscheidet sich, es gibt aber zyklische Abhängigkeiten Eine einfache Möglichkeit für die Vermeidung von Deadlocks bietet der sogenannte Backoff-Algorithmus Erster Mutex wird mit pthread_mutex_lock gesperrt Alle nachfolgenden Mutexe versucht man mit pthread_mutex_trylock zu sperren Ist ein Mutexgesperrt, dann werden rückwärtsalle zuvor gesperrten Mutexe wieder freigegeben 20
21 Beispiel (ohne Mutex) #include <pthread.h> #include <stdio.h> #define ANZAHL /* eventuell höher setzen */ int zaehler; /* wird durch die Threads hochgezählt */ void *zaehl_thread(void *); int main(void) { pthread_t id1, id2; pthread_create(&id1, NULL, &zaehl_thread, NULL); pthread_create(&id2, NULL, &zaehl_thread, NULL); pthread_join(id1, NULL); pthread_join(id2, NULL); fprintf(stderr, "zaehler = %d\n", zaehler); return 0; } void *zaehl_thread(void *unbenutzt) { int i, zahl; for (i=0; i<anzahl; i++) { zahl = zaehler; fprintf(stderr, "\r %7d", zahl+1); zaehler = zahl + 1; } fprintf(stderr, "... Thread %d fertig (zaehler = %d)\n", (int)pthread_self(), } zaehler); return NULL; Beispiel für Ausgabe: Thread fertig (zaehler = 48755) Thread fertig (zaehler = ) zaehler =
22 Beispiel (mit statischem Mutex) #include <pthread.h> #include <stdio.h> #define ANZAHL /* eventuell höher setzen */ int zaehler; /* wird durch die Threads hochgezählt */ pthread_mutex_t zaehler_mutex = PTHREAD_MUTEX_INITIALIZER; void *zaehl_thread(void *); int main(void) { pthread_t id1, id2; pthread_create(&id1, NULL, &zaehl_thread, NULL); pthread_create(&id2, NULL, &zaehl_thread, NULL); pthread_join(id1, NULL); pthread_join(id2, NULL); fprintf(stderr, "zaehler = %d\n", zaehler); return 0; } void *zaehl_thread(void *unbenutzt) { int i, zahl; for (i=0; i<anzahl; i++) { pthread_mutex_lock(&zaehler_mutex); zahl = zaehler; fprintf(stderr, "\r %7d", zahl+1); zaehler = zahl + 1; pthread_mutex_unlock(&zaehler_mutex); } } Beispiel für Ausgabe: Thread fertig (zaehler = ) Thread fertig (zaehler = ) zaehler = fprintf(stderr, "... Thread %d fertig (zaehler = %d)\n", (int)pthread_self(), zaehler); return NULL; 22
23 Bedingungsvariablen Mutexedienen nur zur Synchronisation des Zugriffs auf gemeinsame Ressourcen Manchmal möchte man beim Warten darüber informiert werden, dass eine bestimmte Bedingung eingetreten ist, durch die der Thread fortfahren kann Mit Bedingungsvariablen kann der Thread auf das Eintreten einer Bedingung warten Eine Bedingungsvariable hat immer den Typ pthread_cond_t Es gibt 2 Arten Statische Bedingungsvariablen Dynamische Bedingungsvariablen Ähnlich zu wait/notify in Java 23
24 Statische Bedingungsvariable Statische Bedingungsvariablen müssen mit PTHREAD_COND_INITIALIZER initialisiert werden int pthread_cond_wait( pthread_cond_t *cond, pthread_mutex_t *mutex); Der aufrufende Thread muss den Mutex mutex gesperrt haben Er gibt den Mutexfrei und wartet, bis die Bedingungvariableconderfüllt ist Beim Zurückkehren wird wieder automatisch die Sperre eingerichtet int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime); Wartet nur eine bestimmte Zeitspanne Danach wird wieder die Sperre eingerichtet int pthread_cond_signal(pthread_cond_t *cond); Weckt einen wartenden Thread (für cond) auf (nach Priorität sortiert) int pthread_cond_broadcast(pthread_cond_t *cond); Weckt alle Threads auf, die auf cond warten 24
25 Wie bei Mutexe Dynamische Bedingungsvariable Wenn sich zum Beispiel die Bedingungsvariable in einer Struktur befindet 2 Funktionen int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *attr); Initialisierung der Bedingungsvariable cond attr legt die Attribute fest (NULL für Standardattribute) int pthread_cond_destroy(pthread_cond_t *cond); Löscht Bedingungsvariable Gibt belegte Ressourcen wieder frei 25
26 Beispiel (statische Bedingungsvariable) #include <pthread.h> #include <stdio.h> #include <unistd.h> #include <string.h> #define AMPEL_ZAHL 4 #define AMPEL_AUSGABE { \ int i; \ for (i=0; i<ampel_zahl; i++) \ fprintf(stderr, "%10s", farbe[i]); \ fprintf(stderr, "\n"); \ } pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; char farbe[ampel_zahl][10]; void *ampel(void *kennung); int main(void) { pthread_t id[ampel_zahl]; int i; for (i=0; i<ampel_zahl; i++) { strcpy(farbe[i], "rot"); pthread_create(&id[i], NULL, &el, &i); } pthread_cond_signal(&cond); pthread_exit(null); } 26
27 Beispiel (statische Bedingungsvariable) void *ampel(void *kennung) { int i, nr = *(int *)kennung; for (i=1; i<=2; i++) { pthread_mutex_lock(&mutex); pthread_cond_wait(&cond, &mutex); } sleep(1); strcpy(farbe[nr], "gelb"); AMPEL_AUSGABE sleep(1); strcpy(farbe[nr], "gruen"); AMPEL_AUSGABE sleep(1); strcpy(farbe[nr], "gelb"); AMPEL_AUSGABE sleep(1); strcpy(farbe[nr], "rot"); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); } return NULL; Ausgabe: gelb rot rot rot gruen rot rot rot gelb rot rot rot rot gelb rot rot rot gruen rot rot rot gelb rot rot rot rot gelb rot rot rot gruen rot rot rot gelb rot rot rot rot gelb rot rot rot gruen rot rot rot gelb gelb rot rot rot gruen rot rot rot gelb rot rot rot rot gelb rot rot rot gruen rot rot rot gelb rot rot rot rot gelb rot rot rot gruen rot rot rot gelb rot rot rot rot gelb rot rot rot gruen rot rot rot gelb Beispiel aus: Helmut Herold, Linux/Unix Systemprogrammierung, Addison-Wesley, 3. Auflage (September 2004) ACHTUNG: Kann Deadlock produzieren! 27
28 Abbrechen von Threads (1) 3 Möglichkeiten für einen Thread auf eine Abbruchaufforderung zu reagieren Kein Abbruch Aufforderungen werden ignoriert, bleiben aber bestehen (später reagieren) pthread_setcancelstate(pthread_cancel_disable, ) pthread_setcancelstate(pthread_cancel_enable, ) Abbruch mit Verzögerung Thread läuft weiter und wird erst später (Abbruchpunkt) abgebrochen pthread_setcanceltype(pthread_cancel_deferred, ) Asynchroner Abbruch Thread beendet sich unmittelbar nach dem Empfang der Abbruchaufforderung pthread_setcanceltype(pthread_cancel_asynchronous, ) 28
29 2 Funktionen Abbrechen von Threads (2) int pthread_cancel(pthread_t id); Schickt Abbruchaufforderung an einen Thread void pthread_testcancel(void); Prüft ob Abbruchaufforderungen vorliegen Realisiert eigene Abbruchpunkte (weitere existieren bei bestimmten Funktionsaufrufen) Wenn ja, dann wird abgebrochen Exit-Handler Thread kann Exit-Handler installieren/deinstallieren (Aufräumarbeiten etc.) 2 Funktionen pthread_cleanup_push(void (*routine) (void *), void *arg); Installiert Funktion routine mit dem Argument arg pthread_cleanup_pop(int execute); Entfernt zuletzt installierten Exit-Handler Ist execute= 0, dann wird der Handler nur entfernt Ist execute!= 0, dann wird der Handler ausgeführt und entfernt 29
30 Notwendige POSIX-Erweiterungen Verwendung von Pthreadshat auch Auswirkung auf das traditionelle UNIX-Prozesskonzept fork Ruft ein Thread forkauf, dann existiert im Kindprozessnur der Thread, der fork aufrief Thread des Kindprozesseshat den selben Zustand wie der Thread im Elternprozess Hat zum Beispiel die gleichen Mutexe gesperrt Deadlock-Problematik bei Mutex-Variablen Anderer Thread hält eine Sperre auf einen Mutex Dieser Thread ist aber nach dem fork im Kindprozess nicht vorhanden Lösung Spezielle Funktion für das Registrieren von Handler-Funktionen 30
31 pthread_atfork( pthread_atfork void (*prepare)(void), void (*parent) (void), void (*child) (void)); Installiert Handler-Funktionen prepare Wird vom Elternprozess vor der Erzeugung des neuen Prozesses aufgerufen Hier sperrt man meist die betreffenden Mutexe parent Wird vom Elternprozess aufgerufen, unmittelbar bevor der fork-aufruf zurückkehrt Hier gibt man meist die in prepare geschlossenen Mutexe wieder frei child Wird vom Kindprozessaufgerufen, unmittelbar bevor der fork-aufruf zurückkehrt Meist identisch zu parent(mutexe freigeben) Mehrere Aufrufe prepare in LIFO-Ordnung parent und child in FIFO-Ordnung 31
32 exec Ersetzt den ganzen Prozess exec und exit Threads werden automatisch beendet Keine Exit-Handler werden ausgeführt Mutexe und Bedingungsvariablen verschwinden auch (außer das pshared- Attribut ist gesetzt) exit Alle Threads im entsprechenden Prozess werden beendet Wenn sich der main-thread beendet, werden auch alle Threads beendet 32
33 Thread-sichere und reentrant Funktionen C89-Funktionen wurden noch ohne Thread-Implementierung entwickelt Die meisten sind aber mittlerweile thread-sicher (thread-safe) gemacht worden Keine Prototyp-Änderung Können auch bei Threads verwendet werden Bei manchen Funktionen war eine thread-sichere Reimplementierungbei Beibehaltung der externen Schnittstelle nicht möglich Daher wurden thread-sichere Varianten eingeführt, die das Suffix _r am Ende ihres Namens haben Beispiele: strtok_r, rand_r etc. Diese Funktionen sind nicht nur thread-sicher sondern auch reentrant, da sie keine internen statischen Puffer verwenden Aufrufer muss Pufferadresse mitgeben, an die dann die Informationen geschrieben werden 33
34 Signale Jeder Thread kann eine eigene Signalmaske haben Setzen mit pthread_sigmask Beim Kreieren erbt ein Thread die Signalmaske des Threads, der ihn kreiert Vom main-thread können alle Threads erben Signal-Handler gelten aber prozessweit für alle Threads Signale, die von der Hardware geschickt werden, werden immer dem Thread geschickt, der sie auslöst Andere Signale werden einem beliebigen Thread geschickt An Threads können Signale mit pthread_kill geschickt werden Signale, die Auswirkung auf das Prozessverhalten haben, wirken sich bei pthread_kill immer auf den ganzen Prozess aus z. B. SIGKILL beendet den ganzen Prozess Um auf das Eintreffen eine Signals zu warten, stehen folgende Funktionen zur Verfügung sigwait, sigwaitinfo (setzt auch errno), sigtimedwait (setzt auch errno) 34
35 Semaphore Weitere Synchronisierungsmöglichkeiten Wurde schon in der IPC-Vorlesung kurz genannt In diesem Fall die Semaphore aus semaphore.h Read/Write-Sperren Mehrere gleichzeitige Leser erlaubt Nur ein Schreiber erlaubt Barrier Synchronisationspunkt, der erst dann freigegeben wird, wenn eine bestimmte Anzahl von Threads an dieser Barriere angekommen sind Spinlocks Zur Synchronisation auf Multiprozessorsystemen 35
Einführung in POSIX Threads
Einführung in POSIX Threads Radu Prodan Institut für Informatik, Universität Innsbruck Verteilte und Parallele Systeme http://dps.uibk.ac.at 04.05.2012 R. Prodan, Betriebssysteme, Sommersemester 2012 1
MehrPThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes
PThreads Prozesse und Threads Ein Unix-Prozess hat IDs (process,user,group) Umgebungsvariablen Verzeichnis Programmcode Register, Stack, Heap Dateideskriptoren, Signale message queues, pipes, shared memory
MehrThreads Einführung. Zustände von Threads
Threads Einführung Parallelität : Zerlegung von Problemstellungen in Teilaufgaben, die parallelel ausgeführt werden können (einfachere Strukturen, eventuell schneller, Voraussetzung für Mehrprozessorarchitekturen)
MehrU9-3 Vergleich von Thread-Konzepten. U9-2 Motivation von Threads. U9-3 Vergleich von Thread-Konzepten (2) U9-1 Überblick
U9 9. Übung U9 9. Übung U9-1 Überblick Besprechung Aufgabe 6 (printdir) Posix-Threads U9.1 User-Level Threads: Federgewichtige Prozesse Realisierung von Threads auf Anwendungsebene innerhalb eines Prozesses
MehrSoftwaresysteme I Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2007 U9.fm
U9 9. Übung U9 9. Übung U9-1 Überblick Besprechung Aufgabe 6 (printdir) Posix-Threads U9.1 U9-2 Motivation von Threads U9-2 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung (virtueller
MehrTafelübung zu BS 2. Threadsynchronisation
Tafelübung zu BS 2. Threadsynchronisation Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/
MehrTafelübung zu BS 2. Threadsynchronisation
Tafelübung zu BS 2. Threadsynchronisation Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/
MehrShared-Memory Programmiermodelle
Shared-Memory Programmiermodelle mehrere, unabhängige Programmsegmente greifen direkt auf gemeinsame Variablen ( shared variables ) zu Prozeßmodell gemäß fork/join Prinzip, z.b. in Unix: fork: Erzeugung
MehrTafelübung zu BS 2. Threadsynchronisation
Tafelübung zu BS 2. Threadsynchronisation Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/
MehrI 7. Übung. I-1 Überblick. Besprechung Aufgabe 5 (mysh) Online-Evaluation. Posix Threads. Ü SoS I I.1
I 7. Übung I 7. Übung I-1 Überblick Besprechung Aufgabe 5 (mysh) Online-Evaluation Posix Threads I.1 I-2 Evaluation I-2 Evaluation Online-Evaluation von Vorlesung und Übung SOS zwei TANs, zwei Fragebogen
MehrPOSIX-Threads. Aufgabe 9 SP - Ü U10.1
U10 10. Übung U10 10. Übung POSIX-Threads Aufgabe 9 U10.1 U10-1 Motivation von Threads U10-1 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung (virtueller Adressraum, Rechte, Priorität,...)
MehrThreads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015
Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: STATS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)
MehrU8-1 Motivation von Threads. U8-2 Vergleich von Thread-Konzepten. U8-2 Vergleich von Thread-Konzepten (2) Motivation
U8 POSIX-Threads U8 POSIX-Threads U8-1 Motivation von Threads U8-1 Motivation von Threads Motivation Thread-Konzepte UNIX-Prozesskonzept: eine Ausführungsumgebung (virtueller Adressraum, Rechte, Priorität,...)
MehrU8 POSIX-Threads U8 POSIX-Threads
U8 POSIX-Threads U8 POSIX-Threads Motivation Thread-Konzepte pthread-api pthread-koordinierung U8.1 U8-1 Motivation von Threads U8-1 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung
MehrBetriebssysteme. Tafelübung 2. Thread-Synchronisation. Olaf Spinczyk.
Betriebssysteme Tafelübung 2. Thread-Synchronisation http://ess.cs.tu-dortmund.de/de/teaching/ss2016/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware
MehrBesprechung Aufgabe 1: Prozesse verwalten Fortsetzung Grundlagen C-Programmierung Aufgabe 2: Threadsynchronisation
Betriebssysteme Tafelübung 2. Thread-Synchronisation http://ess.cs.tu-dortmund.de/de/teaching/ss2016/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware
MehrPthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester
Seminar: Multicore Programmierung Sommersemester 2009 16.07.2009 Inhaltsverzeichnis 1 Speichermodell 2 3 Implementierungsvielfalt Prioritätsinversion 4 Threads Speichermodell Was sind Threads innerhalb
MehrLinux Prinzipien und Programmierung
Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2014 1 / 28 Kritische Bereiche bei Threads Deadlocks Conditions/Semaphore 2 / 28 Beispiel aus der letzten Vorlesung
MehrÜbungen zu Systemprogrammierung 1
Übungen zu Systemprogrammierung 1 Ü5 Threads und Koordinierung Sommersemester 2018 Christian Eichler, Jürgen Kleinöder Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl
MehrEchtzeitbetriebssysteme (am Beispiel QNX) Dr. Stefan Enderle HS Esslingen
Echtzeitbetriebssysteme (am Beispiel QNX) Dr. Stefan Enderle HS Esslingen 3. QNX Neutrino Microkernel 3.1 Einführung Der Neutrino-Kernel (Betriebssystemkern) implementiert (nur) die wichtigsten Teile des
MehrVorlesung Betriebssysteme I
1 / 22 Vorlesung Betriebssysteme I Thema 8: Threads (Aktivitäten, die zweite) Robert Baumgartl 25. Januar 2018 Threads (Leichtgewichtsprozesse) 2 / 22 Prozess = Container für Ressourcen + (ein) identifizierbarer
MehrBesprechung Aufgabe 5 (crawl) POSIX-Threads. Problem: UNIX-Prozesskonzept ist für viele heutige Anwendungen unzureichend
U7 6. Übung U7 6. Übung U7-1 Motivation von Threads U7-1 Motivation von Threads Besprechung Aufgabe 5 (crawl) OSIX-Threads Motivation Thread-Konzepte pthread-ai Koordinierung UNIX-rozesskonzept: eine Ausführungsumgebung
MehrConcurrency and Processes of Pthreads
Concurrency and Processes of Pthreads Pthreads Pthreads is a POSIX standard for describing a thread model, it specifies the API and the semantics of the calls. POSIX: Portable Operating System Interface
MehrU6-1 Organisatories. U6-2 Motivation von Threads. U6-3 Vergleich von Thread-Konzepten. Organisatorisches
U6 6. Übung U6 6. Übung U6-1 Organisatories U6-1 Organisatories Organisatorisches Zusätzliche Tafelübung zur S1-Klaurvorbereitung Besprechung Aufgabe 5 (crawl) OSIX-Threads Motivation Thread-Konzepte am
MehrÜbungen zu Systemnahe Programmierung in C (SPiC) Sommersemester 2018
Übungen zu Systemnahe Programmierung in C (SPiC) Sommersemester 2018 Übung 10 Benedict Herzog Sebastian Maier Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für
MehrInhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Motivation
Übungen zu Systemnahe Programmierung in C (SPiC) Sebastian Maier (Lehrstuhl Informatik 4) Übung 0 Inhalt vs. Prozesse POSIX Stoppuhr Sommersemester 206 Lehrstuhl Informatik 4 Übungen zu SPiC (SS 206) 2
MehrÜbungen zu Systemnahe Programmierung in C (SPiC)
Übungen zu Systemnahe Programmierung in C (SPiC) Sebastian Maier (Lehrstuhl Informatik 4) Übung 10 Sommersemester 2016 Inhalt Threads Motivation Threads vs. Prozesse Kritische Abschnitte Speedup & Amdahl
MehrÜbungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Sebastian Maier (Lehrstuhl Informatik 4) Übung 10. Sommersemester 2016
Übungen zu Systemnahe Programmierung in C (SPiC) Sebastian Maier (Lehrstuhl Informatik 4) Übung 10 Sommersemester 2016 Inhalt Motivation vs. Prozesse Kritische Abschnitte Speedup & Amdahl s Gesetz POSIX
MehrPOSIX Solaris thread management pthread_create thr_create pthread_exit thr_exit pthread_kill thr_kill pthread_self thr_self
Kapitel 5 threads Unter einem thread versteht die Folge von Anweisungen (Adressen im Programmspeicher) die einem Programm entsprechen. Im Normalfall ist dies ein gleichbleibender Strom von Anweisungen.
MehrAufgabe 9: recgrep rekursive, parallele Suche (letzte Aufgabe)
U6 6. Übung (Mathematik / Technomathematik) U6 6. Übung (Mathematik / Technomathematik) Besprechung Aufgabe 4 (halde) Besprechung Aufgabe 5 (crawl) Besprechung der Mini-Klausur POSIX-Threads Motivation
MehrÜbungen zu Systemprogrammierung 1 (SP1)
Übungen zu Systemprogrammierung 1 (SP1) Ü7 Threads und Koordinierung Jens Schedel, Christoph Erhardt, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität
MehrÜbungen zu Systemprogrammierung 1 (SP1)
Übungen zu Systemprogrammierung 1 (SP1) Ü5 Threads und Koordinierung Andreas Ziegler, Stefan Reif, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität
MehrThreads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger
Netzwerk - Programmierung Threads Alexander Sczyrba asczyrba@cebitec.uni-bielefeld.de Jan Krüger jkrueger@cebitec.uni-bielefeld.de Übersicht Probleme mit fork Threads Perl threads API Shared Data Mutexes
MehrMultithread Programming
Vorlesung Rechnerarchitektur 2 Seite 150 Threads versus Processes Processes execute in separate address spaces (schwergewichtige Prozesse) communicate via IPC mechanisms (sockets, pipes, signals) Thread
MehrUser-Level-Threads (Koroutinen) Realisierung von Threads auf Benutzerebene innerhalb eines Prozesses
52 Überblick über die 12. Übung Überblick über die 12. Übung 54 Vergleich von Prozeß und Thread-Konzepten mehrere UNIX-Prozesse mit gemeinsamen Speicherbereichen POSIX-Threads Bewertung: + echte Parallelität
MehrMarkus Klußmann, Amjad Saadeh Institut für Informatik. Pthreads. von Markus Klußmann und Amjad Saadeh. Pthreads
Markus Klußmann, Amjad Saadeh Institut für Informatik Pthreads von Markus Klußmann und Amjad Saadeh Pthreads Inhalt - Was sind Threads? - Prozess vs. Thread - Kurzer Überblick POSIX - Threads im Betriebssystem
MehrBetriebssysteme. Agenda. Tafelübung 3. Deadlock. Olaf Spinczyk.
Betriebssysteme Tafelübung 3. Deadlock http://ess.cs.tu-dortmund.de/de/teaching/ss2016/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware Informatik
MehrSystemnahe Programmierung in C Übungen Jürgen Kleinöder, Michael Stilkerich Universität Erlangen-Nürnberg Informatik 4, 2011 U7.fm
U7 POSIX-Prozesse U7 POSIX-Prozesse Prozesse POSIX-Prozess-Systemfunktionen Aufgabe 7 U7.1 U7-1 Prozesse: Überblick U7-1 Prozesse: Überblick Prozesse sind eine Ausführumgebung für Programme haben eine
MehrEine Mini-Shell als Literate Program
Eine Mini-Shell als Literate Program Hans-Georg Eßer 16.10.2013 Inhaltsverzeichnis 1 Eine Mini-Shell 1 1.1 Einen Befehl parsen......................... 2 1.2 Was tun mit dem Kommando?...................
MehrSequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden )
Threads Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden ) Ein thread bearbeitet eine sequentielle Teilaufgabe innerhalb eines Prozesses Mehrere nebenläufige
MehrU7 POSIX-Prozesse U7 POSIX-Prozesse
U7 POSIX-Prozesse U7 POSIX-Prozesse Prozesse POSIX-Prozess-Systemfunktionen Aufgabe 6 U7.1 U7-1 Prozesse: Überblick U7-1 Prozesse: Überblick Prozesse sind eine Ausführumgebung für Programme haben eine
MehrPROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN
PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN 2. UNIX/Linux-Prozessverwaltung und zugehörige Systemaufrufe Wintersemester 2016/17 2. Die UNIX/LINUX-Prozessverwaltung Aufgaben: 1. Erzeugen neuer Prozesse
MehrLeseprobe. Kapitel 12:»Threads« Inhaltsverzeichnis. Index. Die Autoren. Leseprobe weiterempfehlen.
Wissen, wie s geht. Leseprobe»Linux-Unix-Programmierung«deckt alle Bereiche ab, die für die Entwicklung von Anwendungen für die Linux-Welt wichtig sind, C-Kenntnisse vorausgesetzt. Diese Leseprobe enthält
MehrAufgabe 6: palim rekursive, parallele Suche nach einer Zeichenkette
U6 6. Übung U6 6. Übung Besprechung Aufgabe 4 (halde) OSIX-Threads Motivation Thread-Konzepte pthread-ai Koordinierung Aufgabe 6: palim rekursive, parallele Suche nach einer Zeichenkette U6.1 U6-1 Motivation
MehrÜbungen zu Systemprogrammierung 2 (SP2)
Übungen zu Systemprogrammierung 2 (SP2) Ü6 Mehrfädige Programme Christoph Erhardt, Jens Schedel, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität
MehrLinux Prinzipien und Programmierung
Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2010/2011 1 / 18 2 / 18 fork und Daten Nach dem fork teilen sich Eltern- und Kindprozess zwar den Programmbereich
MehrOperating Systems Principles. Eventund. Threadbasierte Programmierung
Humboldt University Computer Science Department Operating Systems Principles Eventund Threadbasierte Programmierung Aufgabe 2 Wochen Zeit zum Lösen der Aufgaben Aufgabenstellung auf der SAR Website Abgabe
Mehrfork () Hans-Georg Eßer, Hochschule München Betriebssysteme I, SS 2008 2. Prozesse (2/2) Folie 4
Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: SAS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)
MehrÜbungen zu Systemprogrammierung 1 (SP1)
Übungen zu Systemprogrammierung 1 (SP1) Ü5 Threads und Koordinierung Christian Eichler, Andreas Ziegler, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität
MehrObjektorientierte Programmierung
Objektorientierte Programmierung Ausnahmebehandlung und Nebenläufigkeit 9. Vorlesung am 15. Dezember 2010 Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A
MehrKlausur Betriebssysteme I
Prof. Dr. Michael Jäger FB MNI Klausur Betriebssysteme I 18.3.2011 Bitte bearbeiten Sie die Aufgaben auf den Aufgabenblättern. Die Benutzung von Unterlagen oder Hilfsmitteln ist nicht erlaubt. Die Bearbeitungszeit
MehrAufgabenblatt 6 Musterlösung
Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 6 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2018/19 Aufgabe 1: Implementierung von Threads (Bearbeitung zu Hause) Der größte Vorteil ist
MehrLehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading
Leistungskurs C++ Multithreading Threading mit Qt Plattformübergreifende Thread-Klasse Sehr einfach zu benutzen Leider etwas schlecht dokumentiert Leistungskurs C++ 2 QThread Plattformübergreifende Thread-Klasse
MehrLehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading
Leistungskurs C++ Multithreading Threading mit Qt Plattformübergreifende Thread-Klasse Sehr einfach zu benutzen Leider etwas schlecht dokumentiert Leistungskurs C++ 2 QThread Plattformübergreifende Thread-Klasse
MehrLehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading
Leistungskurs C++ Multithreading Zeitplan 16.10. Vorlesung 23.10. Vorlesung, Gruppeneinteilung 30.10. Vorlesung, HA1 06.11. Vorlesung, HA2 13.11. Vorlesung entfällt wegen SVV 20.11. Präsentation Vorprojekt
MehrAlle Fäden in der Hand
Alle Fäden in der Hand Thread Programmierung unter Linux in C und C++ (Teil 1) Wolfgang Schreiner Threads (zu deutsch "Fäden") ermöglichen die gleichzeitige Ausführung von mehreren Programmpfaden innerhalb
MehrHomogene Multi-Core-Prozessor-Architekturen
Homogene Multi-Core-Prozessor-Architekturen Praktikum Parallele Rechnerarchitekturen Stefan Potyra Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2009
MehrPthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester
Pthreads David Klaftenegger Seminar: Multicore Programmierung Sommersemester 2009 16.07.2009 1 Inhaltsverzeichnis 1 Einführung 3 1.1 Pthreads.............................. 3 1.2 Speichermodell..........................
MehrWas ist ein Prozess?
Prozesse unter UNIX Definition Was ist ein Prozess? Zeitliche Abfolge von Aktionen Ein Programm, das ausgeführt wird Prozesshierachie Baumstruktur INIT-Prozess ist die Wurzel (pid=1) und wird beim Booten
Mehre) Welche Aussage zu Speicherzuteilungsverfahren ist falsch?
Aufgabe 1: (1) Bei den Multiple-Choice-Fragen ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene Punktzahl. Wollen Sie eine Multiple-Choice-Antwort
Mehr1 Fehler in Bibliotheksfunktionen. 1 Überblick. 2 Ziele der Aufgabe. Besprechung der 1. Aufgabe
U3 3. Übung U3 3. Übung U3-1 Fehlerbehandlung U3-1 Fehlerbehandlung Besprechung der 1. Aufgabe Fehlerbehandlung Infos zur Aufgabe 3: malloc-implementierung U3.1 Fehler können aus unterschiedlichsten Gründen
MehrGlobale Variablen Diverses. Globale Variablen. Globale Variablen
lokale Variablen Variablen bisher nur am Anfang von Funktionen auch erlaubt: am Anfang innerer Codeblöcke (innerhalb geschweifter Klammern) in C99 und als gcc-erweiterung: an beliebiger Stelle innerhalb
MehrAufgabenblatt 5 Musterlösung
Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 5 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2017/18 Aufgabe 1: Implementierung von Threads (Bearbeitung zu Hause) Der größte Vorteil ist
Mehr(Ausnahmebehandlung)
16. Exceptions (Ausnahmebehandlung) 16-1 Objektorientierte Programmierung (Winter 2010/2011) Kapitel 16: Exceptions (Ausnahmebehandlung) Motivation Throw und Catch 16. Exceptions (Ausnahmebehandlung) 16-2
MehrParallele Prozesse. Prozeß wartet
Parallele Prozesse B-66 Prozeß: Ausführung eines Programmes in seinem Adressraum (zugeordneter Speicher) Parallele Prozesse: gleichzeitig auf mehreren Prozessoren laufende Prozesse p1 p2 verzahnte Prozesse:
MehrBeispiel für einen IPC-Server, der seinen Dienst über den Global Name Service im Netzwerk bekannt gibt. Header-Dateien einbinden
Dokument: gns_ipc_server.c, 1 - Seite 1 - - 1: 1 von 1 - Beispiel für einen IPC-Server, der seinen Dienst über den Global Name Service im Netzwerk bekannt gibt. Header-Dateien einbinden int main(int argc,
MehrÜbungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014
Übungen zu Systemnahe Programmierung in C (SPiC) Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014 Inhalt Prozesse System-Schnittstelle Aufgabe 7 Einlesen von der Standard-Eingabe
MehrLinux Prinzipien und Programmierung
Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2014 1 / 28 2 / 28 Motivation für Betrachten Sie folgendes Programm: #include #include
MehrPROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN
PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN 2. UNIX/Linux-Prozessverwaltung und zugehörige Systemaufrufe Wintersemester 2015/16 2. Die UNIX/LINUX-Prozessverwaltung Aufgaben: 1. Erzeugen neuer Prozesse
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
MehrKlausur Betriebssysteme I
Prof. Dr. Michael Jäger FB MNI Klausur Betriebssysteme I 14.3.2008 Bitte bearbeiten Sie die Aufgaben auf den Aufgabenblättern. Die Benutzung von Unterlagen oder Hilfsmitteln ist nicht erlaubt. Die Bearbeitungszeit
Mehr2A Basistechniken: Lösungen 2A.1 Wissens- und Verständnisfragen
2A Basistechniken: Lösungen 2A.1 Wissens- und Verständnisfragen 1.a.) Application Programming Interface 1.b.) Multiprogramming 1.c.) Mehreren Prozessoren, die über einen Bus miteinander verbunden sind
MehrU3 UNIX-Signale U3 UNIX-Signale
U3 UNIX-Signale U3 UNIX-Signale Besprechung der Aufgabe 2: sister Nebenläufigkeit durch Signale Aktives Warten auf Ereignisse Probleme beim passiven Warten (auf Signale) Nachtrag zur Signalbehandlungsschnittstelle
MehrTafelübung zu BS 1. Prozesse, Shell
Tafelübung zu BS 1. Prozesse, Shell Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2012/bs/
MehrNebenläufige Programmierung in Java: Threads
Nebenläufige Programmierung in Java: Threads Wahlpflicht: Fortgeschrittene Programmierung in Java Jan Henke HAW Hamburg 10. Juni 2011 J. Henke (HAW) Threads 10. Juni 2011 1 / 18 Gliederung 1 Grundlagen
MehrTesten nebenläufiger Objekte
Testen nebenläufiger Objekte Threads in Java Julian Lambertz Seminar Tests in Informatik und Statistik im SS 2004 Universität Ulm J.L., Juni 2004 1 Themenüberblick Einleitung Begriff der Nebenläufigkeit
MehrErste Java-Programme (Scopes und Rekursion)
Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/
MehrInhaltsverzeichnis. Carsten Vogt. Nebenläufige Programmierung. Ein Arbeitsbuch mit UNIX/Linux und Java ISBN:
Inhaltsverzeichnis Carsten Vogt Nebenläufige Programmierung Ein Arbeitsbuch mit UNIX/Linux und Java ISBN: 978-3-446-42755-6 Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-42755-6
MehrTafelübung zu BSRvS 1 3. Kreuzung
Tafelübung zu BSRvS 1 3. Kreuzung Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2009/bsrvs1/
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
MehrBeispiel für überladene Methode
Beispiel für überladene Methode class Gras extends Futter {... abstract class Tier { public abstract void friss (Futter x); class Rind extends Tier { public void friss (Gras x) {... public void friss (Futter
Mehr4 Threads. FH Regensburg BT/SS04 Betriebssysteme Wirtschaftsinformatik. 4.1 Allgemein
4 Threads 4.1 Allgemein Prozessmodell: Zwei unabhängige Eigenschaften eines Prozesses: Er hat Resourcen: Adressen, Daten, geöffnete Dateien und ist ausführbar Thread: hat keine eigenen Resourcen (ausser
MehrRTEMS- Echtzeitbetriebssystem
RTEMS- Echtzeitbetriebssystem Name: Hussein Hammoud Matrikel- Nr.: 230768 Studiengang: Technische Informatik Fach: Projekt Eingebettete Kommunikation Technische Universität Berlin Sommersemester 2006 RTEMS-
MehrJavakurs für Fortgeschrittene
Javakurs für Fortgeschrittene Einheit 07: Nebenläufigkeit Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Einführung in die Nebenläufigkeit und Java Thread Konzept: Motivation
MehrTafelübung zu BS 1. Prozesse, Shell
Tafelübung zu BS 1. Prozesse, Shell Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2012/bs/
MehrTafelübung zu BSRvS 1 1. Prozesse, at
Tafelübung zu BSRvS 1 1. Prozesse, at Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os http://ess.cs.tu-dortmund.de/de/teaching/ss2009/bsrvs1/
MehrProgrammiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
MehrProgrammierkurs C++ Datenstrukturen Seite 1
Programmierkurs C++ Datenstrukturen Seite 1 3 Datenstrukturen 3.1 Arrays Zur Wiederholung als Strukturelement der Programmierung gehört auf der Seite der Datenstrukturen die Liste. Eine Liste kann auf
MehrInformatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1
Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss
Mehr6 Speicherorganisation
6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrVorlesung Programmieren
Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von
MehrÜbung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012
Übung zu Grundlagen der Betriebssysteme 10. Übung 18.12.2012 Aufgabe 1 a) Was versteht man unter einem kritischen Abschnitt oder kritischen Gebiet (critical area)? b) Welche Aufgabe hat ein Semaphor? c)
MehrProgrammierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden
MehrProgrammierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
MehrÜbung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil
MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 2. Teil 18. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
Mehreinlesen n > 0? Ausgabe Negative Zahl
1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen
Mehr