Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

Der Scheduler implementiert die Ablaufplanung und somit die Auswahl des nÀchsten Threads. Mehr ...

#include <thread/scheduler.h>

Klassendiagramm fĂŒr Scheduler:
Zusammengehörigkeiten von Scheduler:

Öffentliche Methoden

 Scheduler ()
 Konstruktor. Mehr ...
 
void schedule ()
 Starten des Schedulings. Mehr ...
 
void ready (Thread *that)
 Anmelden eines Threads zum Scheduling. Mehr ...
 
void exit ()
 Selbstbeenden des aktuellen Threads. Mehr ...
 
void kill (Thread *that)
 Beenden eines beliebigen Threads. Mehr ...
 
void resume ()
 Auslösen eines Threadwechsels. Mehr ...
 
- Ă–ffentliche Methoden geerbt von Dispatcher
 Dispatcher ()
 Konstruktor. Mehr ...
 
Threadactive ()
 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 ...
 

Weitere Geerbte Elemente

- GeschĂŒtzte Methoden geerbt von Dispatcher
void setActive (Thread *c)
 
- GeschĂŒtzte Attribute geerbt von Dispatcher
Threadlife [CPU_MAX]
 

AusfĂŒhrliche Beschreibung

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.

Beschreibung der Konstruktoren und Destruktoren

◆ Scheduler()

Scheduler::Scheduler ( )
inline

Konstruktor.

Dokumentation der Elementfunktionen

◆ exit()

void Scheduler::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.

Noch zu erledigen:
Methode implementieren

◆ 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
thatThread, der beendet werden soll.
Noch zu erledigen:
Methode implementieren

◆ 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
thatThread, der angemeldet werden soll.
Noch zu erledigen:
Methode implementieren

◆ 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.

Noch zu erledigen:
Methode implementieren

◆ 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.

Noch zu erledigen:
Methode implementieren

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