Forum: Mikrocontroller und Digitale Elektronik Scheduler Round Robin


von rennreh (Gast)


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

: Verschoben durch Moderator
von Random .. (thorstendb) Benutzerseite


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!

von rennreh (Gast)


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?

von Random .. (thorstendb) Benutzerseite


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.

von rennreh (Gast)


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?

von Random .. (thorstendb) Benutzerseite


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.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

rennreh schrieb:
> Wie würde sich denn
> in C eien Speicherreserivierung durch malloc verhalten?

genauso wie mit einem OS? Indem der Heap Stück für Stück vergeben wird?

Mit einem OS auf einem µC läuft die Speicherverwaltung weiterhin genau 
so ab wie ohne. Interessant wirds, wenn eine MPU oder MMU mit ins Spiel 
kommt ...

von rennreh (Gast)


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?

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Protected Mode setzt eine MPU oder MMU voraus. Es gibt (wenige) 
Cortex-M3 Microcontroller mit MPU, MMU findest du erst bei grösseren 
Cores.

User / System Level heisst nur, dass der User Code bestimmte Sachen 
nicht machen darf. Dann landet der Code im Fault.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.