
Ich habe ein Lehrbuch gelesen, in dem es um virtuelle Speicherbereiche in Linux geht
Wir können sehen, dass sich a vm_area_struct
auf einen Bereich im virtuellen Speicher bezieht vm_start
und vm_end
auf den Anfang und das Ende des Bereichs zeigt.
Wir wissen, dass der Kernel einen brk
Zeiger verwaltet, der auf die Spitze des Heaps zeigt. Meine Frage ist also: Angenommen, es sind keine freien Blöcke verfügbar, wenn wir malloc
den angeforderten Speicher zuweisen. Rufen Sie in diesem Fall also malloc
intern auf mmap
oder sbrk
holen Sie sich den angeforderten Speicher, sodass brk
der Zeiger inkrementiert/anwächst. vm_area_struct
Ändert sich dann auch der Heap, vm_end
wird er beispielsweise inkrementiert, um auf das Neueste zu zeigen brk
?
Antwort1
Ja, brk
ändert die VMAs, um sie der geänderten Zuordnung anzupassen. Dies geschieht indo_brk_flags
: Nachdem überprüft wurde, ob die Zuordnung möglich ist, und vorhandene VMAs bereinigt wurden, brk
führt die Aktualisierung entweder dazu, dass ein vorhandenes VMA aktualisiert wird (sofern ein entsprechendes VMA vorhanden ist) oder ein neues VMA erstellt wird.