Wie kann ich dynamisch speicher belegen?
-
Hallo,
ich programmiere gerade ein OS und für die Grafikausgabe brauch ich dann Dynamichschen speicher (weil sonst das programm mit einem Array zu grof wird)
Ich benutzte C und inline ASM. Wie kann ich jetzt den Speicher dynamisch belegen?MFG
LordHoto
-
Tja, Funktionen für das dynamische bereitstellen von Speicher fallen in das aufgabengebiet des OS, sprich das ist dein Problem (oder das deines OS).
Dein OS sollte den gesammten physikalischen Speicher erkennen, und dann einfach nach lust und Laune davon welchen zur verfügung stellen.
mfg
-bg-
-
Ist in der Tat nicht ganz unproblematisch. Für mich hat es sich als nützlich erwiesen, zwie getrennte Allocator zu schrieben. Einen Page-Allocator und dann für den Kernel erstmal einen Heap-Allocator. Das Problem ist halt am Anfang, dass du den Page-Allocator bauen musst, dieser aber Datensturkturen braucht, die von der Größe des RAMs abhängen. Ich habe da zugegeben ein wenig von Linux abgeguckt.
Man hat ja das Ende des vom Kernel belegten speichers bzw. da kann man rankommen. Zu diesem Ende zählt man dann hinzu, was man noch an Strukturenplatz braucht in abhängigkeit vom vorhandenen RAM. Dieser Punkt ist dann der Anfang des freien Speichers. Darauf aufbauend habe ich den Page-Allocator mit der Buddy-Methode aufgebaut (dürfte es viel zu im Web geben).
Der Memory-Allocator baut dann darauf auf, indem er mit Hilfe von verketteten Listen beobachtet, was im Heap frei ist und was nicht. Im Bedarfsfall kann er sich vom Page-Allocator ja ein paar neue Seiten holen. Da man für verkettete Listen aber im Prinzip ja shcon ein malloc bräuchte, aber noch keins hat, habe ich das so realisiert, dass für jedes malloc/jeden freien Bereich die ersten 8 Byte des Bereiches Belegt sind. Dort liegt nämlich ein next-Zeiger (nächster belegter/freier) Bereich und die größe des Blockes. So kann man verkettete Listen dann trotzdem gut benutzen.Zusammengefasst: Es ist nicht ganz einfach, einen Memory-Allocator zu schreiben, aber mit ein bisschen verstand, dem Web als Nachschlagewerk und ein bisschen Papier für Zeichnungen ist es ein gut schaffbares Problem.
-
Ok gut danke!
-
@TriPhonix :
hast du einen geschrieben?
Wenn ja kannst ihn mir ja mal schicken...MFG
LordHoto
PS: Email : lordhoto@msn.com oder über ICQ : 168576401
-
Original erstellt von <LordHoto>:
**@TriPhonix :hast du einen geschrieben?
Wenn ja kannst ihn mir ja mal schicken...
**Mach ich nacher mal
Aber vorsicht, das Ding funktioniert zwar einwandfrei, ist aber noch nicht ausgiebig getestet