heap management in segment-speicherverwaltung



  • ich kann mir irgendwie nich vorstellen wie ich den heap der prozesse in einer
    segmentbasierten speicherverwaltung (ohne paging) verwalten soll

    code und stacksegment sind ja einfach aber wie geh ich beim heap vor?
    erstell ich erstmal ein leeres/kleines segment und vergrößer/verschieb es bei jedem neuen malloc aufruf?



  • Du scheinst ja schon eine grundlegende Vorstellung davon zu haben, wie Speicherverwaltung ohne Paging funktionieren kann. Ich gehe davon aus, dass du im Protected Mode arbeitest. Die Verwaltung des Heaps ist da eigentlich nicht viel schwieriger als der Rest der Speicherverwaltung. Du reservierst erstmal einen Bereich bestimmter Groesse fuer den Heap (diese kannst du zB. im Programmheader eintragen).
    Fuer den Heap bastelst du dir intern natuerlich deine eigene kleine Mini-Speicherverwaltung. Wenn diese nun feststellt, dass der Heap voll ist, und ein malloc nicht mehr bedient werden kann, muss der Heap (das Segment des Heaps, dessen reservierter Speicherbereich) eben vergroessert werden.
    Das waere ein allgemeines Problem der Speicherverwaltung deines Systems, dass auf verschiedene Weise geloest werden kann.
    Der Fall, dass die Vergroesserung an Ort und Stelle geschehen kann, ist trivial.
    Ist der Speicherbereich (nicht der physikalische Speicher insgesammt! Das ist noch ein anderes Thema) zu klein, ist es im PM wohl am einfachsten, wenn du den Heap einfach komplett in einen freien Bereich verschiebst, der gross genug ist, und die Segmentbasis entsprechend anpasst.



  • ahh super danke 🙂

    hab mir schon sowas in der art gedacht... wusst nur nich ob das wirklich praktiziert wird


Anmelden zum Antworten