Вкратце: смежно ли виртуальное адресное пространство процесса?
Мне нужно кое-что знать о виртуальном адресе, выделенном для процесса ядром.Пожалуйста, исправьте меня, если я ошибаюсь, когда я продолжаю.
При создании процесса ядро распределяет виртуальную память процессу и сохраняет начальные и конечные адреса виртуальных адресов различных сегментов процесса в * 1005.* в task_struct
.
Теперь предположим, что процесс исчерпал кучу и ему нужно увеличить размер кучи. Вызовы brk()
.
Если диапазон виртуальных адресов непрерывныйПредоставляется ли недавно выделенный кусок кучи вне диапазона, который был первоначально выделен для этого процесса?Или он размещен таким образом, что новый чанк соседствует с исходным.Что делать, если для этого нет места (потому что там лежит сегмент отображенной памяти).как это отслеживается?Если диапазон виртуальных адресов не является смежным, как vm_struct
отслеживает различные фрагменты диапазонов адресов для кучи (или любого другого сегмента)?
Не могли бы вы пояснить мою концепцию?