Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: tiger717 am 14. October 2012, 15:03

Titel: Nicht durch das Multiboot-MMap beschriebene Adressräume
Beitrag von: tiger717 am 14. October 2012, 15:03
Hallo,

beim Auslesen des Multiboot-MMap ist mir aufgefallen, dass die beschriebenen Addressen nicht zusammenhängen. (d.h. Limit (Base + Length) von Eintrag n ist nicht Base von Eintrag n+1)
Ich gehe deshalb  davon aus, dass der gesamte Addressraum zwischen 0 und dem Ende des höheren Speichers (multiboot_lower_mem * 1024 + multiboot_upper_mem * 1024, oder?) frei ist, solange kein Blocked-Eintrag dazu im MMap vorhanden ist. Ist das so richtig?
Titel: Re: Nicht durch das Multiboot-MMap beschriebene Adressräume
Beitrag von: Jidder am 14. October 2012, 15:37
Du kannst davon ausgehen, dass der Bereich zwischen 0 und multiboot_lower_mem * 1024 und zwischen 1 MB (=0x100000) bis 0x100000+multiboot_upper_mem * 1024 als RAM zur Verfügung steht.

Insbesondere hat multiboot_lower_mem maximal den Wert 640 (KB). Das heißt es gibt eine Lücke zwischen 640 KB und 1 MB, die vom BIOS, Video Speicher, etc. belegt ist, und nicht als Speicher zur Verfügung steht. Außerdem entspricht der Wert multiboot_upper_mem nicht unbedingt dem maximalen Speicherausbau deines Systems, sondern nur der Größe bis zur ersten Lücke im Speicher. Diese Lücken sind auch der Grund, warum die Speicherbereiche durch Einträge nicht direkt aufeinander folgen. Wenn du deine Speicherverwaltung anhand der Memory Map initialisierst, darfst du nur die Speicherbereiche als frei ansehen, die auch tatsächlich so definiert sind. Du darfst nicht die Lücken mitbenutzen, weil diese Bereich keinen RAM enthalten.

Übrigens: Bereiche, die als RAM zur Verfügung stehen, sind nicht unbedingt frei. Zum Beispiel ist der Speicher bereits durch deinen Kernel und die Multiboot-Informationen teilweise belegt. Diese Bereiche musst du ebenfalls berücksichtigen, wenn du die Speicherverwaltung initialisierst.
Titel: Re: Nicht durch das Multiboot-MMap beschriebene Adressräume
Beitrag von: tiger717 am 14. October 2012, 15:59
Danke, jetzt macht das ganze irgendwie mehr Sinn.   :-)
Titel: Re: Nicht durch das Multiboot-MMap beschriebene Adressräume
Beitrag von: Dimension am 15. October 2012, 06:10
Dazu hätte ich dann auch eine Frage: die reservierten/gemappten Bereiche liegen nach dem Bootvorgang doch ausschließlich unterhalb von 1MB sowie irgendwo knapp unter 4GB, oder liege ich da falsch?
Titel: Re: Nicht durch das Multiboot-MMap beschriebene Adressräume
Beitrag von: Svenska am 15. October 2012, 10:26
Hallo,

es gibt klassisch drei Speicherlöcher:
- 640K-1M (wegen 8-Bit-ISA)
- 15-16M (wegen 16-Bit-ISA, EISA oder VLB)
- irgendwo unter 4G (wegen PCI)

aber niemand hindert einen Systemdesigner, noch weitere Löcher einzuführen.

Gruß,
Svenska