Seite 1 von 1

Ein Heap für den Kernel

Verfasst: Do Okt 09, 2008 8:55 pm
von Dirty Oerti
Tag! :)

Im Moment programmiere ich einen Heap für den Kernel. Zuerst einmal Begriffsklärung:
Ein Heap bezeichnet in diesem Fall eine Datenstruktur mit zugehörigen Funktionen, die zur Speicherverwaltung genutzt wird (malloc() und free() ).

Es könnte sein, dass bei einigen der Verdacht aufkommt "Das hatten wir schon". Ist nicht ganz richtig.
Es ging schonmal um Speicherverwaltung.
"Damals" ging es aber um die unterste Ebene der Speicherverwaltung. Man kann nur einzelne 4KB Blöcke als benutzt oder als frei markieren.
Jetzt, da Paging aktiv ist, kann ich den virtuellen Speicher verwalten.
Das mache ich mit dem angesprochenen Heap.
Solche Funktionen (nur viel besser) kennt ihr aus der GNU stdlib. Der dort eingebaute Heap ist von Doug Lea.

Leider fehlt mir bis jetzt eine gute Möglichkeit, unbenutzte Blöcke zu verwalten.
Deswegen überlasse ich das erstmal einem geordneten Array.

MfG
Daniel

Re: Ein Heap für den Kernel

Verfasst: Sa Okt 11, 2008 2:12 pm
von Dirty Oerti
Hmm... :D

Ich raff's nicht. Ein erster Test und KEIN Fehler..
Das ist mir ja noch nie untergekommen.

Der Heap funktioniert jetzt also.

Wie das Verhalten im Grenzfall ist konnte ich noch nicht testen.
Es ist aber auch nicht sonderlich gut eingebaut (der Heap ist statisch und verändert seine Größe nicht).
Heißt wenn der Heap voll ist, dann gibt's eine Fehlermeldung.
Ansonsten..gibt's nur einen Punkt, an dem ein Fehler auftauchen könnte.
Ich hoffe aber, dass der Punkt nicht erreicht wird. Sowie ich das sehe, kann dieser Punkt auch nicht erreicht werden.

Naja, ich lad's mal hoch ins SVN :)
*edit* Hochgeladen
Revision 36
*/edit*

MfG
Daniel

Re: Ein Heap für den Kernel

Verfasst: Do Okt 16, 2008 5:51 pm
von Dirty Oerti
Haha :)
*strike!*

Als der Heap geladen wurde hat es in bochs immer etwas gedauert, bis der Code danach ausgeführt wurde.
Ich dachte erst es liegt am PageFault Handler (wird da sehr oft aufgerufen).
Jetzt weiß ich's besser:

Der komplette Speicher des Heaps wird auf 0 gesetzt (zur Sicherheit).
Doof nur, dass ich das (aus Versehen) in Byteschritten gemacht habe.
Jetzt habe ich die entsprechende Funktion vereinfacht und es werden nun 4 Byte auf einmal auf 0 gesetzt.

:)

(ist in der nächsten Revision mit drinnen)

Re: Ein Heap für den Kernel

Verfasst: Do Okt 16, 2008 6:41 pm
von nufan
DirtyOerti hat geschrieben:(ist in der nächsten Revision mit drinnen)
Wie wär's mit einem eigenem Thread quasi als Changelog?

Re: Ein Heap für den Kernel

Verfasst: Do Okt 16, 2008 7:00 pm
von Dirty Oerti
dani93 hat geschrieben:
DirtyOerti hat geschrieben:(ist in der nächsten Revision mit drinnen)
Wie wär's mit einem eigenem Thread quasi als Changelog?
Wäre ne Idee, denke ich^^

Re: Ein Heap für den Kernel

Verfasst: Do Okt 16, 2008 7:36 pm
von nufan
Dirty Oerti hat geschrieben:
dani93 hat geschrieben:
DirtyOerti hat geschrieben:(ist in der nächsten Revision mit drinnen)
Wie wär's mit einem eigenem Thread quasi als Changelog?
Wäre ne Idee, denke ich^^
War nur ein Vorschlag, aber so steht überall verteilt was es neues gibt. Wenn das alles in einem Thema wäre, wäre es praktischer. ;)

Re: Ein Heap für den Kernel

Verfasst: Do Okt 16, 2008 8:17 pm
von Dirty Oerti
Ja, du hast Recht.
Ich werde demnächst so ein Thema hier einrichten.
Wenn das nächste größere Update ansteht :)

Re: Ein Heap für den Kernel

Verfasst: Do Okt 16, 2008 8:32 pm
von nufan
DirtyOerti hat geschrieben:Wenn das nächste größere Update ansteht :)
*gespannt guck* :D

Re: Ein Heap für den Kernel

Verfasst: Do Okt 16, 2008 8:34 pm
von Dirty Oerti
dani93 hat geschrieben:
DirtyOerti hat geschrieben:Wenn das nächste größere Update ansteht :)
*gespannt guck* :D
Das nächste ist entweder Multitasking (einfaches) oder verbessertes Paging...