Linux ядро vfree(), как синхронизировать мастер таблицы страниц ядра и таблицы страниц процесса?
Я знаю, как vmalloc () делает。 Когда процесс (в пространстве ядра) хочет получить доступ к памяти, которая принадлежит vmalloc () fault происходит сбой страницы и выполняется синхронизация。
Но когда он вызывает vfree(), как процесс обновляет свою таблицу страниц для синхронизации с главной страницей таблицы ядра? Или у меня есть некоторое понимание с этим.
Благодарю.
1 ответ
Ваше понимание распределения памяти, похоже, неверно. Нет памяти принадлежит vmalloc. Фиксированный виртуальный адрес (пространства ядра) назначается vmalloc во время загрузки. Позже, когда вызывается vmalloc, виртуальные адреса выбираются из фиксированного выделенного диапазона, а страницы физической памяти выделяются из системы друзей.
Виртуальные адреса и физические страницы отображаются один на один.
когда вызывается vfree(), диапазон виртуальных адресов снова освобождается, и физические страницы возвращаются в систему друзей.
Надеюсь, что это исправить ваше понимание.
Я предлагаю вам пройти онлайн-урок о памяти ядра, а также прочитать их сейчас.