Der Dispatcher lastet Threads ein und setzt damit die Entscheidungen der Ablaufplanung durch.
Mehr ...
#include <thread/dispatcher.h>
|
| 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 ...
|
|
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.
◆ 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.
- Noch zu erledigen:
- Konstruktor implementieren
◆ active()
Thread* Dispatcher::active |
( |
| ) |
|
|
inline |
Hiermit kann abgefragt werden, welche Koroutine gerade im Besitz des aktuellen Prozessors ist.
- Noch zu erledigen:
- Methode implementieren
◆ 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
-
next | Nächste auszuführende Koroutine. |
- Noch zu erledigen:
- Methode implementieren
◆ go()
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. |
- Noch zu erledigen:
- Methode implementieren
◆ 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
-
object | Thread, der gestartet werden soll. |
- Noch zu erledigen:
- Methode implementieren
Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: