
Estaba leyendo un libro de texto que habla sobre las áreas de memoria virtual de Linux.
Podemos ver que a vm_area_struct
está relacionado con un área en la memoria virtual vm_start
y vm_end
apunta al principio y al final del área.
Sabemos que el kernel mantiene un brk
puntero que apunta a la parte superior del montón. Entonces mi pregunta es, digamos que no hay bloques libres disponibles cuando llamamos malloc
para asignar la memoria solicitada, por lo que en este caso, malloc
llame internamente mmap
u sbrk
obtenga la memoria solicitada, por lo tanto, brk
el puntero se incrementará/crecerá, luego el montón cambiará vm_area_struct
como bueno, por ejemplo, vm_end
¿se incrementará para señalar lo último brk
?
Respuesta1
Sí, brk
modifica los VMA para que coincidan con la asignación modificada. Esto sucede endo_brk_flags
: después de comprobar que la asignación es posible y limpiar los VMA existentes, la actualización brk
da como resultado la actualización de un VMA existente (si existe un VMA apropiado) o la creación de un nuevo VMA.