Autor Thema: Physische Speicherverwaltung - Adresse 0x0  (Gelesen 6109 mal)

iksnagreb

  • Beiträge: 28
    • Profil anzeigen
Gespeichert
« am: 16. October 2012, 20:52 »
Hallo,
ich bin gerade dabei, bei meinem Kernel die Physische Speicherverwaltung zu schreiben.
Es ist ja so, dass wenn kein Speicher mehr frei ist NULL zurückgegeben wird, wenn jedoch der Speicher an der Adresse 0x0 frei ist wird ja auch 0 zurückgegeben.
Ist es richtig einfach die Adresse 0x0 immer als belegt zu markieren :?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 16. October 2012, 21:20 »
Das wäre eine Möglichkeit, und ausreichend, wenn sie dir als die einfachste erscheint. Die paar (Kilo)bytes tun keinem weh.

Eine Alternative wäre die physische Speicherverwaltung so aufzubauen, dass sie nur ganze Seiten zurück gibt. Das heißt die Rückgabewerte sind alles Vielfache von 4096 (4 KByte). Falls du irgendwann Paging implementierst, wirst du nur noch solche Adressen wollen. Dann würde sich auch eine Adresse anbieten, die kein Vielfaches von 4096 ist, zum Beispiel -1 (= 0xffffffff). Das Konzept funktioniert auch, wenn du kleinere Vielfache als 4096 zurückgibst, um genau zu sein alles größer als 1.
« Letzte Änderung: 16. October 2012, 21:22 von Jidder »
Dieser Text wird unter jedem Beitrag angezeigt.

iksnagreb

  • Beiträge: 28
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 16. October 2012, 21:27 »
Ich glaube, ich habe die Physische Speicherverwaltung so aufgebaut, das sie ganze Seiten zurückgibt.

Seite 0 hat die Adresse 0x0000 also 0
Seite 1                        0x1000 also 4096
Seite 2                        0x2000 also 8192
usw.

Oder ist das so falsch?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 16. October 2012, 22:43 »
Das ist richtig und so würde ich das auch machen.

Ich hab gerade meinen Post nochmal gelesen. Der erste Satz hätte vielleicht besser so lauten sollen: "Eine Alternative bietet sich an, wenn du die physische Speicherverwaltung so aufbaust, dass sie nur ganze Seiten zurück gibt." (Falls dich das verwirrt hat.)
« Letzte Änderung: 16. October 2012, 22:47 von Jidder »
Dieser Text wird unter jedem Beitrag angezeigt.

iksnagreb

  • Beiträge: 28
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 16. October 2012, 22:59 »
Vielen Dank.
Ich habe es dann so gemacht die Adresse 0x0000 als belegt zu markieren.

Jetzt habe ich noch zwei fragen:
1. Was muss ich noch als belegt markieren (Bitmap, Multiboot-Structure) und wie ermittle ich die entsprechenden Adressen?
2. Kann ich den Eintrag mbs_mem_upper aus der Multiboot-Structure dazu benutzen die gesamt Größe das Speichers zu ermitteln?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 16. October 2012, 23:41 »
Zu 1.: Du musst alles reservieren, was du nicht überschreiben willst. Darunter fallen (vermutlich) die Multibootstruktur selbst, die Informationen über die Module (gegebenfalls inklusive Kommandozeile der Module), eventuell die Memory Map, und natürlich die Module selbst. Außerdem der Kernel (dazu steht was im Tutorial). Und natürlich die Bitmap, wenn du die dynamisch anlegst, und alles andere was du dynamisch anlegst. Bei manchen stehen ja die Adressen explizit dran (Module, ...), bei anderen ist es halt mbs_mmap_addr bis mbs_mmap_length+mbs_mmap_length-1 und mbs_mods_addr bis mbs_mods_addr+mbs_mods_count*sizeof(struct multiboot_module)-1 oder so. Wenn du den Virtual 8086 Mode nutzen willst, außerdem die IVT (0 bis 0x400-1), die BDA (0x400 bis 0x500-1) und die EBDA (Adresse steht in der BDA, als Endadresse kannst du z.B. 640 KB-1 annehmen).

2. Nein, der Wert davon ist im Allgemeinen kleiner als die Größe des Speichers. Wenn du den Wert verwendest, kannst du also nicht gesamten Speicher nutzen. Ein bisschen was dazu hab ich kürzlich hier geschrieben: http://forum.lowlevel.eu/index.php?topic=3104.0
« Letzte Änderung: 16. October 2012, 23:49 von Jidder »
Dieser Text wird unter jedem Beitrag angezeigt.

iksnagreb

  • Beiträge: 28
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 16. October 2012, 23:47 »
Vielen Dank für die schnellen Antworten.
Ich denke, damit kann ich jetzt was programmieren :-).

 

Einloggen