Preemption points

Hallo Experten,
ich weiß nicht genau ob meine Frage z diesem Forum passt, also versuch ich es einfach mal hier.

Ich bin über den Ausdruck „preemption point“ gestollpert.
Kann mir jemand sagen, worum es sich dabei handelt und wo sie verwendet werden?
Durch googeln bin ich nicht schlauer geworden, weil alle Seiten die ich gefunden habe, den Begriff als bekannt vorraussetzen.
Ich hoffe ihr könnt mir da weiterhelfen.

Grüße
lignuslibri

Hallo lignuslibri,

ich weiß nicht genau ob meine Frage z diesem Forum passt,
also versuch ich es einfach mal hier.

Ich bin über den Ausdruck „preemption point“ gestollpert.
Kann mir jemand sagen, worum es sich dabei handelt und wo sie
verwendet werden?

„preemption“ ist das unterbrechen eines gerade laufenden Tasks durch das Betriebssystem, weil z.B. ein Task mit einer höheren Priorität die CPU verlangt.

„preemption point“ besagt, dass dies nur an festgelegten Stellen im Code passieren kann.

MfG Peter(TOO)

Hallo Peter

„preemption“ ist das unterbrechen eines gerade laufenden Tasks
durch das Betriebssystem, weil z.B. ein Task mit einer höheren
Priorität die CPU verlangt.

„preemption point“ besagt, dass dies nur an festgelegten
Stellen im Code passieren kann.

welche Gründe kann es den geben preemption points zu verwenden? Also vorstellbar wäre das, wenn die Tasks abwechselnd die CPU nutzen und zwar eine genau fest definierte Zeit lang, also 1s z.B… Dann gäbe es jede Sekunde einen preemption point im code. Die Anwendung ist aber nicht so optimal, denn wenn eine sehr hoch priorisierte Task kommt, muss sie im worst case eine ganze Quantenzeit (1s) warten.
Warum verwendet man sie also? Vielleicht weil sie einfach zu implementieren sind?
Und was wäre eine bessere Lösung, ich meine eine Lösung ohne preemption points? Gibt es sowas?

grüße
lignuslibri

Hallo,

das hier ist glaube ich hilfreich:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/arc…

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Peter

welche Gründe kann es den geben preemption points zu
verwenden?

z.B. wenn dein PC in den Schlaf-Modus versetzt werden soll. Also Hauptspeicher auf die Platte sichern und dann abschalten.

Hier noch ein paar Beispiele:
http://www.stud.uni-siegen.de/markus.fick/pz/pz.html

Also vorstellbar wäre das, wenn die Tasks
abwechselnd die CPU nutzen und zwar eine genau fest definierte
Zeit lang, also 1s z.B… Dann gäbe es jede Sekunde einen
preemption point im code. Die Anwendung ist aber nicht so
optimal, denn wenn eine sehr hoch priorisierte Task kommt,
muss sie im worst case eine ganze Quantenzeit (1s) warten.

Es geht einfach darum, dass ein Task nur an bestimmten Stellen, also in bestimmten Zuständen gestoppt werden darf.

Und was wäre eine bessere Lösung, ich meine eine Lösung ohne
preemption points?

Preemtion points hat man im Prinzip auch, wenn ein Task eine Meldung abholt. Ist eine Meldung in der MessageQueue vorhanden, kann der Task weiterarbeiten, bis seine Zeitscheibe abgelaufen ist. Ist die Queue leer, wird er verdrängt.

Eine andere Methode sind „critcal sections“, hier wird der Task vor einer Verdrängung geschützt. Im einfachsten Fall werden einfach die Interrupts für diesen Bereich gesperrt. Dies wird vor allem bei Realtime-Vorgängen angewendet, sehr oft in Treibern. Hier geht es auch darum, dass gewisse AUfgaben abgeschlossen sein müssen, bevor ein nächster Aufruf des Treibers erfolgen darf. Dies kann aber nicht sichergestellt werden, wenn der Treiber immer vertagt werden kann.
z.B. muss ein Diskkontroller für einen Transfer komplett programmiert werden, danach ist er busy bis der Transfer abgeschlossen ist, was der Treiber natürlich bei einem Aufruf als erstes testet, bevor er den Kontroller neu programmiert.

MfG Peter(TOO)

Danke für die Antworte.
Ich glaube, ich habs begriffen.