Besprechung Aufgabe 5 (crawl) POSIX-Threads. Problem: UNIX-Prozesskonzept ist für viele heutige Anwendungen unzureichend



Ähnliche Dokumente
U6-1 Organisatories. U6-2 Motivation von Threads. U6-3 Vergleich von Thread-Konzepten. Organisatorisches

Aufgabe 6: palim rekursive, parallele Suche nach einer Zeichenkette

U9-3 Vergleich von Thread-Konzepten. U9-2 Motivation von Threads. U9-3 Vergleich von Thread-Konzepten (2) U9-1 Überblick

Softwaresysteme I Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2007 U9.fm

POSIX-Threads. Aufgabe 9 SP - Ü U10.1

I 7. Übung. I-1 Überblick. Besprechung Aufgabe 5 (mysh) Online-Evaluation. Posix Threads. Ü SoS I I.1

U8-1 Motivation von Threads. U8-2 Vergleich von Thread-Konzepten. U8-2 Vergleich von Thread-Konzepten (2) Motivation

U8 POSIX-Threads U8 POSIX-Threads

Übungen zu Systemprogrammierung 1 (SP1)

Übungen zu Systemprogrammierung 1

Übungen zu Systemprogrammierung 1 (SP1)

Aufgabe 9: recgrep rekursive, parallele Suche (letzte Aufgabe)

Übungen zu Systemprogrammierung 1 (SP1)

User-Level-Threads (Koroutinen) Realisierung von Threads auf Benutzerebene innerhalb eines Prozesses

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

RTEMS- Echtzeitbetriebssystem

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Programmierkurs Java

Internet Explorer Version 6

How to do? Projekte - Zeiterfassung

Betriebssysteme. Dipl.-Ing.(FH) Volker Schepper

Durchführung der Datenübernahme nach Reisekosten 2011

Tipps und Tricks zu Netop Vision und Vision Pro

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes

Step by Step Webserver unter Windows Server von Christian Bartl

Dämon-Prozesse ( deamon )

Reservierungs-Assistent

Vorkurs C++ Programmierung

Anwenderdokumentation AccountPlus GWUPSTAT.EXE

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb

FastViewer Remote Edition 2.X

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

26. November EFS Übung. Ziele. Zwei Administrator Benutzer erstellen (adm_bill, adm_peter) 2. Mit adm_bill eine Text Datei verschlüsseln

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Anleitung Redmine. Inhalt. Seite 1 von 11. Anleitung Redmine

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

OLXTeamOutlook 1.5 für Outlook 2003, 2002/XP, 2000 und 97/98

Prozeß P1 Prozeß P2. Zur Synchronisation stehen den beiden Prozessen binäre Semaphore und die beiden Funktionen

Lizenzen auschecken. Was ist zu tun?

Anforderungsanalyse: Tutor

Powermanager Server- Client- Installation

Internet online Update (Internet Explorer)

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer.

Freigabemitteilung Nr. 39. Neue Funktionen adresse zurücksetzen / ändern Kennung ändern Anlegen von OCS (elektr. Postfach) Mailbenutzern

SWT II Projekt. Chat - Anwendung. Pflichtenheft 2000 SWT

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

Whitepaper. Produkt: combit Relationship Manager / address manager. Ausführen des ClientSetup per Gruppenrichtlinie

MPEG2Schnitt (Freeware) - demuxte Videodaten schneiden und verketten. framegenauer Schnitt mit Bild-Ton-Synchronisierung und Fehlerkorrekturen

Übung - Freigabe eines Ordners und Zuordnung eines Netzwerlaufwerks in Windows XP

Einführung in die Java- Programmierung

Grundlagen von Python

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Oracle APEX Installer

Tutorial -

ITT WEB-Service DEMO. Kurzbedienungsanleitung

1 Voraussetzungen für Einsatz des FRITZ! LAN Assistenten

Anleitung OpenCms 8 Inhaltstyp Kommentare

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Threads Einführung. Zustände von Threads

1. fe.logon. 1.1 Konfigurationsprogramm SetLogonParams

Übersicht... 2 Dateiupload... 3 Administratorfunktionen... 4

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

4D Server v12 64-bit Version BETA VERSION

Dokumentation zum Spielserver der Software Challenge

InterCafe Handbuch für Druckabrechnung

Installationshinweise für Serverbetrieb von Medio- Programmen

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Domänenmodell: Fadenkommunikation und -synchronisation

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

Logging, Threaded Server

Lehrer: Einschreibemethoden

Anleitung zum erstellen einer PDF-Datei aus Microsoft Word

teischl.com Software Design & Services e.u. office@teischl.com

Benutzerverwaltung Business- & Company-Paket

Einführung in die Programmierung

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Kapitel 4. Monitore und wechselseitiger Ausschluss

Xylem WebService Demo Kurzbedienungsanleitung

Inhaltsverzeichnis. 1. Empfängerübersicht / Empfänger hinzufügen 2. Erstellen eines neuen Newsletters / Mailings 3. Versand eines Newsletters

