Implementierung des Dispatchers. Mehr ...
#include <dispatcher.h>


Öffentliche Methoden | |
Dispatcher () | |
Konstruktor. Mehr ... | |
Thread * | active () |
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 | |
Thread * | life [CPU_MAX] |
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.
Beschreibung der Konstruktoren und Destruktoren
|
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
|
inline |
Hiermit kann abgefragt werden, welche Koroutine gerade im Besitz des aktuellen Prozessors ist.
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
-
next Nä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
-
first Erste auf dem aktuellen Prozessor zu startende Koroutine im System.
|
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
-
thread Thread, der gestartet werden soll.
Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien:
- thread/dispatcher.h
- thread/dispatcher.cc