Hallo,
Ich möchte den Kernel, sowie alle seine Datenstrukturen in zusammenhängenden Pages haben, so dass ich sie einfach mappen kann.
Dann trage in dein Linkerscript einfach ein, dass GRUB deinen Kernel an physisch 4 MB laden soll; muss ja nicht zwingend 1 MB sein.
Der Kernel soll physikalisch und virtuell am selben Ort sein, denn das macht mir die Sache viel einfacher.
Das macht die Initialisierung wirklich viel einfacher, bringt die später aber mehr Probleme als Nutzen. Windows und Linux haben den Kernel-Bereich (einstellbar) bei 2 GB oder 3 GB, wenn du zu denen theoretisch binärkompatibel sein können möchtest, musst du deinen Kernel dort auch hinlegen.
Üblicherweise linkt man alle Anwendungen an die gleiche Adresse (durch die Speicherverwaltung ist da immer verschiedener Speicher). (Dynamische) Bibliotheken werden zur Laufzeit an eine Adresse gelinkt, die noch frei ist. Wenn das nicht geht, dann bekommt das Programm seine eigene Kopie der Bibliothek.
Praktisch kannst du den Kernel überall hinlegen, wenn du mit den daraus entstehenden Nachteilen leben kannst. Wenn du den Kernel nicht zwingend 1:1 mappst, dann kannst du die Adresse auch an einer zentralen Stelle konfigurierbar machen, falls du irgendwann merkst, dass deine Entscheidung doch nicht so gut war. (Im schlimmsten Fall musst du dann aber alle Anwendungen neu linken. Für ein Hobby-OS ist das aber kein wirkliches Problem.)
1 MB ist deswegen die logische Wahl. [...]
Es gab mal ein ISA-Hole an 15-16 MB, das du aber heute normal nicht mehr finden wirst.
Hey, das ist doch mein Satz!
Wenn du kein ISA-Hole unterstützen möchtest, hast du vermutlich 64 MB RAM oder mehr. Da kommt es dann nicht mehr darauf an, ob du nun an 1, 4 oder 16 MB lädst. (Zumal der Speicher ja nicht verloren geht, sondern in der normalen Speicherverwaltung auftaucht.) Ungefähr da würde ich aber die praktische Grenze für ein 1:1 setzen.
Gruß,
Svenska