Lowlevel

Lowlevel => OS-Design => Thema gestartet von: gcalctool am 11. January 2010, 16:17

Titel: MemoryManagement
Beitrag von: gcalctool am 11. January 2010, 16:17
Hi Lowlevel Team!

Erstmal ein großes Lob an die Community und and das Forum! Es hat mir schon des Öfteren geholfen. Nun habe ich aber eine Frage die ich leider nicht durch suchen richtig erroieren konnte. Ich programmiere gerade ein kleines eigenes Betriebssystem um den PC besser zu verstehen. Bis jetzt hab ich alles was mit dem Speicher zu tun hat den Compiler erledigen lassen. Alles durch Strukturen etc. abgewickelt, um ja nicht mit dem Speicher direkt zu arbeiten. Ich habe quasi das Problem nur rausgeschoben. Nun bin ich beim Memory Management angelangt und das ist mein großes Problem:

Folgendes ist mein Status Quo(was den Speicher betrifft):

Nun will ich Paging verwenden (Ring 3) ich weiß auch wie ich Paging initialisiere. Folgendes weiß ich:
So. Wie finde ich nun raus, welcher Speicher frei ist, und wohin ich meine Pages mappen kann?

Wäre echt Super von euch, wenn einer sich die Zeit nehemen würde und mir das kurz erklären könnte!

Danke!
Titel: Re: MemoryManagement
Beitrag von: erik.vikinger am 11. January 2010, 18:50
Hallo,


GRUB sagt Dir genau wo welcher physischer Speicher ist. Ein Teil davon ist bereits durch Deinen Kernel belegt, das ist Dir ja exakt bekannt, und der Rest ist eben frei. Du musst nur beachten dass das alles physische und keine virtuellen Adressen sind. Diese Infos muss der Kernel-StartUp-Code in die Speicherverwaltung des Kernel injizieren und dann kanns losgehen.


Grüße
Erik
Titel: Re: MemoryManagement
Beitrag von: rizor am 11. January 2010, 19:35
Wie gesagt, informiert dich Grub über die Speichersituation.
Das einzige, das in den GRUB-Infos fehlt ist dein Kernel und deine physikalische Speicherverwaltung, falls die extern liegt.
Wenn du nun deinen Speicher verwaltest, gibt dir GRUB an wo bestimmte Module liegen, oder wo freie Blöcke liegen.
Wenn du das alles kennst, kannst du leicht deine Speicherverwaltung aufbauen.

Hoffe, dass das geholfen hat ;)

Gruß
rizor
Titel: Re: MemoryManagement
Beitrag von: gcalctool am 11. January 2010, 22:42
Hi!
Danke für eure schnellen Antworten jetzt stellt sich für mich nur noch eine Frage WIE sagt mir GRUB welche freien Plätze im Speicher vorhanden sind? Ich schätze mal er teilt mir das über den Multiboot-Header mit.
Ich glaube folgende Attribute des Headers haben etwas damit zu tun:

Gibt die MemoryMap die freien Speichernereiche an? (Bitte sagt ja :-))

Danke Lg
Titel: Re: MemoryManagement
Beitrag von: kevin am 11. January 2010, 22:51
Nun will ich Paging verwenden (Ring 3) ich weiß auch wie ich Paging initialisiere. Folgendes weiß ich:
  • Mein Kernel an der Adresse 0x100000 startet.
  • Mein Kernel 58498 Bytes groß ist
So. Wie finde ich nun raus, welcher Speicher frei ist, und wohin ich meine Pages mappen kann?
Vor allem solltest du einen Schritt nach dem anderen machen. Das heißt hier konkret, erstmal eine physische Speicherverwaltung aufsetzen und sich erst anschließend um die virtuelle (also Paging) zu kümmern. Für das physische MM gibt es im Wiki auch ein Tutorial, der anschließende Teil zu Paging fehlt leider noch.

Wie die Vorposter gesagt haben, kriegst du über Multiboot raus, was physisch belegt ist. Virtuell hast du keine Vorgaben, sondern kannst dir deine 4 GB belegen, wie du gerade Lust hast.
Titel: Re: MemoryManagement
Beitrag von: kevin am 11. January 2010, 22:52
Gibt die MemoryMap die freien Speichernereiche an? (Bitte sagt ja :-))
Ja. Schau dir mal das an: http://lowlevel.brainsware.org/wiki/index.php/Teil_7_-_Physische_Speicherverwaltung
Titel: Re: MemoryManagement
Beitrag von: rizor am 11. January 2010, 23:37
Also die Memmap gibt dir auch dir reservierten Blöcke an.
Liegt dann halt an dir, wie du mit der mb_info umgehst ;)
Titel: Re: MemoryManagement
Beitrag von: gcalctool am 12. January 2010, 06:25
Danke eure Antworten haben mir sehr geholfen!

Lg
Titel: Re: MemoryManagement
Beitrag von: rizor am 12. January 2010, 19:43
Habe da auch mal eine Frage zu der memmap.
Ist ein Speicherblock immer 4k-aligned?
Habe bisher immer vorher untersucht, ob das der Fall ist.
Bisher war es immer so.