Сброс TLB при переключении с ядра на пользовательский UNIX

#linux-kernel #virtual-memory #flush #tlb #user-mode-linux

Вопрос:

Я искал ответ на этот вопрос, но не нашел никакого четкого ответа. При вызове системного вызова , например getpid() , при возврате из режима ядра в режим пользователя, сбрасывается ли TLB?

Моя «логика» говорит «да», чтобы предотвратить вторжение пользователя в адресное пространство ядра. Я не очень убежден в этом ответе из-за аппаратной защиты, которая может защитить виртуальное пространство ядра и сэкономить время на очистку.

Хотел бы прояснить это,

Спасибо.

Комментарии:

1. Безусловно, такая аппаратная защита существует — в каждой записи таблицы страниц есть бит пользователя/супервизора, поэтому память ядра можно оставить отображенной, не делая ее доступной для пользователя. Однако я, кажется, припоминаю, что в рамках смягчения последствий распада/Спектра пользователь теперь получает отдельную таблицу страниц с памятью ядра, которая вообще не отображается, и переключение между этими таблицами при входе/выходе из ядра, безусловно, повлечет за собой сброс TLB. Мне придется поискать его.

2. @NateEldredge да, это называется Изоляция таблиц страниц, она же PTI, обычно включена по умолчанию.