Scheduler Round Robin

Gast #2315233
Lesenswert?

Hi,

Kleine frage bezüglich des Round-Robin-Verfahrens in einem Scheduler:

Ein Round-Robin ist im prinzip ja ein kleiner ringpuffer, welcher nach 
einer festen reihenfolge prozesse abarbeitungszeit im pozessor zur 
verfügung stellt.
findet ein prozesswechsel statt muss ja dafür gesorgt werden, dass 
register des prozessors für den jeweiligen prozess geladen werden, bzw 
für den "schlafen" gelegten prozess zu sichern.
weis jemand zufällig nach welcher strategie, die registerinhalte 
gesichert werden? ein einfacher stack nach dem lifo-prinzip kann es ja 
nicht sein, da der overhead dann dynamisch mit der prozessanzahl steigen 
würde ...
Persönliche Seite #2315239
Lesenswert?

so weit ich weiss hat jeder Task normalerweise einen TCB (Task Control 
Block), in welchem u.a. seine Register gesichert / wiederhergestellt 
werden.

Dieser Speicher muss für jede Task reserviert werden. Beim Cortex-M 
bieten sich für Taskwechsel die LDM / STM Befehle an, sowie der SysTick 
Timer für die Timeslices.

---
PS: Richtige Kommasetzung macht einen Text ungemein lesbarer!
Gast #2315298
Lesenswert?

Ok das klingt irgendwie vernünftig :)

Dann hab ich noch ne kleine Frage zum Präemptiven Multitasking:

Bei dem PM werden Prozesse dem Prozessor zeitweise zur abarbeitung 
seiner aufgaben übergeben. und je nach priorisierung und spezifischer 
zeit entzieht der betriebssystemkern dem prozess den prozessor. aber wie 
soll da eigentlich ablaufen?
wie soll der prozessor denn wissen, wann es zeit ist, den prozess 
schlafen zu legen? läuft ein timer im hintergrund, welcher beim 
prozesswechsel mit einem spezifischen werden geladen wird und bis null 
zurück zählt?
Persönliche Seite #2315300
Lesenswert?

> Beim Cortex-M bieten sich für Taskwechsel die LDM / STM Befehle an,
> sowie der SysTick Timer für die Timeslices.

Damit im Grunde schon beantwortet. Für preemptives Multitasking ist ein 
Timer erforderlich. Dieser braucht nur runterzählen zu können, über ein 
RELOAD Register verfügen und einen Interrupt auszulösen. Der Interrupt 
zündet dann den Taskwechsel.
Gast #2315308
Lesenswert?

Oki Danke :)

Ein Betriebssystem hat ja eine SPeicherverwaltung, .. und mal angenommen 
ich mache auf meinem Kontroller mal KEIN OS drauf. Wie würde sich denn 
in C eien Speicherreserivierung durch malloc verhalten?
Persönliche Seite #2315309
Lesenswert?

Zum freiwilligen Abgeben der Rechenzeit (z.B. Sleep(300), 
WaitForEvent(...) usw.) brauchst dann noch so was wie einen Softwarwe 
Interrupt, damit du wieder in den System Mode kommst und zur nächsten, 
wartenden Task umschalten kannst. Meist laufen Tasks im User Mode.

Wichtig ist auch, dass aus einer ISR heraus (z.B. UART RX) kein 
Taskwechsel erfolgen darf, das haut dir sonst den Task Stack 
durcheinander.
Gast #2315366
Lesenswert?

Ok Vielen Danke :)

Gibt es für Mikrokontroller Echzeitbetriebssystem (nicht auf x86 
basierte), welche im protected mode laufen oder ist es im embedded 
bereich eher untypisch?

ich habe gesehen, dass der cortex m3 beispielsweise mehere user level 
hat, kann es auch hier schon sein, dass es hardwaremäßig schon nicht 
möglich ist auf bestimmte bereiche im speicher zuzugreifen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren