malloc을 호출하면 vm_area_struct가 변경되나요?

malloc을 호출하면 vm_area_struct가 변경되나요?

Linux 가상 메모리 영역에 대해 설명하는 교과서를 읽고 있었습니다. 여기에 이미지 설명을 입력하세요

vm_area_structa는 가상 메모리의 영역과 관련되어 있으며 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가 생성됩니다.

관련 정보