14.12.2012 Aufrufe

Thread per Request Thread per Connection Thread per Object

Thread per Request Thread per Connection Thread per Object

Thread per Request Thread per Connection Thread per Object

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Softwareentwicklung in verteilten Umgebungen, Teil 7<br />

O<strong>per</strong>ating System Support<br />

(Coulouris et al., Kapitel 7)<br />

Dieter Schmalstieg<br />

Jens Grubert<br />

Partly based on material by Victor García Barrios<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Prozesse im Betriebssystem<br />

• Prozess = in Ausführung befindliches Programm<br />

– Eine bestimmte Aktivität<br />

– Eigener Adressraum pro Prozess<br />

– Schutz vor Störung d. andere Prozesse (kernel mode)<br />

• Granularität oft unzureichend<br />

– Speziell bei viel Nebenläufigkeit im verteilten System<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Ausführung<br />

Prozesse im Betriebssystem<br />

– Prozess definiert durch<br />

Execution State<br />

– Scheduling durch OS<br />

– Prozess erzeugen,<br />

umschalten ist teuer<br />

[Public Domain]<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Teure Administration von Prozessen<br />

• Betriebssystem muss Prozesse verwalten<br />

und sichern<br />

– CPU Kontext (Registerwerte, Zähler,<br />

Stackpointer, ..)<br />

– Memory Management Unit Register<br />

– Caches (TLB translation lookaside buffer, ..)<br />

• Mehr Prozesse als Hauptspeicher<br />

� auf Festplatte auslagern<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Kernel Space and User Space<br />

User Space:<br />

user applications<br />

Kernel Space<br />

Device control, Process, <strong>Thread</strong> and<br />

Memory Management, …<br />

Hardware<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Kontextumschaltungen bei Prozessen<br />

A muss deaktiviert werden:<br />

� Benutzermodus � Kernelmodus<br />

� Umschaltung zw. Prozesskontexten im Kernelraum<br />

� Kernelmodus � Benutzermodus � B aktiviert!<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Prozesse vs. <strong>Thread</strong>s<br />

• Prozess verantwortlich für<br />

– Resourcen (State)<br />

– Datenintegrität<br />

• <strong>Thread</strong>s of Execution<br />

– Innerhalb eines Prozesses<br />

– Gemeinsamer Addressraum<br />

– Gleichzeitige Ausführung<br />

– Gemeinsamer Prozess-State<br />

– Minimaler <strong>Thread</strong>-Kontext<br />

• CPU, Scheduling-Information, Synchronization<br />

– Kein Schutz der <strong>Thread</strong>s untereinander<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Multi-<strong>Thread</strong>ing Eigensschaften<br />

• <strong>Thread</strong> = unabhängiger Kontrollfluss<br />

• <strong>Thread</strong>s innerhalb Prozess teilen Daten<br />

Zugriffe der <strong>Thread</strong>s synchronisieren!<br />

• Wenn ein <strong>Thread</strong> blockiert, kann ein anderer<br />

weitermachen<br />

• <strong>Thread</strong>s können sich 1..n Prozessoren teilen<br />

• <strong>Thread</strong>-Support durch OS oder Middleware<br />

oder Programmiersprache<br />

• Kommunikation <strong>Thread</strong>-<strong>Thread</strong> billiger als IPC<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


<strong>Thread</strong>s als Softwaredesign-Werzeug<br />

• Parallelismus innerhalb der Anwendung<br />

• Server<br />

– Verwalten mehrerer eingehender Nachrichten<br />

• Client<br />

– 1 <strong>Thread</strong> für User Interface<br />

– 1 <strong>Thread</strong> erledigt Hintergrundarbeiten<br />

• Allgemein asynchrone Verarbeitung<br />

– Z.B. automatisches Sichern<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Probleme mit <strong>Thread</strong>s<br />

• Synchronisation von <strong>Thread</strong>s<br />

• Vermeiden von Deadlocks<br />

• Fairness<br />

• Effiziente Nutzung der Resourcen<br />

– Kein exzessives <strong>Thread</strong>ing<br />

– Kosten für <strong>Thread</strong> Switching<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


User Level <strong>Thread</strong>s<br />

• <strong>Thread</strong>-Bibliothek ausserhalb des Kernels<br />