Zugriff auf die Modul-EEPROMs

TeamSpeak3 Einrichten

Softwarelösungen: Versuch 4

Datenübernahme aus Profi-Cash

Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr.

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Einführung in die Java- Programmierung

2.1 Briefkopf Klicken Sie im Menü Einstellungen auf den Button Briefkopf. Folgendes Formular öffnet sich:

ICS-Addin. Benutzerhandbuch. Version: 1.0

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Prozesse und Logs Linux-Kurs der Unix-AG

Effiziente Administration Ihrer Netzwerkumgebung

SANDBOXIE konfigurieren

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Installation Hardlockserver-Dongle

IBIS Professional. z Dokumentation zur Dublettenprüfung

pro4controlling - Whitepaper [DEU] Whitepaper zur CfMD-Lösung pro4controlling Seite 1 von 9

Transkript:

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 (virtueller Adressraum, Rechte, riorität, ) mit einem Aktivitätsträger (= Kontrollfluss, Faden oder Thread) roblem: UNIX-rozesskonzept ist für viele heutige Anwendungen unzureichend in Multiprozessorsystemen werden häufig parallele Abläufe in einem virtuellen Adressraum benötigt Aufgabe 6: palim rekursive, parallele Suche nach einer Zeichenkette zur besseren Strukturierung von roblemlösungen sind oft mehrere Aktivitätsträger innerhalb eines Adressraums nützlich typische UNIX-Server-Implementierungen benutzen die fork-operation, um einen Server für jeden Client zu erzeugen erbrauch unnötig vieler System-Ressourcen (Datei-Deskriptoren, age-table, Speicher, ) U7.1 Lösung: bei Bedarf weitere Threads in einem UNIX-rozess erzeugen U7.2 U7-2 ergleich von Thread-Konzepten U7-2 ergleich von Thread-Konzepten U7-2 ergleich von Thread-Konzepten U7-2 ergleich von Thread-Konzepten (2) User-Level Threads: Federgewichtige rozesse Realisierung von Threads auf Anwendungsebene innerhalb eines rozesses Systemkern sieht nur den rozess mit einem Kontrollfluss (Thread) Bewertung: Kernel Threads: leichtgewichtige rozesse (lightweight processes) Bewertung: + eine Gruppe von Threads nutzt gemeinsam eine Menge von Betriebsmitteln (= rozess) + Erzeugung von Threads und Umschaltung extrem billig Systemkern hat kein Wissen über diese Threads Scheduling zwischen den Threads schwierig (erdrängung meist nicht möglich - höchstens über Signal-Handler) in Multiprozessorsystemen keine parallelen Abläufe möglich + jeder Thread ist aber als eigener Aktivitätsträger dem Betriebssystemkern bekannt Kosten für Erzeugung und Umschaltung zwar erheblich geringer als bei "schwergewichtigen" rozessen, aber erheblich teuerer als bei User-Level Threads wird ein Thread wegen eines page faults oder in einem Systemaufruf blockiert, ist der gesamte rozess blockiert U7.3 U7.4

U7-3 Thread-Konzepte in UNIX/Linux U7-3 Thread-Konzepte in UNIX/Linux U7-3 Thread-Konzepte in UNIX/Linux U7-3 Thread-Konzepte in UNIX/Linux (2) verschiedene Implementierungen von Thread-aketen verfügbar reine User-Level Threads eine beliebige Zahl von User-Level Threads wird auf einem Kernel Thread "gemultiplext" (many:1) reine Kernel Threads jedem auf User Level sichtbaren Thread ist 1:1 ein Kernel Thread zugeordnet (1:1) Mischungen: eine große Zahl von User-Level Threads wird auf eine kleinere Zahl von Kernel Threads abgebildet (many:many) + User-Level Threads sind billig + die Kernel Threads ermöglichen echte arallelität auf einem Multiprozessor + wenn sich ein User-Level Thread blockiert, dann ist mit ihm der Kernel Thread blockiert in dem er gerade abgewickelt wird aber andere Kernel Threads können verwendet werden um andere, lauffähige User-Level Threads weiter auszuführen U7.5 rozesse Kern- Adressraum Benutzer- Adressraum Kernel Threads User-Level Threads Mischung (1:1) (1:many) (many:many) rogrammierschnittstelle standardisiert: threads-bibliothek IEEE-OSIX-Standard 1003.4a U7.6 (2) threads-schnittstelle (Basisfunktionen): Threaderzeugung pthread_create pthread_exit pthread_join pthread_detach Thread erzeugen & Startfunktion angeben Thread beendet sich selbst Auf Ende eines anderen Threads warten Thread in den detached-state versetzen #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); pthread_self Eigene Thread-Id abfragen pthread_yield rozessor zugunsten eines anderen Threads aufgeben thread Thread-Id Funktionen in threads-bibliothek zusammengefasst gcc -pthread attr Modifizieren von Attributen des erzeugten Threads (z. B. Stackgröße). NULL für Standardattribute. Thread wird erzeugt und ruft Funktion start_routine mit arameter arg auf. U7.7 Als Rückgabewert wird 0 geliefert. Im Fehlerfall wird errno nicht gesetzt, aber ein Fehlercode als Ergebnis zurückgeliefert. Um perror(3) verwenden zu können, muss der Rückgabewert erst in der errno gespeichert werden. U7.8

