Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

Der Dispatcher lastet Threads ein und setzt damit die Entscheidungen der Ablaufplanung durch. Mehr ...

#include <thread/dispatcher.h>

Klassendiagramm für Dispatcher:
Zusammengehörigkeiten von Dispatcher:

Öffentliche Methoden

 Dispatcher ()
 Konstruktor. Mehr ...
 
Threadactive ()
 Hiermit kann abgefragt werden, welche Koroutine gerade im Besitz des aktuellen Prozessors ist. Mehr ...
 
void go (Thread *first)
 Mit dieser Methode wird die Koroutine first im Life-Pointer des aktuellen Prozessores vermerkt und gestartet. Mehr ...
 
void dispatch (Thread *next)
 Diese Methode setzt den Life-Pointer des aktuellen Prozessors auf next und führt einen Koroutinenwechsel vom alten zum neuen Life-Pointer durch. Mehr ...
 

Öffentliche, statische Methoden

static void kickoff (Thread *object)
 Funktion zum Starten eines Threads. Mehr ...
 

Geschützte Methoden

void setActive (Thread *c)
 

Geschützte Attribute

Threadlife
 

Ausführliche Beschreibung

Der Dispatcher lastet Threads ein und setzt damit die Entscheidungen der Ablaufplanung durch.

Zu beachten
Der Dispatcher verwaltet den Life-Pointer, der die jeweils aktive Koroutine angibt und führt die eigentlichen Prozesswechsel durch. In der Uniprozessorvariante wird nur ein einziger Life-Pointer benötigt, da lediglich ein Prozess auf einmal aktiv sein kann. Für die Mehrprozessorvariante wird hingegen für jede CPU ein eigener Life-Pointer benötigt.

Beschreibung der Konstruktoren und Destruktoren

◆ Dispatcher()

Dispatcher::Dispatcher ( )
inline

Konstruktor.

Der Konstruktor initialisiert den oder die Life-Pointer mit Null, um anzuzeigen, dass auf der jeweiligen CPU noch keine Koroutine bekannt ist.

Dokumentation der Elementfunktionen

◆ active()

Thread* Dispatcher::active ( )
inline

Hiermit kann abgefragt werden, welche Koroutine gerade im Besitz des aktuellen Prozessors ist.

◆ dispatch()

void Dispatcher::dispatch ( Thread next)

Diese Methode setzt den Life-Pointer des aktuellen Prozessors auf next und führt einen Koroutinenwechsel vom alten zum neuen Life-Pointer durch.

Parameter
nextNächste auszuführende Koroutine.

◆ go()

void Dispatcher::go ( Thread first)

Mit dieser Methode wird die Koroutine first im Life-Pointer des aktuellen Prozessores vermerkt und gestartet.

Parameter
firstErste auf dem aktuellen Prozessor zu startende Koroutine im System.

◆ kickoff()

void Dispatcher::kickoff ( Thread object)
static

Funktion zum Starten eines Threads.

Für die allererste Aktivierung eines Threads muss eine "Rücksprungadresse" zu einer Funktion bekannt sein, von der aus dann der Übergang von der C- zur C++-Ebene erfolgen kann. Hierfür dient die Funktion kickoff.

Aktivierung von kickoff Bei der Initialisierung eines Threads mit Hilfe der Funktion toc_settle() wird nicht nur die Struktur toc für den ersten Threadwechsel vorbereitet, sondern auch die Adresse der Funktion kickoff als Rücksprungadresse auf den Stack gelegt. Beim ersten Threadwechsel mit toc_switch wird daher an den Anfang von kickoff "zurück"gesprungen, womit die Ausführung beginnt.

Diese Methode realisiert den Sprung von der C-Ebene zur C++-Ebene, indem sie ganz einfach die Methode action() des als Parameter vorgefundenen Threadobjektes aufruft.

Hinweis Da diese Funktion nicht wirklich aufgerufen, sondern nur durch eine geschickte Initialisierung des Stacks der Koroutine angesprungen wird, darf sie nie terminieren. Anderenfalls würde ein sinnloser Wert als Rücksprungadresse interpretiert werden und der Rechner abstürzen.

Parameter
objectThread, der gestartet werden soll.

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: