Friedrich-Alexander-Universität UnivisSuche FAU-Logo
Techn. Fakultät Willkommen am Department Informatik FAU-Logo
Logo I4
Lehrstuhl für Informatik 4
Betriebssysteme
 
  Vorlesung
    - UnivIS-Infos
    - Inhalt
    - Folien
 
  Übungen
    - UnivIS-Infos
    - Inhalt
    - Ergänzendes Material
    - Terminübersicht
    - Aufgaben
       * Umgebung
       * Typische Fehler
       * Aufgabe 1
          Dokumentation
       * Aufgabe 2
          Dokumentation
       * Aufgabe 3
          Dokumentation
       * Aufgabe 4
          Dokumentation
       * Aufgabe 5
          Dokumentation
       * Aufgabe 6
          Dokumentation
       * Aufgabe 7
          Dokumentation
 
  Evaluation
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2009/10  >  Betriebssysteme  >  Ãœbungen  >  Aufgaben  >  Aufgabe 6

Scheduler Klassenreferenz

Implementierung des Schedulers. Mehr ...

#include <scheduler.h>

Klassendiagramm für Scheduler:
Zusammengehörigkeiten von Scheduler:

Aufstellung aller Elemente

Öffentliche Methoden

 Scheduler ()
 Konstruktor.
void schedule ()
 Starten des Schedulings Diese Methode setzt das Scheduling in Gang, indem der erste Prozess 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 Prozess einzulasten.
void ready (Entrant &that)
 Anmelden eines Prozesses zum Scheduling.
void exit ()
 Selbstbeenden des aktuellen Prozesses.
void kill (Entrant &that)
 Beenden eines beliebigen Prozesses.
void resume ()
 Auslösen eines Prozesswechsels.
void set_idle_thread (int cpuid, Entrant *thread)
 Setzt einen dedizierten Idle-Thread für die entsprechende CPU.
void sleep_until_IRQ ()
 Legt den aktuellen Prozessor schlafen, solange keine Prozesse vorhanden sind.


Ausführliche Beschreibung

Implementierung des Schedulers.

Der Scheduler verwaltet die Ready-Liste (ein privates Queue Objekt der Klasse), also die Liste der lauffähigen Prozesse (Entrant Objekte). Die Liste wird von vorne nach hinten abgearbeitet. Dabei werden Prozesse, die neu im System sind oder den Prozessor abgeben, stets an das Ende der Liste angefügt.


Dokumentation der Elementfunktionen

void Scheduler::ready ( Entrant that  ) 

Anmelden eines Prozesses zum Scheduling.

Mit dieser Methode wird der Prozess that beim Scheduler angemeldet. Er wird an das Ende der Ready-Liste angefügt.

Parameter:
that Prozess, der angemeldet werden soll.

void Scheduler::exit (  ) 

Selbstbeenden des aktuellen Prozesses.

Hiermit kann sich ein Prozess selbst beenden. Er wird nun nicht wieder an das Ende der Ready-Liste angefügt. Statt dessen wird nur der erste Prozess von der Ready-Liste heruntergenommen und aktiviert.

Erneute Implementation in Guarded_Organizer und Guarded_Scheduler.

void Scheduler::kill ( Entrant that  ) 

Beenden eines beliebigen Prozesses.

Mit dieser Methode kann ein Prozess einen anderen (that) beenden. In OOStuBS genügt es einfach den Prozess 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 Prozess that auch während der Ausführung von kill auf anderen Prozessoren laufen kann. Wird that nicht in der Ready-Liste gefunden, so muss in seinem Prozesskontrollblock (Coroutine) vermerkt werden, dass der Prozess beendet werden soll. Dies muss in resume überprüft werden, bevor ein Prozess wieder in die Ready-Liste eingetragen wird.

Parameter:
that Prozess, der beendet werden soll.

void Scheduler::resume (  ) 

Auslösen eines Prozesswechsels.

Hiermit kann ein Prozesswechsel ausgelöst werden, ohne dass der aufrufende Entrant wissen muss, welche anderen Entrant 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 Prozess an das Ende der Ready-Liste anfügen und den ersten Prozess in der Ready-Liste aktivieren.

Erneute Implementation in Guarded_Organizer und Guarded_Scheduler.

void Scheduler::set_idle_thread ( int  cpuid,
Entrant thread 
) [inline]

Setzt einen dedizierten Idle-Thread für die entsprechende CPU.

In OOStuBS benötigt man keine dedizierten Idle-Prozesse; deswegen ist diese Methode nur in MPStuBS notwendig. Dort vereinfachen dedizierte Idle-Prozesse das Design und die Implementierung erheblich.

Parameter:
cpuid ID der CPU, für die ein Idlethread registriert werden soll.
thread Zeiger auf das Entrant-Objekt des Idlethreads.

void Scheduler::sleep_until_IRQ (  ) 

Legt den aktuellen Prozessor schlafen, solange keine Prozesse vorhanden sind.

Diese Funktion legt den aktuellen Prozessor schlafen, solange die Ready-Liste leer ist. Wenn ein Interrupt auftritt, und deshalb die CPU aus dem Schlafmodus aufwacht, muss geprüft werden, ob wieder Prozesse bereit sind. Ist dies der Fall, so kann wieder die reguläre Prozessausführung fortgesetzt werden. In MPStuBS wird diese Funktion von IdleThread verwendet. In OOStuBS werden keine dedizierten Idlethreads benötigt, weswegen auch diese Funktion überflüssig ist.

Erneute Implementation in Guarded_Organizer.


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien:
  Impressum   Datenschutz Stand: 2010-07-19 12:35   BO, DL