Hi
Das Multitasking, so wie ich es derzeit implementiert habe, gefällt mir nicht mehr
Es ist meiner Meinung nach etwas umständlich, und sehr experimentell (habe einfach auf gut Glück drauf los programmiert
).
Maw.: Es wird Zeit es richtig zu machen… zumal ich derzeit mit einem recht fiesen Bug zu kämpfen habe der u.U. vielleicht sogar damit zusammenhängen könnte
…
Was mich am meisten belastet ist die Frage nach dem Timing. Mit welcher Frequenz sollten Taskwechsel stattfinden? Derzeit wird der Scheduler mit 1kHz aufgerufen. Er besteht aus etwa 80 Zeilen assembler-code.
Meine Frage ist jetzt, wie man das "Taskwechsel-Aufwand" - "Tasklaufzeit" - Verhältnis am besten wählt. Andere Kernel haben einen in C geschriebenen Scheduler. Ich mache mir sorgen dass dann 50% der Zeit nur für das Wechseln der Tasks verloren geht…
Des weiteren spiele ich mit dem Gedanken eine etwas komplexere Struktur für die Prozesse/Threads zu verwenden. Derzeit befindet sich Prozesse und Threads in einer liste die von Scheduler durchgearbeitet wird. Die einzige Beziehung zwischen Prozessen und deren Threads ist der Eintrag der parent-PID in der task-struktur des Threads. - Es ist also recht aufwändig herauszufinden ob zu einem Prozess noch Threads gehörten auf die gewartet werden muss...
Wie könnte man das am besten angehen? Einfach zu jedem Prozess/Thread eine Child-list hinzufügen? Dann hätte der Scheduler allerdings viel Arbeit.
Derzeit spiele ich mit dem Gedanken beides zu machen - also eine liste für den Scheduler, und eine für den Prozessmanager.
Wie sind eure Erfahrungen so? Wie macht ihr das?