(3) Thread beenden (bei return aus start_routine oder): void pthread_exit(void *retval) Der Thread wird beendet und retval wird als Rückgabewert zurück geliefert (siehe pthread_join) Auf Thread warten, Ressourcen freigeben und exit-status abfragen: int pthread_join(pthread_t thread, void **retvalp) Wartet auf den Thread mit der Thread-ID thread und liefert dessen Rückgabewert über retvalp zurück. U7-5 Beispiel (Multiplikation Matrix mit ektor) U7-5 Beispiel (Multiplikation Matrix mit ektor) static double a[100][100], b[100], c[100]; pthread_create(tids + i, NULL, mult, (void *)(c + i)); pthread_join(tids[i], NULL); static void *mult(void *cp) { int i = (double *)cp - c; double sum = 0; Ressourcen automatisch bei Beendigung freigeben: int pthread_detach(pthread_t thread) Die mit dem Thread thread verbundenen Systemressourcen werden bei dessen Beendigung automatisch freigegeben. Der exit-status kann nicht abgefragt werden. U7.9 sum += a[i][j] * b[j]; c[i] = sum; Kein schreibender Zugriff auf ein gemeinsames Datum U7.10 U7-6 Koordinierung - Motivation static double a[100][100], sum; pthread_create(tids + i, NULL, sumrow, (void *) i); // Fehlerabfrage pthread_join(tids[i], NULL); static void *sumrow(void *arg) { int i = (int) arg; double localsum = 0; U7-6 Koordinierung - Motivation U7-7 Koordinierung - Semaphore U7-7 Koordinierung - Semaphore Zur Koordinierung von Threads können Semaphore verwendet werden UNIX stellt zur Koordinierung von rozessen komplexe Semaphor- Operationen zur erfügung Implementierung durch den Systemkern komplexe Datenstrukturen, aufwändig zu programmieren für die Koordinierung von Threads viel zu teuer Stattdessen erwendung einer eigenen Semaphorimplementierung mit atomaren ()- und ()-Operationen localsum += a[i][j]; sum += localsum; Welches roblem kann hier auftreten? U7.11 U7.12

U7-8 Koordinierung - Limitierung von Ressourcen U7-8 Koordinierung - Limitierung von Ressourcen U7-9 Koordinierung - Gegenseitiger Ausschluss U7-9 Koordinierung - Gegenseitiger Ausschluss erwendung eines zählenden Semaphors Spezialfall des zählenden Semaphors: Binärer Semaphor Beispiel: Nur zwei aktive Threads gleichzeitig gewünscht Initialisierung des Semaphors mit 2 Initialisierung des Semaphors mit 1 Beispiel: Schreibender Zugriff auf ein gemeinsames Datum Thread1 Thread2 Thread3 Thread im kritischen Abschnitt Thread1 Thread2 Thread im kritischen Abschnitt U7.13 U7.14 U7-10 Koordinierung - Signalisierung Benachrichtigung eines anderen Threads über ein Ereignis Beispiel: Bereitstehen von Zwischenergebnissen (s1) (s2) (s1) Thread1 Thread2 Thread3 (Erzeuger) (Erzeuger) (erbraucher) (s2) U7-10 Koordinierung - Signalisierung U7.15 U7-11 Koordinierung static double a[100][100], sum; static SEM* sem; sem = sem_init(1); // Fehlerabfrage sem_del(sem); static void *sumrow(void *arg) { int i = (int) arg; double localsum = 0; localsum += a[i][j]; (sem); sum += localsum; (sem); U7-11 Koordinierung U7.16

U7-12 Aufgabe 6: palim U7-12 Aufgabe 6: palim 2 crawl-thread U7-12 Aufgabe 6: palim Mehrfädige, rekursive Suche nach einer Zeichenkette in erzeichnisbäumen palim nicht ausführen auf: SunRay-Servern (faui0sr0, faui0sr1, faui0sr2, faui05, faui01) SunRay-Thin-Clients faui09er und faui01er Rechnern Durchsucht einen erzeichnisbaum rekursiv Startet für jede gefundene reguläre Datei einen eigenen grep-thread 3 grep-thread Öffnet reguläre Datei und zählt u.a. die Anzahl der Zeilen, die die Suchzeichenkette enthalten 1 Haupt-Thread (main) Startet für jeden als arameter übergebenen erzeichnisbaum einen eigenen crawl-thread Aktualisiert die Statusausgabe kontinuierlich, bis die Suche abgeschlossen ist, und terminiert anschließend den rozess U7.17 4 Semaphor-Modul Zählende /-Semaphoren zur Synchronisation von OSIX-Threads Ist vorgeben und muss nicht implementiert werden. U7.18