– Scheduling, Speichern/Wiederherstellen<br />

– Kernel weiss nichts von <strong>Thread</strong>s<br />

• Vorteile<br />

– Schnelles Erstellen und Umschalten<br />

– Applikationsspezifisches Scheduling<br />

– OS-unabhängig<br />

• Nachteile<br />

– Blocking Call blockiert alle <strong>Thread</strong>s im Prozess<br />

– Nutzung von Multiprocessing nicht garantiert<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Kernel Level <strong>Thread</strong>s<br />

• Kernel verwaltet <strong>Thread</strong> Contexts<br />

• Scheduling für alle <strong>Thread</strong>s im Kernel<br />

• Vorteile<br />

– Ein <strong>Thread</strong> blockiert andere nicht<br />

– Multiprocessing möglich<br />

• Nachteil<br />

– Nur Kernel-Systemaufrufe als API � teuer<br />

• � Hybride User Level / Kernel Level durch<br />

möglich<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


System Call vs Local RPC vs Remote RPC<br />

(a) System call<br />

<strong>Thread</strong><br />

User Kernel<br />

Control transfer via<br />

trap instruction<br />

Control transfer via<br />

privileged instructions<br />

Protection domain<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


System Call vs Local RPC vs Remote RPC<br />

(a) System call<br />

<strong>Thread</strong><br />

(b) RPC/RMI (within one computer)<br />

User Kernel<br />

<strong>Thread</strong> 1 <strong>Thread</strong> 2<br />

User 1 Kernel<br />

User 2<br />

Control transfer via<br />

trap instruction<br />

Control transfer via<br />

privileged instructions<br />

Protection domain<br />

boundary<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


System Call vs Local RPC vs Remote RPC<br />

(a) System call<br />

<strong>Thread</strong><br />

(b) RPC/RMI (within one computer)<br />

(c) RPC/RMI (between computers)<br />

User Kernel<br />

<strong>Thread</strong> 1 <strong>Thread</strong> 2<br />

User 1 Kernel User 2<br />

Control transfer via<br />

trap instruction<br />

Control transfer via<br />

privileged instructions<br />

Protection domain<br />

boundary<br />

<strong>Thread</strong> 1 Network <strong>Thread</strong> 2<br />

User 1 User 2<br />

Kernel 1<br />

Kernel 2<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Lightweight remote procedure call<br />

Client<br />

1. Copy args<br />

User stub<br />

Kernel<br />

Shared memory statt marshalling/unmarshalling möglich<br />

A stack<br />

2. Trap to Kernel<br />

A<br />

Server<br />

4. Execute procedure<br />

and copy results<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s<br />

stub<br />

3. Upcall 5. Return (trap)


Multi-<strong>Thread</strong>ed Clients and Servers<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


<strong>Thread</strong> 1<br />

generates<br />

results<br />

Clients und Server mit <strong>Thread</strong>s<br />

T1<br />

Client<br />

<strong>Thread</strong> 2 makes<br />

requests to server<br />

Receipt &<br />

queuing<br />

<strong>Request</strong>s<br />

N threads<br />

Server<br />

Input-output<br />

• Typisch bei Client: User Interface,<br />

Verarbeitung, Netzwerkkomm.<br />

• Typisch bei Server: Mehrere Clients, mehrere<br />

Verbindungen<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Client mit Multi-<strong>Thread</strong>ing<br />

• Interaktion mit User und Server parallel<br />

– Keine Blockierung der User-Interaktion<br />

• Lokale Datenverarbeitung<br />

• Verbergen von Kommunikationslatenz<br />

– Andere Aktivität parallel durchführen<br />

– Z.B. Webbrowser: Page Refresh<br />

• Lastausgleich (erfordert Koop. des Servers)<br />

– Verbindung zu replizierten Servern<br />

– Paralleler Datentransfer<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Multi-<strong>Thread</strong>ed Server<br />

• Server kann iterativ oder multi-threaded sein<br />

Server State: ja/<strong>per</strong>-session/nein/soft<br />

• Multi-<strong>Thread</strong>ed Server Design<br />

– Einfacher strukturierter Code<br />

– Bessere Performance auf Multiprozessoren<br />

