21
OS-Design / Re: Verwaltung von Threads
« am: 30. September 2012, 04:47 »
Ok, mein momentaner Plan sieht so aus, dass ich zwei doppelt-verkettete Listen für den Scheduler benutze. Eine mit laufenden Threads, die andere mit den blockierten. Die Listen beinhalten im Grunde nur einen Pointer, der auf die Thread-Struktur im Baum zeigt.
Um das ganze schön sauber zu halten, habe ich in den letzten Tagen an der Implementierung einer solchen Liste gebastelt und mich dabei grob an std::list aus C++ orientiert. Genau übernehmen geht ja nicht, da ich meinen Kernel ja in FreeBASIC schreibe.
Meine Liste kann momentan folgendes: push_front, push_back, pop_front und pop_back, dazu noch Konstruktor & Destruktor und das Überladen von new und delete, damit das ganze auch im Kernel klappt. Dazu hab ich noch einen Datentyp namens list_iterator gebaut, der grob C++-ähnliche Funktionen bereitstellt. Mit list.begin() und list.ending() kann ich mir dann so einen Iterator holen und mit list.remove() kann ich das Element an der Position des Iterators entfernen.
Ich denke dass es mir damit möglich sein sollte einen vernünftigen Scheduler zu bauen, und genau das werde ich dann wohl in den nächsten Tagen in Angriff nehmen.
@Dimension: Dein Vorschlag klingt auch sehr interessant. Das wäre ja dann im Endeffekt eine Verschmelzung der beiden Verwaltungsstrukturen zu einer einzigen. Bei richtiger Umsetzung würde mir das ein kmalloc() bei der Erstellung eines Threads ersparen. Eventuell werde ich auf diese Idee zurückgreifen, vor allem falls sich mein bisheriger Ansatz als zu langsam erweisen sollte (FreeBASIC ist nicht gerade ein Rennpferd, aber was solls).
Grüße,
TheThing
Um das ganze schön sauber zu halten, habe ich in den letzten Tagen an der Implementierung einer solchen Liste gebastelt und mich dabei grob an std::list aus C++ orientiert. Genau übernehmen geht ja nicht, da ich meinen Kernel ja in FreeBASIC schreibe.
Meine Liste kann momentan folgendes: push_front, push_back, pop_front und pop_back, dazu noch Konstruktor & Destruktor und das Überladen von new und delete, damit das ganze auch im Kernel klappt. Dazu hab ich noch einen Datentyp namens list_iterator gebaut, der grob C++-ähnliche Funktionen bereitstellt. Mit list.begin() und list.ending() kann ich mir dann so einen Iterator holen und mit list.remove() kann ich das Element an der Position des Iterators entfernen.
Ich denke dass es mir damit möglich sein sollte einen vernünftigen Scheduler zu bauen, und genau das werde ich dann wohl in den nächsten Tagen in Angriff nehmen.
@Dimension: Dein Vorschlag klingt auch sehr interessant. Das wäre ja dann im Endeffekt eine Verschmelzung der beiden Verwaltungsstrukturen zu einer einzigen. Bei richtiger Umsetzung würde mir das ein kmalloc() bei der Erstellung eines Threads ersparen. Eventuell werde ich auf diese Idee zurückgreifen, vor allem falls sich mein bisheriger Ansatz als zu langsam erweisen sollte (FreeBASIC ist nicht gerade ein Rennpferd, aber was solls).
Grüße,
TheThing