Linux 가상 메모리 영역에 관한 교과서를 읽고 있습니다.
보시다시피 a는 vm_area_struct
가상 메모리의 영역과 관련되어 있으며 해당 영역의 시작과 끝을 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가 생성됩니다.