
私は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 が作成されます。