Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Welche Threads hat das OS? Kategorie: Programmierung (von Leo - 27.06.2006 9:43)
Ich nutze:
C-Control II Station
Hallo!

Ich habe mir einen kleinen scheduler geschrieben. Dieser ruft in fixen Zeiten Funktionen auf.
Also zB. in 20ms Abstand, in 40ms, in 200, 400 und 1000 ms.
Da die grö�eren Zeiten immer ein vielfaches der der kleineren sind, wollte ich aus dem scheduler thread
aussteigen und von vorne beginnen (mit dem 20ms check) sobald eine Zeit noch nicht erreicht wurde.
(Also zB. systemzeit wäre 00140, dann werden die 20ms funktionen aufgerufen, der check, ob auch 40ms
funktionen aufgerufen werden schlägt fehl --> Ausstieg, da die anderen Zeiten auch nicht auftreten können).

Nun habe ich in meinem 1. Versuch fälschlicher Weise das Schlüsselwort yield zum Ausstieg einsetzen
wollen. (Inzwischen habe ich so umprogrammiert, das in dem Fall der thread zu Ende ist).
Das Ergebnis mit yield war allerdings, daĂ? das timing total durcheinander war .
Und nachdem ich inzwischen wei�, was yield machen sollte, fehlt mir das Verständnis, warum dem so ist.

Ich, als Otto Normal User hätte mir den Ablauf (mit yield) so vorgestellt:
*) Abfrage geht schief, yield wird ausgefĂĽhrt.
*) Thread bekommt Status suspended
*) OS sucht in thread Liste nach nächsten thread
*) Es gibt nur den Scheduler thread --> dieser bekommt wieder den Status running
Mit anderen Worten, ich hätte erwartet, das der Thread nach yield fast ohne Verzögerung weiterläuft,
solange es nur einen gibt.

Stattdessen passiert irgendwas, das ich nicht einmal nachvollziehen kann.
Zum guten SchluĂ? daher die Fragen:
*) Hat das OS vielleicht eigene threads die es neben den User threads ausfĂĽhrt und die sehr zeitintensiv sind?
*) Wie lang dauert so ein Task-Switch (thread switch ;-) )?
*) Wenn ein thread zu Ende ist: Wird automatisch ein yield ausgefĂĽhrt, bevor er wieder beginnt, oder
   läuft er wie in einer loop von vorne ab, bis die Anzahl der Befehle (gemäĂ? Priorität) erreicht sind?

GruĂ?
Leo


    Antwort schreiben


Antworten: