Scheduler
- Die Scheduler haben zwei grundsätzliche Aufgaben:
- Sie können Taskzustände von "blockiert" auf
"lauffähig" ändern (Hochsprach-Befehle
WHEN
...CONTINUE
,
AT
...CONTINUE
,
AFTER
...CONTINUE
,
AFTER
...RESUME
)
oder von "eingeplant" auf "lauffähig" (Hochsprach-Befehle
WHEN
...ACTIVATE
,
AT
...ACTIVATE
,
AT
...ALL
...UNTIL
...ACTIVATE
,
AFTER
...ALL
...UNTIL
...ACTIVATE
etc.)
- Ereilt eine Task eine Aktivierung, während sie läuft,
werden bis zu drei Aktivierungen samt Priorität für die Task
gepuffert.
- Der Clock-Scheduler hat darüber hinaus vier weitere:
- Er prüft, bei welcher Uhrzeit die nächste zeitliche
Einplanung fällig ist und legt diese Zeit in einer mit der
Timer-IRSR und den entsprechenden Traps gemeinsam genutzten
Zelle ab.
- Bei zyklisch eingeplanten Tasks (z.B. durch
ALL
...ACTIVATE
) berechnet der Clock-Scheduler den Zeitpunkt,
wann die Task erneut aktiviert bzw. fortgesetzt werden muß
und trägt den neuen Zeitpunkt in der Verwaltungsstruktur der Task
ein.
- Bei zyklisch eingeplanten Tasks mit Einplanungsende
(z.B. durch
ALL
...ACTIVATE
...UNTIL
)
plant er die Task nach Erreichen des Endezeitpunkts aus.
- Um Mitternacht setzt er die Uhrzeit auf 00:00:00.00000 und
erhöht die Datumszelle.
- Die Scheduler laufen nur an, wenn der "Outer-State" der
User-Mode ist. Ist der "Outer-State" der Supervisor-Mode, setzt
der gerufene Scheduler das entsprechende Scheduler-Call-Flag,
und setzt den Prozeß erster Art, auf den der System-Stack-Pointer
zeigt, fort. Dies passiert wenn:
- Sich eine IRSR durch Scheduleransprung beendet, diese IRSR
jedoch einen niederpriore IRSR unterbrochen hatte.
- Sich eine IRSR durch Scheduleransprung beendet, diese IRSR
jedoch einen Trap unterbrochen hatte.
- Nach dem Anlaufen löschen die Scheduler bei gesetzter
Interruptsperre des Prozessors ihr Scheduler-Call-Flag. Die
Scheduler beenden sich durch Aussprung in den Dispatcher.
- Die Scheduler laufen zwar im Supervisor-Mode, die
Interruptsperre des Prozessors ist allerdings fast nie gesetzt.
Während einer der Scheduler läuft, kann er erneut für den
Aufruf vorgemerkt werden bzw. sogar angesprungen werden.
- Die für die zeitlichen und zyklischen Einplanungen
vorgesehenen Traps ändern den Zeitpunkt, an dem die Timer-IRSR
in den Clock-Scheduler springt, wenn die neue Einplanung früher
eintritt als die bisher früheste zeitliche Einplanung.
- Der Clock-Scheduler wird nur aktiv, wenn die Timer-IRSR
festgestellt hat, dass die vom Clock-Scheduler bzw. von den
entsprechenden Traps vorgegebene Zeit erreicht ist.