
Linux 가상 메모리 영역에 대해 설명하는 교과서를 읽고 있었습니다.
vm_area_struct
a는 가상 메모리의 영역과 관련되어 있으며 vm_start
해당 vm_end
영역의 시작과 끝을 가리킨다는 것을 알 수 있습니다 .
우리는 커널이 brk
힙의 상단을 가리키는 포인터를 유지한다는 것을 알고 있습니다. 그래서 내 질문은 요청된 메모리를 할당하기 위해 호출할 때 사용 가능한 여유 블록이 없다고 가정해 보겠습니다. malloc
따라서 이 경우 요청된 메모리를 malloc
내부적으로 호출 mmap
하거나 sbrk
얻으려면 brk
포인터가 증가/증가하고 힙이 다음 vm_area_struct
과 같이 변경 됩니다. 음, 예를 들어 vm_end
최신을 가리키도록 증가될 것입니다 brk
.
답변1
예, brk
변경된 할당과 일치하도록 VMA를 수정합니다. 이런 일이 발생합니다do_brk_flags
: 할당이 가능한지 확인하고 기존 VMA를 정리한 후 업데이트하면 brk
기존 VMA가 업데이트되거나(적절한 VMA가 있는 경우) 새 VMA가 생성됩니다.