• Auffinden des Servers<br />

– Directory Service<br />

– Well known ports (0-1023)<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


<strong>Thread</strong>s als<br />

Verbindungsabstraktion<br />

• Multi-threaded Server:<br />

– Dispatcher/Worker (worker pool) Modell<br />

– Eingehende Anforderungen � Dispatcher <strong>Thread</strong><br />

(= Anprechpartner für Client)<br />

– Anforderung wird ausgewertet � Auswahl eines freien<br />

Worker <strong>Thread</strong>s � Übergabe der Anforderung<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Server <strong>Thread</strong> Design Patterns<br />

• Verschiedene Server-Architekturen<br />

• Wer erzeugt die <strong>Thread</strong>s?<br />

• Wann wird ein <strong>Thread</strong> erzeugt?<br />

• Wieviele <strong>Thread</strong>s gibt es?<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


Anzahl der <strong>Thread</strong>s<br />

• Fixe Anzahl oder dynamische Anzahl?<br />

• Erzeugung/Zerstörung von <strong>Thread</strong>s teuer<br />

• Wiederverwendung von <strong>Thread</strong>s<br />

– Idee eines <strong>Thread</strong> Pool<br />

– <strong>Thread</strong>s werden am Anfang erzeugt<br />

– Nicht benötigte <strong>Thread</strong>s werden „geparkt“<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


I/O<br />

Architekturen für <strong>Thread</strong>ed Server<br />

workers<br />

remote<br />

objects<br />

<strong>per</strong>-connection threads <strong>per</strong>-object threads<br />

remote<br />

objects<br />

a. <strong>Thread</strong>-<strong>per</strong>-request b. <strong>Thread</strong>-<strong>per</strong>-connection c. <strong>Thread</strong>-<strong>per</strong>-object<br />

remote<br />

objects<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s<br />

I/O


• Dispatcher<br />

<strong>Thread</strong> Per <strong>Request</strong><br />

– Empfängt Anfragen<br />

– Für jede Anfrage wird ein Worker<br />

<strong>Thread</strong> erzeugt/rekrutiert<br />

• Worker <strong>Thread</strong><br />

– Dekodiert Anfrage<br />

– Bearbeitet Anfrage<br />

– Beantwortet Anfrage<br />

– Ende<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


• Dispatcher <strong>Thread</strong><br />

<strong>Thread</strong> <strong>per</strong> <strong>Connection</strong><br />

– Erkennt neuen Client<br />

– Verbindet Client mit neuem/rekrutiertem Worker<br />

<strong>Thread</strong><br />

• Worker <strong>Thread</strong><br />

– Dekodiert Anfrage<br />

– Bearbeitet Anfrage<br />

– Beantwortet Anfrage<br />

– Wartet auf nächste Anfrage<br />

dieses Clients<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


<strong>Thread</strong> <strong>per</strong> <strong>Object</strong><br />

• Jeder Servant (Service-Objekt) hat<br />

– eigenen <strong>Thread</strong>, Queue<br />

• Dispatcher<br />

– Empfängt Anfrage, reiht Anfrage in<br />

richtige Queue ein<br />

• Servant <strong>Thread</strong><br />

– Liest Anfrage aus Queue<br />

– Führt Anfrage aus<br />

– Serialization auf der Queue<br />

• Nachteil: Ungenutzte <strong>Thread</strong>s wenn<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s


<strong>Thread</strong>ed Server Architekturen<br />

<strong>Thread</strong> <strong>per</strong> <strong>Request</strong> <strong>Thread</strong> <strong>per</strong> <strong>Connection</strong> <strong>Thread</strong> <strong>per</strong> <strong>Object</strong><br />

<strong>Thread</strong>erstellung teuer<br />

(besonders für wenig<br />

Rechenintensive Aufgaben)<br />

Ineffizient wenn eine<br />

Clientanfrage<br />

rechenintensiv ist aber<br />

ressourcen für verfügbare<br />

threads > clients<br />

Ineffizient wenn<br />

<strong>Object</strong>methoden<br />

rechenintensiv sind aber<br />

ressourcen für verfügbare<br />

threads > <strong>Object</strong>s<br />

Dieter Schmalstieg SVU – Processes and <strong>Thread</strong>s

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!