- Jeder L4-Thread hat eine Zeitscheibenlänge und eine Priorität [Heiser2002][Neider2008]
- Es gibt 0..255 Prioritäten [Neider2008]
- Priorität und Zeitscheibenlänge werden vom Elternthread geerbt und können mit thread_schedule() geändert werden [Heiser2002]
- Der L4-Scheduler implementiert harte Prioritäten (niedige Prioitäten können "verhungern" [Neider2008]:
- der lauffähige Thread mit der höchsten Priorität wird gewählt [Heiser2002]
- In einer Prioritätsklasse wird round robin gewählt [Heiser2002]
- Thread kann mit yield bewußt seine Rechenzeit abgeben mit yield[Neider2008]
[Ruocco2008] bestätigt, dass der Scheduler "hardverdrahtet" im Kern ist.
Allerdings kann man auch User level Schedulers bauen, aber dies erfordert zusätzliche Kontextwechsel:
User-Level Scheduler
- Der Scheduler ist der Thread mit der höchsten Priorität im System
→ damit ist dieser immer dran.
- Der Scheduler nutzt thread_switch() um eine Zeitscheibe zuzuteilen
Idee "Preepmtions and Preempters"
(laut [Heiser2002] 2002 noch nicht implementiert und getestet)
- Verdrängungen (Preemtions) werden als time fault , d.h, wie page fault behandelt.
- Der Prementer/Preemptionhandler ist der "time-fault"-Behandler und wird per IPC aufgerufen
- Preemption Handler
- erlauben die Implementierung von Scheduling-Strategien auf Nutzerebene [Hohmuth1996 Kap. 3.3.4]
Der Preemption Handler eines Threads wird via IPC über abgelaufene Zeitscheiben informiert und der Preemptionhandler wird solange blockiert, bis der Preemption Handler mit einer Nachricht antwortet. [Glossar aus Hohmuth1996]
Links
- [Heiser2002] Uni South Wales Advanced Operation Systemes COMP9242 2002
- [Neider2008] Kit: Microkernel Construction lecture Notes 2008
Informatik- und Netzwerkverein Ravensburg e.V
Rudolf Weber