Der Scheduler implementiert die Ablaufplanung und somit die Auswahl des nächsten Threads.
Mehr ...
#include <scheduler.h>
Der Scheduler implementiert die Ablaufplanung und somit die Auswahl des nächsten Threads.
- Zu beachten
- Der Scheduler verwaltet die Ready-Liste (ein privates Queue Objekt der Klasse), also die Liste der lauffähigen Threads. Die Liste wird von vorne nach hinten abgearbeitet. Dabei werden Threads, die neu im System sind oder den Prozessor abgeben, stets an das Ende der Liste angefügt.
◆ Scheduler()
◆ block()
Mit dieser Methode kann sich der laufende Thread selbst blockieren.
Er gibt also den Prozessor an den nächsten lauffähigen Thread ab ohne sich selbst auf die Ready-Liste zu setzen. Stattdessen wird er der Liste des übergebenen Waitingroom hinzugefügt und es wird vermerkt, in welchem Waitingroom-Objekt er wartet.
- Parameter
-
waitingroom | Wartezimmer, in welchem der Thread warten möchte. |
◆ exit()
Selbstbeenden des aktuellen Threads.
Hiermit kann sich ein Thread selbst beenden. Er wird nun nicht wieder an das Ende der Ready-Liste angefügt. Statt dessen wird nur der erste Thread von der Ready-Liste heruntergenommen und aktiviert.
◆ isEmpty()
bool Scheduler::isEmpty |
( |
| ) |
|
|
inline |
Gibt an, ob die Ready-Liste leer ist.
◆ kill()
void Scheduler::kill |
( |
Thread * |
that | ) |
|
Beenden eines beliebigen Threads.
Mit dieser Methode kann ein Thread einen anderen (that) beenden. In OOStuBS genügt es einfach den Thread that von der Ready-Liste zu entfernen. Er wird somit nie wieder vom Prozessor ausgeführt werden. In MPStuBS ist die Implementierung etwas kniffliger, da der Thread that auch während der Ausführung von kill auf anderen Prozessoren laufen kann. Wird that nicht in der Ready-Liste gefunden, so muss bei ihm vermerkt werden, dass der Thread beendet werden soll. Dies muss in resume überprüft werden, bevor ein Thread wieder in die Ready-Liste eingetragen wird.
- Parameter
-
that | Thread, der beendet werden soll. |
◆ ready()
void Scheduler::ready |
( |
Thread * |
that | ) |
|
Anmelden eines Threads zum Scheduling.
Mit dieser Methode wird der Thread that beim Scheduler angemeldet. Er wird an das Ende der Ready-Liste angefügt.
- Parameter
-
that | Thread, der angemeldet werden soll. |
◆ resume()
void Scheduler::resume |
( |
| ) |
|
Auslösen eines Threadwechsels.
Hiermit kann ein Threadwechsel ausgelöst werden, ohne dass der aufrufende Thread wissen muss, welche anderen Thread Objekte im System existieren und welcher davon sinnvollerweise aktiviert werden sollte. Diese Entscheidung trifft der Scheduler anhand der Einträge seiner Ready-Liste. Der Scheduler soll den gerade laufenden Thread an das Ende der Ready-Liste anfügen und den ersten Thread in der Ready-Liste aktivieren.
◆ schedule()
void Scheduler::schedule |
( |
| ) |
|
Starten des Schedulings.
Diese Methode setzt das Scheduling in Gang, indem der erste Thread von der Ready-Liste entfernt und aktiviert wird. In MPStuBS muss diese Methode auf jeder CPU einmal aufgerufen werden, um auf dem jeweiligen Prozessor den ersten Thread einzulasten.
◆ set_idle_thread()
void Scheduler::set_idle_thread |
( |
int |
cpuid, |
|
|
Thread * |
thread |
|
) |
| |
|
inline |
Setzt einen dedizierten Idle-Thread für die entsprechende CPU.
- Parameter
-
cpuid | ID der CPU, für die ein Idlethread registriert werden soll. |
thread | Zeiger auf das Thread-Objekt des Idlethreads. |
◆ wakeup()
void Scheduler::wakeup |
( |
Thread * |
customer | ) |
|
Mit dieser Methode kann ein schlafender Thread geweckt werden.
Das heißt, dass er wieder auf die Ready-Liste gesetzt wird. Dabei sollte auch markiert werden, dass der Thread nun auf kein Ereignis mehr wartet.
- Parameter
-
customer | Schlafender Thread, der geweckt werden soll. |
Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: