#linux-kernel #virtual-memory #flush #tlb #user-mode-linux
Вопрос:
Я искал ответ на этот вопрос, но не нашел никакого четкого ответа. При вызове системного вызова , например getpid()
, при возврате из режима ядра в режим пользователя, сбрасывается ли TLB?
Моя «логика» говорит «да», чтобы предотвратить вторжение пользователя в адресное пространство ядра. Я не очень убежден в этом ответе из-за аппаратной защиты, которая может защитить виртуальное пространство ядра и сэкономить время на очистку.
Хотел бы прояснить это,
Спасибо.
Комментарии:
1. Безусловно, такая аппаратная защита существует — в каждой записи таблицы страниц есть бит пользователя/супервизора, поэтому память ядра можно оставить отображенной, не делая ее доступной для пользователя. Однако я, кажется, припоминаю, что в рамках смягчения последствий распада/Спектра пользователь теперь получает отдельную таблицу страниц с памятью ядра, которая вообще не отображается, и переключение между этими таблицами при входе/выходе из ядра, безусловно, повлечет за собой сброс TLB. Мне придется поискать его.
2. @NateEldredge да, это называется Изоляция таблиц страниц, она же PTI, обычно включена по умолчанию.