FAU UnivIS
Techn. Fak. Dep. Informatik

Implementierung des Dispatchers. Mehr ...

#include <dispatcher.h>

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

Öffentliche Methoden

Threadactive ()
 
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

Implementierung des Dispatchers.

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.

Dokumentation der Elementfunktionen

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.
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.
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
threadThread, der gestartet werden soll.

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