Der Sieg ist MEIN !
Ich glaube ich habe die Ursache für so einige Probleme gefunden:
Der Heap sollte ja ursprünglich so ca 2,5 MB groß sein. Das würde heißen, dass der Heap so ca 3 MB verbrauchen würde. Nun war das Problem, dass ich mich anscheinend mit den Stellen "etwas" vertan hatte...anstatt 3 MB zu besetzen waren für den Heap 30 MB angesetzt...außerdem habe ich in der Zählweise beim Allokieren einen Fehler drinngehabt. Das führte dazu, dass die 4 fache Menge des Speichers angefordert wurde: 120 MB alleine für den Heap.
Bei insgesamt 128 MB etwas problematisch...
Dann wurde zunächst das aber gar nicht verbraucht.
Grund war:
Anstatt von
MapVirtPhys(tmp,(unsigned int)K_alloc(),PG_RW | PG_USER | PG_PRESENT);
habe ich
MapVirtPhys(tmp,(unsigned int)K_alloc,PG_RW | PG_USER | PG_PRESENT);
geschrieben.
Das führte dazu, dass der komplette Heap auf den Codebereich, in dem die Funktion K_alloc liegt gemappt wurde...
also mitten hinein in den Kernelcode.
Bei einem Zugriff auf diese Strukturen (wie z.B. beim Taskwechsel...) wurde damit auch der Code an dieser Stelle verändert. War in dem Bereich also etwas, was nocheinmal benutzt wurde (K_alloc), dann ist Käse und Wurst dabei herausgekommen...
Es kann wieder vorwärts gehen..