Autor Thema: Bitmaps  (Gelesen 13695 mal)

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 14. December 2008, 18:52 »
Was ist denn, wenn am Ende ein Modul liegt, dass abstürzen kann und neu gestartet werden muss.
Wenn ich das Teil neu starte, kann ich das ja nicht genau an die selbe Stelle legen sondern mein alloc gibt mir einen Bereich vor.
Dann verschwände ich doch den letzten Speicherblock.
Oder liegt am Ende immer was vom BIOS oder dem Multiboot?
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #21 am: 14. December 2008, 18:56 »
Wenn ein Modul in einem Bereich liegt, der gar nicht verfügbar ist, ist irgendwas entscheidendes schiefgegangen.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 14. December 2008, 20:04 »
Die Memory Map hat außerdem mit den Modulen nichts zu tun.
Dieser Text wird unter jedem Beitrag angezeigt.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 14. December 2008, 20:20 »
Nein, ich glaub ihr versteht mich falsch oder ich euch.
Der Bootloader lädt ja die Module in den RAM und markiert diese in seiner Memorymap.
Mein Problem ist folgendes:
Wenn der Bootloader ein modul an das Ende des RAMs legt, dann ist das ja der letzte Block.
Wenn ich nun den Speicher mit einer bitmap darstellen möchte und nur den Speicher anschaue, bis ich den letzten freien Block gefunden habe, dann kann es doch passieren, dass mir das Modul, dass an das Ende gelegt wurde abstürzt.

Wenn das geschehen ist, möchte ich es nachladen um somit mein System am Leben erhalten. Das lade ich aber an eine andere Stelle, denn mein Speichermanager kennt diesen "nicht existierenden" Block ja nicht. Also verliere ich doch das Ende + den Speicher für das reinitialisierte Modul, oder?

Hoffe ich konnte mich jetzt deutlicher ausdrücken.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 14. December 2008, 20:39 »
Die Module und ihre Adressen stehen in einer gesonderten Liste. In der Memory Map von GRUB stehen sie nicht.

Ein Modul liegt immer in existierendem Speicher, und dieser Speicher ist darüberhinaus in der Memory Map als frei gekennzeichnet. Wenn du deine Speicher- und Modulverwaltung initialisierst, kannst du genau feststellen, wo das Modul liegt. Stürzt das Modul ab, kannst du somit seinen Speicher freigeben.
« Letzte Änderung: 14. December 2008, 20:42 von PorkChicken »
Dieser Text wird unter jedem Beitrag angezeigt.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 14. December 2008, 21:58 »
Das ist auch der Grund, warum bei der Initialisierung nicht nur alle als verfügbar markierten Bereiche freigegeben werden, sondern gleich anschließend auch alles bereits belegte (Kernel, Module, Bitmap) wieder als reserviert markiert werden muß.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #26 am: 14. December 2008, 22:43 »
Danke.
Jetzt verstehe ich es komplett.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

 

Einloggen