14.01.2015 Aufrufe

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

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.

5 Kontroll- und Verwaltungsschicht<br />

5.4.4 Threadverwaltung<br />

Die Threadverwaltung ist zuständig für das Anlegen neuer und die Verwaltung existierender Threads.<br />

Sie lässt sich <strong>in</strong> vier Bauste<strong>in</strong>e aufteilen: die Threaderzeugung, die Threadsteuerung, die E<strong>in</strong>planung<br />

(Scheduler) und die E<strong>in</strong>lastung (Dispatcher).<br />

5.4.4.1 Threaderzeugung<br />

Die Threaderzeugung wird aufgerufen, wenn e<strong>in</strong> neuer Aktivitätsträger benötigt wird. Beim Erstellen<br />

e<strong>in</strong>es neuen Threads muss e<strong>in</strong> Speicherbereich angefordert werden, der dem neuen Aktivitätsträger als<br />

Stack zugeordnet wird. Außerdem wird e<strong>in</strong>e Verwaltungsstruktur erzeugt und <strong>in</strong>itialisiert, welche zum<br />

Beispiel e<strong>in</strong>en Verweis auf den Stack enthält und Speicher, um den Inhalt der Register aufzunehmen,<br />

während der Aktivitätsträger nicht ausgeführt wird.<br />

Die Threaderzeugung wird hauptsächlich von der Anwendung beziehungsweise von der Ausführungse<strong>in</strong>heit<br />

aufgerufen. Neben der Anwendung kann es auch e<strong>in</strong>ige <strong>in</strong>terne Systemdienste geben, die<br />

unabhängig von der Anwendung laufen und daher auch e<strong>in</strong>en Aktivitätsträger erzeugen. E<strong>in</strong> Beispiel<br />

hierfür ist die Speicherbere<strong>in</strong>igung, welche zwar nicht unbed<strong>in</strong>gt parallel zur Anwendung ausgeführt<br />

wird, diese jedoch unterbricht und daher meist e<strong>in</strong>en eigenen Ausführungskontext besitzt.<br />

Auf die Threaderzeugung kann vollständig verzichtet werden, wenn zur Laufzeit ke<strong>in</strong>e neuen<br />

Aktivitätsträger erzeugt werden. Das lässt sich durch statische Analyse der Anwendung feststellen.<br />

Enthält die Anwendung ke<strong>in</strong>en Code, um Thread-Objekte zu erzeugen, so nutzt die Anwendung nur<br />

e<strong>in</strong>en Aktivitätsträger. Die Analyse gilt jedoch nur für den Zustand der Anwendung zum Zeitpunkt der<br />

Überprüfung. Wird später Code h<strong>in</strong>zugefügt, so können dort neue Threads erzeugt werden. Dann muss<br />

die Threaderzeugung zum System h<strong>in</strong>zugefügt werden.<br />

Da Threads häufig nur während des Startens e<strong>in</strong>er Anwendung erzeugt werden, bietet es sich an, die<br />

Threaderzeugung nach der Startphase als externen Dienst auszulagern. Auf diese Weise muss der Code<br />

zur Erzeugung und Initialisierung neuer Threads nicht auf jedem Knoten vorhanden se<strong>in</strong>. Dennoch<br />

können neue Threads erzeugt werden, falls es die Anwendung benötigt.<br />

5.4.4.2 Threadsteuerung<br />

Die Threadsteuerung bietet Möglichkeiten, den Zustand e<strong>in</strong>es Aktivitätsträgers zu bee<strong>in</strong>flussen. Die<br />

wichtigsten Aktionen s<strong>in</strong>d daher das Anhalten e<strong>in</strong>es Threads und das Fortsetzen e<strong>in</strong>es zuvor angehaltenen<br />

Threads. Daneben können noch e<strong>in</strong>ige weitere Parameter e<strong>in</strong>gestellt werden, wie beispielsweise<br />

die Priorität e<strong>in</strong>es Aktivitätsträgers. Die Threadsteuerung verwaltet den Zustand der Threads und<br />

kommuniziert mit dem Scheduler, um lauffähige Threads der E<strong>in</strong>planung zur Verfügung zu stellen.<br />

Abbildung 5.9: Abhängigkeiten der Threadsteuerung<br />

Verwendung f<strong>in</strong>det die Threadsteuerung <strong>in</strong> der Realisierung der Klasse java.lang.Thread.<br />

Daher ist die Anwendung und somit die Ausführungse<strong>in</strong>heit der hauptsächliche Nutzer dieses Dienstes.<br />

Die Threadsteuerung wird auch noch <strong>in</strong>direkt über die Koord<strong>in</strong>ierungsmechanismen benötigt, da <strong>in</strong><br />

diesem Zusammenhang ebenfalls Aktivitätsträger blockiert und fortgesetzt werden.<br />

Da die Threadsteuerung hauptsächlich als direkter Dienst von der Anwendung genutzt wird, ist<br />

sie nur erforderlich, wenn die Anwendung sie explizit referenziert. Aufrufe an die Threadsteuerung<br />

114

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!