OOStuBS/MPStuBS
|
Der Dispatcher lastet Threads ein und setzt damit die Entscheidungen der Ablaufplanung durch. 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 ... | |
Der Dispatcher lastet Threads ein und setzt damit die Entscheidungen der Ablaufplanung durch.
|
inline |
Konstruktor.
Der Konstruktor initialisiert den oder die Life-Pointer mit Null, um anzuzeigen, dass auf der jeweiligen CPU noch keine Koroutine bekannt ist.
|
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.
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.
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.
object | Thread, der gestartet werden soll. |