Beruflich Dokumente
Kultur Dokumente
Betriebssysteme (GBS)
Tafelübung 5: Synchronisation
Daniel Lohmann, Björn Fiedler
05t-sync 2018-12-14
Wintersemester 2018
https://sra.uni-hannover.de/Lehre/WS18/V_GBS
Überblick: Tafelübung 5: Synchronisation
5 Tafelübung 5: Synchronisation
5.1 Threads
5.2 Schnittstelle
5.3 Koordinierung
5.4 Formatierte Eingabe
5.5 Aufgabe 5: patric
05t-sync 2018-12-14
Motivation von Threads
User-Threads
Realisierung auf Anwendungsebene
Systemkern sieht nur einen Kontrollfluss
+ Erzeugung von Threads extrem billig
– Systemkern hat kein Wissen über diese Threads
in Multiprozessorsystemen keine parallelen Abläufe möglich
wird ein User-Thread blockiert, sind alle User-Threads blockiert
Scheduling zwischen den Threads schwierig
05t-sync 2018-12-14
User-Threads
Realisierung auf Anwendungsebene
Systemkern sieht nur einen Kontrollfluss
+ Erzeugung von Threads extrem billig
– Systemkern hat kein Wissen über diese Threads
in Multiprozessorsystemen keine parallelen Abläufe möglich
wird ein User-Thread blockiert, sind alle User-Threads blockiert
Scheduling zwischen den Threads schwierig
Kernel-Threads
+ Gruppe von Threads nutzt gemeinsam die Betriebsmittel eines Prozesses
+ jeder Thread ist als eigener Aktivitätsträger dem Betriebssystemkern bekannt
05t-sync 2018-12-14
– Kosten für Erzeugung erheblich geringer als bei Prozessen, aber erheblich
teuerer als bei User-Threads
Umschaltungskosten (“Gewichtsklasse”)
Kosten für Umschaltung zwischen Threads hängt maßgeblich von der
Anzahl der Adressraumwechsel ab.
Adressraum
Prozesse
Kern-
Scheduler
Adressraum
Benutzer-
05t-sync 2018-12-14
Umschaltungskosten (“Gewichtsklasse”)
Kosten für Umschaltung zwischen Threads hängt maßgeblich von der
Anzahl der Adressraumwechsel ab.
Kernel-Threads
(1:1)
Adressraum
Prozesse
Kern-
Scheduler Scheduler
Adressraum
Benutzer-
05t-sync 2018-12-14
Umschaltungskosten (“Gewichtsklasse”)
Kosten für Umschaltung zwischen Threads hängt maßgeblich von der
Anzahl der Adressraumwechsel ab.
Kernel-Threads User-Threads
(1:1) (1:many)
Adressraum
Prozesse
Kern-
Scheduler
Umschaltungskosten (“Gewichtsklasse”)
Kosten für Umschaltung zwischen Threads hängt maßgeblich von der
Anzahl der Adressraumwechsel ab.
Prozesse
Kern-
Scheduler Scheduler
5 Tafelübung 5: Synchronisation
5.1 Threads
5.2 Schnittstelle
5.3 Koordinierung
5.4 Formatierte Eingabe
5.5 Aufgabe 5: patric
05t-sync 2018-12-14
Pthreads-Schnittstelle
Thread erzeugen
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg);
Thread erzeugen
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg);
pthread_join(tids[i], NULL);
...
}
double sum = 0;
for(int j = 0; j < 100; j++) {
sum += a[par->index][j] * b[j];
}
c[par->index] = sum;
return NULL;
}
localSum += a[par->index][j];
sum += localSum;
return NULL;
}
localSum += a[par->index][j];
sum += localSum;
return NULL;
}
localSum += a[par->index][j];
sum += localSum;
return NULL;
} Konkurrierender Zugriff
#include<stdio.h>
#include<pthread.h>
int counter = 0;
counter++;
}
return NULL;
}
pthread_join(t1, NULL);
pthread_join(t2, NULL);
#include<stdio.h>
#include<pthread.h>
#include<semaphore.h>
#define ROUNDS 10000
sem_t counter_sem;
int counter = 0;
pthread_join(t1, NULL);
pthread_join(t2, NULL);
down()
down()
Thread wartet
up()
Thread im
kritischen Abschnitt
up()
Thread 1 Thread 2
05t-sync 2018-12-14
down()
down()
down()
Thread wartet
up()
up() Thread im
kritischen Abschnitt
up()
Thread 1 Thread 2 Thread 3
05t-sync 2018-12-14
down(s1)
up(s2)
Thread wartet
up(s1)
down(s2)
Einbinden
#include<semaphore.h>
Übersetzen mit -pthread
Semaphor erzeugen
sem_init(sem_t *sem, int pshared, unsigned int value)
up/down-Operationen
void sem_wait(sem_t *sem)
void sem_post(sem_t *sem)
Semaphor zerstören
void sem_destroy(sem_t *sem)
05t-sync 2018-12-14
Beispiel
char str[42];
scanf("%s", str);
05t-sync 2018-12-14
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.4 Formatierte Eingabe 5–20
Formatierte Eingabe mittels scanf(3)
int scanf(const char *format, ...);
Varianten: fscanf für FILE*, sscanf für char*
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.4 Formatierte Eingabe 5–20
Formatierte Eingabe mittels scanf(3)
int scanf(const char *format, ...);
Varianten: fscanf für FILE*, sscanf für char*
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.4 Formatierte Eingabe 5–20
Formatierte Eingabe mittels scanf(3)
int scanf(const char *format, ...);
Varianten: fscanf für FILE*, sscanf für char*
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.4 Formatierte Eingabe 5–20
Formatierte Eingabe mittels scanf(3) : Beispiel
char str[100];
int i;
float f;
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.4 Formatierte Eingabe 5–21
Formatierte Eingabe mittels scanf(3) : Beispiel
char str[100];
int i;
float f;
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.4 Formatierte Eingabe 5–21
Überblick: Tafelübung 5: Synchronisation
5 Tafelübung 5: Synchronisation
5.1 Threads
5.2 Schnittstelle
5.3 Koordinierung
5.4 Formatierte Eingabe
5.5 Aufgabe 5: patric
05-patric 2018-12-05
Allgemeines
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–23
Allgemeines
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–23
Allgemeines
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–23
patric: Eingabeformat am Beispiel
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–24
patric: Eingabeformat am Beispiel
0 1 2 3 4 5 6 7
05-patric 2018-12-05
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–24
patric: Eingabeformat am Beispiel
3
4 boundary points ( )
2
0 1 2 3 4 5 6 7
05-patric 2018-12-05
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–24
patric: Eingabeformat am Beispiel
3
4 boundary points ( )
2
6 interior points ( )
1
0 1 2 3 4 5 6 7
05-patric 2018-12-05
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–24
patric: Eingabeformat am Beispiel
3
4 boundary points ( )
2
6 interior points ( )
1
0 1 2 3 4 5 6 7
05-patric 2018-12-05
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–24
triangle-Modul
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–25
Aufgaben der Threads
Hauptthread
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–26
Aufgaben der Threads
Zählthread 0
ieck
Dre
Dreieck
Hauptthread Zählthread 1
Dre
ieck
Zählthread 2
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–26
Aufgaben der Threads
Zählthread 0
Zwi
ieck sch
Dre stan en-
d
Dreieck Zwischen-
Hauptthread Zählthread 1 stand
Ausgabethread
Dre en-
ieck sch
Zwi and
st
Zählthread 2
© dl,bf GBS (WS 18) 5 Tafelübung 5: Synchronisation | 5.5 Aufgabe 5: patric 5–26